private void getMediaWikiPages()

in src/main/java/com/atlassian/uwc/exporters/MediaWikiExporter.java [460:595]


	private void getMediaWikiPages(
			String pageSql, 
			String textSql,
			String titleColumn,
			String textColumn,
			String namespaceColumn,
			String pageIdColumn,
			String textIdColumn) throws SQLException {
		String message = null;
		ResultSet pageData, textData, textIdData;
		pageData = textData = textIdData = null;
		try {
			message = pageSql;
			pageData = sql(pageSql);
			while (pageData.next()) {
				if (!this.running) return;
				//get the relevant strings
				String latest = pageData.getString(textIdColumn); 
				String namespace = pageData.getString(namespaceColumn); 
				String id = pageData.getString(pageIdColumn); 
				byte[] bytes2 = pageData.getBytes(titleColumn); //get bytes, 'cause we might have unicode issues
				String title = null;
				try {
					title = getTitle(bytes2);
				} catch (UnsupportedEncodingException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

				//replace references to page props with real data
				String textSqlAdj = textSql.replaceAll("db.column.pageid", id);
				textSqlAdj = textSqlAdj.replaceAll("db.column.title", title);
				textSqlAdj = textSqlAdj.replaceAll("db.column.namespace", namespace);
				
				//handle histories
				Vector<String> allRevs = new Vector<String>();
				if (gettingHistory()) {
					if (optRevSql != null && !"".equals(optRevSql)) {
						String revsql = optRevSql.replaceAll("db.column.pageid", id);
						Matcher colFinder = firstCol.matcher(revsql);
						if (colFinder.find()) {
							String col = colFinder.group(1); //select SOMECOLUMN
							allRevs = getAllRevIds(revsql, col);
						}
						else {
							log.warn("Couldn't find return column. Using default revsql.");
							allRevs = getAllRevIds(id);
						}
					}
					else allRevs = getAllRevIds(id); //no optional rev sql
				}
				else {
					allRevs.add(latest); //just the latest one
				}
				
				//handle user date data (udmf)
				//user timestamp data
				String defaultUdmfSql = "select " + COL_REV_USER + "," + COL_REV_DATE + "," + COL_REV + 
								 " from " + prefix + REV_TABLE +
								 " where " + COL_REV_PAGE + "='" + id + "';";
				HashMap<String,String[]>revUdmfMap = null;
				if (gettingUserdate()) { 
					if (optUdmfSql != null && !"".equals(optUdmfSql)) {
						String udmfSql = optUdmfSql.replaceAll("db.column.pageid", id);
						Matcher colFinder = allCols.matcher(udmfSql);
						if (colFinder.find()) {
							String[] cols = colFinder.group(1).split(",");
							revUdmfMap = getUserDateMap(udmfSql, cols); //rev_id -> [username,timestamp]
						}
						else {
							log.warn("Couldn't find return columns. Using default revsql.");
							revUdmfMap = getUserDateMap(defaultUdmfSql); //rev_id -> [username,timestamp]
						}
					}
					else revUdmfMap = getUserDateMap(defaultUdmfSql); //no optional rev sql
				}
				

				
				int numRevs = 1;
				String textSqlRepeater = textSqlAdj;
				for (String rev : allRevs) {
					//get text id
					String textIdSql = optTextIdSql.replaceAll("db.column.textid", rev);
					message = textIdSql;
					textIdData = sql(textIdSql);
					String textid = "";
					while (textIdData.next()) {
						if (!this.running) return;
						textid = textIdData.getString(1); //get first column result
					}
					
					//get text
					textSqlAdj = textSqlRepeater.replaceAll("db.column.textid", textid);
					message = textSqlAdj;
					textData = sql(textSqlAdj);
					String text = "";
					while (textData.next() ) {
						if (!this.running) return;
						byte[] bytes = textData.getBytes(COL_TEXT);
						try {
							text = new String(bytes, encoding);
						} catch (UnsupportedEncodingException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
					
					if (gettingUserdate()) { //date for udmf framework: usernames and timestamps 
						if (!this.running) return;
						String userdate = getUserDateData(rev, revUdmfMap);
						text = userdate + text;
					}
					
					if (title == null || text == null || id == null) {
						message = "title, text, or id is null. Check optional sql properties.";
						throw new IllegalArgumentException();
					}
					
					//save the data into a local object
					MediaWikiPage mwpage = new MediaWikiPage(title, text, namespace, id, (numRevs++)+""); 
					
					//output the file to the system
					createFileLocally(mwpage);
					
					textData.close();
					textIdData.close();
				}
			}
		} catch (SQLException e) {
			log.error("Problem while running custom SQL: " + message);
			throw e;
		} finally {
			pageData.close();
		}
	}