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();
}
}