diff options
author | David A. Madore <david+git@madore.org> | 2011-08-31 22:26:55 +0200 |
---|---|---|
committer | David A. Madore <david+git@madore.org> | 2011-08-31 22:26:55 +0200 |
commit | 057a46982292c765e664f886097fdaf33ed22a62 (patch) | |
tree | f9ba446ae36f4e13f4b579b293ace2004a0dbf29 /org/madore/damlengine/WeblogPopulate.java | |
parent | 3d44424a1738ce3f70c82780f4441e077c1194a3 (diff) | |
download | damlengine-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.java | 154 |
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(); } |