Author: jflesch
Date: 2008-02-06 23:08:29 +0000 (Wed, 06 Feb 2008)
New Revision: 17620

Added:
   trunk/apps/Thaw/src/thaw/plugins/signatures/TrustListParser.java
Log:
Forgot a file ...

Added: trunk/apps/Thaw/src/thaw/plugins/signatures/TrustListParser.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/signatures/TrustListParser.java            
                (rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/signatures/TrustListParser.java    
2008-02-06 23:08:29 UTC (rev 17620)
@@ -0,0 +1,285 @@
+package thaw.plugins.signatures;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.Vector;
+import java.util.Iterator;
+
+import thaw.core.Logger;
+
+/* DOM */
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/* SAX */
+
+import org.xml.sax.*;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.SAXParser;
+
+import java.io.FileInputStream;
+
+
+public class TrustListParser {
+       private TrustListParser() {
+               
+       }
+       
+       /*********************** EXPORT  ******************************/
+       
+       public static boolean exportTrustList(Vector identities, File 
outputFile) {
+               try {
+                       FileOutputStream out = new FileOutputStream(outputFile);
+                       
+                       StreamResult streamResult;
+
+                       streamResult = new StreamResult(out);
+
+                       Document xmlDoc;
+
+                       final DocumentBuilderFactory xmlFactory = 
DocumentBuilderFactory.newInstance();
+                       DocumentBuilder xmlBuilder;
+
+                       try {
+                               xmlBuilder = xmlFactory.newDocumentBuilder();
+                       } catch(final 
javax.xml.parsers.ParserConfigurationException e) {
+                               Logger.error(new TrustListParser(), "Unable to 
generate the index because : "+e.toString());
+                               return false;
+                       }
+
+                       final DOMImplementation impl = 
xmlBuilder.getDOMImplementation();
+
+                       xmlDoc = impl.createDocument(null, "trustList", null);
+
+                       final Element rootEl = xmlDoc.getDocumentElement();
+
+                       /**** DOM Tree generation ****/
+                       fillInRootElement(identities, rootEl, xmlDoc);
+
+
+                       /* Serialization */
+                       final DOMSource domSource = new DOMSource(xmlDoc);
+                       final TransformerFactory transformFactory = 
TransformerFactory.newInstance();
+
+                       Transformer serializer;
+
+                       try {
+                               serializer = transformFactory.newTransformer();
+                       } catch(final 
javax.xml.transform.TransformerConfigurationException e) {
+                               Logger.error(new TrustListParser(), "Unable to 
save index because: "+e.toString());
+                               return false;
+                       }
+
+                       
serializer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
+                       serializer.setOutputProperty(OutputKeys.INDENT,"yes");
+
+                       /* final step */
+                       try {
+                               serializer.transform(domSource, streamResult);
+                       } catch(final javax.xml.transform.TransformerException 
e) {
+                               Logger.error(new TrustListParser(), "Unable to 
save index because: "+e.toString());
+                               return false;
+                       }
+                       
+                       out.close();
+                       
+                       return true;
+               } catch(java.io.FileNotFoundException e) {
+                       Logger.error(new TrustListParser(), "File not found 
exception ?!");
+               } catch(java.io.IOException e) {
+                       Logger.error(new TrustListParser(), "IOException while 
generating the index: "+e.toString());
+               }
+               
+               return false;
+       }
+       
+       /**
+        * Use it only if you know what you're doing
+        * @param identities
+        * @param rootEl
+        * @param xmlDoc
+        * @return
+        */
+       public static boolean fillInRootElement(Vector identities, Element 
rootEl, Document xmlDoc) {
+               //rootEl.appendChild(getXMLHeader(xmlDoc));
+               
+               for (Iterator it = identities.iterator();
+                       it.hasNext();) {
+                       Identity id = (Identity)it.next();
+                       
+                       if (id.getTrustLevel() != 0 /* no just 'SIGNED' */
+                                       && id.getTrustLevel() != 
Identity.trustLevelInt[0]) /* and no dev */
+                               rootEl.appendChild(getXMLIdentity(id, xmlDoc));
+               }
+               
+               return true;
+       }
+       
+       private static Element getXMLIdentity(Identity id, Document xmlDoc) {
+               Element idEl = xmlDoc.createElement("identity");
+               
+               Element nickEl = xmlDoc.createElement("nick");
+               nickEl.appendChild(xmlDoc.createTextNode(id.getNick()));
+               idEl.appendChild(nickEl);
+               
+               Element publicKeyEl = xmlDoc.createElement("publicKey");
+               
publicKeyEl.appendChild(xmlDoc.createTextNode(id.getPublicKey()));
+               idEl.appendChild(publicKeyEl);
+               
+               Element trustLevelEl = xmlDoc.createElement("trustLevel");
+               
trustLevelEl.appendChild(xmlDoc.createTextNode(Integer.toString(id.getTrustLevel()*10)));
+               idEl.appendChild(trustLevelEl);
+               
+               return idEl;
+       }
+       
+       
+       
+       /*********************** IMPORT 
****************************************/
+       
+       public static interface TrustListContainer {
+               /**
+                * Identity is used here just as a container.
+                * no ref to the db was provided to these identity
+                * @param i
+                */
+               public void updateIdentity(Identity i);
+       }
+
+
+       /**
+        * public so you can override it if you want
+        * @author jflesch
+        */
+       public static class TrustListHandler extends DefaultHandler {
+               private TrustListContainer container;
+               
+               public TrustListHandler(TrustListContainer container) {
+                       this.container = container;
+               }
+               
+               public void startDocument() throws SAXException {       }
+               
+               private boolean nickTag = false;
+               private boolean publicKeyTag = false;
+               private boolean trustLevelTag = false;
+               
+               private String nick = null;
+               private String publicKey = null;
+               private String trustLevel = null;
+               
+               public void startElement(String nameSpaceURI, String localName,
+                                                                String 
rawName, Attributes attrs) throws SAXException {
+                       if (rawName == null) {
+                               rawName = localName;
+                       }
+
+                       if (rawName == null)
+                               return;
+
+                       if ("identity".equals(rawName)) {
+                               nickTag = false;
+                               publicKeyTag = false;
+                               trustLevelTag = false;
+                               nick = null;
+                               publicKey = null;
+                               trustLevel = null;
+                       } else if ("nick".equals(rawName)) {
+                               nickTag = true;
+                       } else if ("publicKey".equals(rawName)) {
+                               publicKeyTag = true;
+                       } else if ("trustLevel".equals(rawName)) {
+                               trustLevelTag = true;
+                       }
+               }
+               
+               
+               /**
+                * Called when a closing tag is met
+                * @see org.xml.sax.ContentHandler#endElement(java.lang.String, 
java.lang.String, java.lang.String)
+                */
+               public void endElement(String nameSpaceURI, String localName,
+                                                       String rawName) throws 
SAXException {
+                       if (rawName == null) {
+                               rawName = localName;
+                       }
+
+                       if (rawName == null)
+                               return;
+
+                       if ("identity".equals(rawName)) {
+                               if (nick != null && publicKey != null && 
trustLevel != null) {
+                                       Identity i = new Identity(null, -1, 
nick, publicKey, null, false, Integer.parseInt(trustLevel)/10);
+                                       container.updateIdentity(i);
+                               }
+                               publicKey = null;
+                       } else if ("nick".equals(rawName)) {
+                               nickTag = false;
+                       } else if ("publicKey".equals(rawName)) {
+                               publicKeyTag = false;
+                       } else if ("trustLevel".equals(rawName)) {
+                               trustLevelTag = false;
+                       }
+               }
+               
+               public void characters(char[] ch, int start, int end) throws 
SAXException {
+                       String txt = new String(ch, start, end);
+                       
+                       if (nickTag)
+                               nick = txt;
+                       else if (publicKeyTag)
+                               publicKey = txt;
+                       else if (trustLevelTag)
+                               trustLevel = txt;
+               }
+               
+               public void endDocument() throws SAXException {
+
+               }
+       }
+
+       public static void importTrustList(TrustListContainer container, File 
inputFile) {
+               importTrustList(new TrustListHandler(container), inputFile);
+       }
+       
+       public static void importTrustList(TrustListHandler handler, File 
inputFile) {
+               try {
+                       FileInputStream stream = new FileInputStream(inputFile);
+                       
+                       // Use the default (non-validating) parser
+                       SAXParserFactory factory = 
SAXParserFactory.newInstance();
+
+                       // Parse the input
+                       SAXParser saxParser = factory.newSAXParser();
+
+                       Logger.notice(handler, "Parsing index ...");
+                       saxParser.parse(stream, handler);
+                       Logger.notice(handler, "Parsing done");
+
+                       stream.close();
+               } catch(final java.io.FileNotFoundException e) {
+                       Logger.error(new TrustListParser(), "Unable to load 
XML: FileNotFoundException ('"+inputFile.getPath()+"') ! : "+e.toString());
+               } catch(java.io.IOException e) {
+                       Logger.error(new TrustListParser(), "IOException while 
parsing the index: "+e.toString());
+               } catch(javax.xml.parsers.ParserConfigurationException e) {
+                       Logger.notice(new TrustListParser(), "Error (1) while 
parsing index: "+e.toString());
+               } catch(org.xml.sax.SAXException e) {
+                       Logger.notice(new TrustListParser(), "Error (2) while 
parsing index: "+e.toString());
+               } catch(Exception e) {
+                       Logger.notice(new TrustListParser(), "Error (4) while 
parsing index: "+e.toString());
+               }
+       }
+
+}


Reply via email to