summaryrefslogtreecommitdiffstats
path: root/org/madore/damlengine/WeblogPopulate.java
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2011-08-31 22:26:55 +0200
committerDavid A. Madore <david+git@madore.org>2011-08-31 22:26:55 +0200
commit057a46982292c765e664f886097fdaf33ed22a62 (patch)
treef9ba446ae36f4e13f4b579b293ace2004a0dbf29 /org/madore/damlengine/WeblogPopulate.java
parent3d44424a1738ce3f70c82780f4441e077c1194a3 (diff)
downloaddamlengine-057a46982292c765e664f886097fdaf33ed22a62.tar.gz
damlengine-057a46982292c765e664f886097fdaf33ed22a62.tar.bz2
damlengine-057a46982292c765e664f886097fdaf33ed22a62.zip
Wrap it all in a single command handler.
Diffstat (limited to 'org/madore/damlengine/WeblogPopulate.java')
-rw-r--r--org/madore/damlengine/WeblogPopulate.java154
1 files changed, 74 insertions, 80 deletions
diff --git a/org/madore/damlengine/WeblogPopulate.java b/org/madore/damlengine/WeblogPopulate.java
index 0d28d92..56e51ac 100644
--- a/org/madore/damlengine/WeblogPopulate.java
+++ b/org/madore/damlengine/WeblogPopulate.java
@@ -1,6 +1,7 @@
package org.madore.damlengine;
import java.util.regex.Pattern;
+import java.io.InputStream;
import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -25,15 +26,11 @@ public final class WeblogPopulate {
return sb.toString();
}
- public static void main(String[] args)
+ public static void populate(InputStream in)
throws Exception {
final DocumentBuilder db = DamlEngine.GetDocumentBuilder.db;
- if ( args.length == 0 ) {
- System.err.println("expecting filename as argument");
- }
-
final DOMImplementationLS domi
= (DOMImplementationLS)(db.getDOMImplementation());
LSSerializer ser = domi.createLSSerializer();
@@ -56,83 +53,81 @@ public final class WeblogPopulate {
final PreparedStatement setCatSt
= conn.prepareStatement("INSERT INTO incat(id,code) VALUES (?,?)");
- for (String fname : args) {
- Document doc = db.parse(fname);
- XPathFactory xpf = XPathFactory.newInstance();
- XPath xp = xpf.newXPath();
- xp.setNamespaceContext(new DamlEngine.DamlNSMapping());
- XPathExpression expr = xp.compile("//d:weblog/d:entry");
- XPathExpression texpr = xp.compile("d:title");
- NodeList entries = (NodeList)(expr.evaluate(doc, XPathConstants.NODESET));
- for ( int i=0 ; i<entries.getLength() ; i++ ) {
- Element ent = (Element)(entries.item(i));
- String idStr = ent.getAttributeNS(null, "number");
- if ( ! Pattern.matches("^\\d{4}$", idStr) )
- throw new IllegalArgumentException("entry number attribute must be of the form NNNN");
- int id = Integer.parseInt(idStr);
- String date = ent.getAttributeNS(null, "date");
- if ( ! Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", date) )
- throw new IllegalArgumentException("entry date attribute must be of the form YYYY-MM-DD");
- String cdate;
- if ( ent.hasAttributeNS(null, "cdate") )
- cdate = ent.getAttributeNS(null, "cdate");
+ Document doc = db.parse(in);
+ XPathFactory xpf = XPathFactory.newInstance();
+ XPath xp = xpf.newXPath();
+ xp.setNamespaceContext(new DamlEngine.DamlNSMapping());
+ XPathExpression expr = xp.compile("//d:weblog/d:entry");
+ XPathExpression texpr = xp.compile("d:title");
+ NodeList entries = (NodeList)(expr.evaluate(doc, XPathConstants.NODESET));
+ for ( int i=0 ; i<entries.getLength() ; i++ ) {
+ Element ent = (Element)(entries.item(i));
+ String idStr = ent.getAttributeNS(null, "number");
+ if ( ! Pattern.matches("^\\d{4}$", idStr) )
+ throw new IllegalArgumentException("entry number attribute must be of the form NNNN");
+ int id = Integer.parseInt(idStr);
+ String date = ent.getAttributeNS(null, "date");
+ if ( ! Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", date) )
+ throw new IllegalArgumentException("entry date attribute must be of the form YYYY-MM-DD");
+ String cdate;
+ if ( ent.hasAttributeNS(null, "cdate") )
+ cdate = ent.getAttributeNS(null, "cdate");
+ else
+ cdate = null;
+ String catStr = ent.getAttributeNS(null, "cat");
+ String[] catList = catStr.split("\\s+");
+ String lang = LangHelper.getLangRec(ent);
+ String content = ser.writeToString(ent);
+ sha1.reset();
+ String digest = toHex(sha1.digest(content.getBytes("UTF-8")));
+
+ checkSt.setInt(1, id);
+ ResultSet checkRes = checkSt.executeQuery();
+ boolean exists = checkRes.next();
+ if ( exists && checkRes.getString(1).equals(digest) )
+ continue;
+ Node titleNode = (Node)(texpr.evaluate(ent, XPathConstants.NODE));
+ String titleTxt = (titleNode != null) ? titleNode.getTextContent() : null;
+ String titleXml = (titleNode != null) ? ser.writeToString(titleNode) : null;
+ conn.setAutoCommit(false);
+ if ( exists ) {
+ System.err.println("Updating entry "+id);
+ updateSt.setString(1, date);
+ updateSt.setString(2, lang);
+ updateSt.setString(3, titleTxt);
+ updateSt.setString(4, titleXml);
+ updateSt.setString(5, content);
+ updateSt.setString(6, digest);
+ updateSt.setInt(7, id);
+ updateSt.executeUpdate();
+ } else {
+ System.err.println("Registering entry "+id);
+ PreparedStatement insertSt;
+ if ( cdate == null )
+ insertSt = insertNSt;
else
- cdate = null;
- String catStr = ent.getAttributeNS(null, "cat");
- String[] catList = catStr.split("\\s+");
- String lang = LangHelper.getLangRec(ent);
- String content = ser.writeToString(ent);
- sha1.reset();
- String digest = toHex(sha1.digest(content.getBytes("UTF-8")));
-
- checkSt.setInt(1, id);
- ResultSet checkRes = checkSt.executeQuery();
- boolean exists = checkRes.next();
- if ( exists && checkRes.getString(1).equals(digest) )
- continue;
- Node titleNode = (Node)(texpr.evaluate(ent, XPathConstants.NODE));
- String titleTxt = (titleNode != null) ? titleNode.getTextContent() : null;
- String titleXml = (titleNode != null) ? ser.writeToString(titleNode) : null;
- conn.setAutoCommit(false);
- if ( exists ) {
- System.err.println("Updating entry "+id);
- updateSt.setString(1, date);
- updateSt.setString(2, lang);
- updateSt.setString(3, titleTxt);
- updateSt.setString(4, titleXml);
- updateSt.setString(5, content);
- updateSt.setString(6, digest);
- updateSt.setInt(7, id);
- updateSt.executeUpdate();
- } else {
- System.err.println("Registering entry "+id);
- PreparedStatement insertSt;
- if ( cdate == null )
- insertSt = insertNSt;
- else
- insertSt = insertCSt;
- insertSt.setInt(1, id);
- insertSt.setString(2, date);
- insertSt.setString(3, lang);
- insertSt.setString(4, titleTxt);
- insertSt.setString(5, titleXml);
- insertSt.setString(6, content);
- insertSt.setString(7, digest);
- if ( cdate != null )
- insertSt.setString(8, cdate);
- insertSt.executeUpdate();
- }
- clearCatSt.setInt(1, id);
- clearCatSt.executeUpdate();
- for ( String cat : catList ) {
- if ( ! cat.equals("") ) {
- setCatSt.setInt(1, id);
- setCatSt.setString(2, cat);
- setCatSt.executeUpdate();
- }
+ insertSt = insertCSt;
+ insertSt.setInt(1, id);
+ insertSt.setString(2, date);
+ insertSt.setString(3, lang);
+ insertSt.setString(4, titleTxt);
+ insertSt.setString(5, titleXml);
+ insertSt.setString(6, content);
+ insertSt.setString(7, digest);
+ if ( cdate != null )
+ insertSt.setString(8, cdate);
+ insertSt.executeUpdate();
+ }
+ clearCatSt.setInt(1, id);
+ clearCatSt.executeUpdate();
+ for ( String cat : catList ) {
+ if ( ! cat.equals("") ) {
+ setCatSt.setInt(1, id);
+ setCatSt.setString(2, cat);
+ setCatSt.executeUpdate();
}
- conn.commit();
}
+ conn.commit();
}
checkSt.close();
@@ -141,7 +136,6 @@ public final class WeblogPopulate {
updateSt.close();
clearCatSt.close();
setCatSt.close();
- conn.close();
}