diff -r 903b46fc4214 -r c06ab07fd29d test/v2-regression/javatest.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/v2-regression/javatest.html Tue Aug 23 14:13:46 2016 +0200 @@ -0,0 +1,215 @@ + + + + c2html + + + + +
+  1  /*
+  2   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+  3   *
+  4   * Copyright 2014 Mike Becker. All rights reserved.
+  5   *
+  6   * Redistribution and use in source and binary forms, with or without
+  7   * modification, are permitted provided that the following conditions are met:
+  8   *
+  9   *   1. Redistributions of source code must retain the above copyright
+ 10   *      notice, this list of conditions and the following disclaimer.
+ 11   *
+ 12   *   2. Redistributions in binary form must reproduce the above copyright
+ 13   *      notice, this list of conditions and the following disclaimer in the
+ 14   *      documentation and/or other materials provided with the distribution.
+ 15   *
+ 16   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ 17   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ 18   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ 19   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ 20   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ 21   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ 22   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ 23   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ 24   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ 25   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ 26   * POSSIBILITY OF SUCH DAMAGE.
+ 27   *
+ 28   */
+ 29  
+ 30  package de.uapcore.sigred.doc.base;
+ 31  
+ 32  import de.uapcore.sigred.doc.Resources;
+ 33  import de.uapcore.sigrapi.impl.Digraph;
+ 34  import de.uapcore.sigrapi.impl.Graph;
+ 35  import de.uapcore.sigrapi.IGraph;
+ 36  import java.io.IOException;
+ 37  import java.io.InputStream;
+ 38  import java.io.OutputStream;
+ 39  import java.util.concurrent.atomic.AtomicBoolean;
+ 40  import java.util.concurrent.atomic.AtomicReference;
+ 41  import org.apache.xerces.impl.Constants;
+ 42  import org.dom4j.Document;
+ 43  import org.dom4j.DocumentException;
+ 44  import org.dom4j.DocumentHelper;
+ 45  import org.dom4j.Element;
+ 46  import org.dom4j.Namespace;
+ 47  import org.dom4j.QName;
+ 48  import org.dom4j.io.OutputFormat;
+ 49  import org.dom4j.io.SAXReader;
+ 50  import org.dom4j.io.XMLWriter;
+ 51  import org.xml.sax.ErrorHandler;
+ 52  import org.xml.sax.SAXException;
+ 53  import org.xml.sax.SAXParseException;
+ 54  
+ 55  public abstract class AbstractGraphDocument<T extends IGraph>
+ 56          extends FileBackedDocument {
+ 57      
+ 58      protected static final Namespace NAMESPACE = Namespace.get("sigred",
+ 59          "http://develop.uap-core.de/sigred/");
+ 60      
+ 61      private static final
+ 62          QName TAG_GRAPHDOC = QName.get("graph-document", NAMESPACE);
+ 63      private static final
+ 64          QName TAG_GRAPH = QName.get("graph", NAMESPACE);
+ 65      private static final
+ 66          QName TAG_DIGRAPH = QName.get("digraph", NAMESPACE);
+ 67      private static final
+ 68          QName TAG_METADATA = QName.get("metadata", NAMESPACE);
+ 69      
+ 70      protected final T graph;
+ 71      
+ 72      private final GraphDocumentMetadata metadata;
+ 73      
+ 74      public AbstractGraphDocument(Class<T> graphType) {
+ 75          T g;
+ 76          try {
+ 77              g = graphType.newInstance();
+ 78          } catch (ReflectiveOperationException e) {
+ 79              assert false;
+ 80              g = null; // for the compiler
+ 81          }
+ 82          graph = g;
+ 83          metadata = new GraphDocumentMetadata();
+ 84      }
+ 85  
+ 86      public T getGraph() {
+ 87          return graph;
+ 88      }
+ 89      
+ 90      public GraphDocumentMetadata getMetadata() {
+ 91          return metadata;
+ 92      }
+ 93  
+ 94      protected abstract void writeGraph(Element rootNode) throws IOException;
+ 95      protected abstract void readGraph(Element rootNode) throws IOException;
+ 96  
+ 97      @Override
+ 98      public void writeTo(OutputStream out) throws IOException {
+ 99          Document doc = DocumentHelper.createDocument();
+100  
+101          Element rootNode = doc.addElement(TAG_GRAPHDOC);
+102  
+103          Element metadataNode = rootNode.addElement(TAG_METADATA);
+104  
+105          metadata.write(metadataNode);
+106  
+107          if (graph instanceof Graph) {
+108              writeGraph(rootNode.addElement(TAG_GRAPH));
+109          } else if (graph instanceof Digraph) {
+110              writeGraph(rootNode.addElement(TAG_DIGRAPH));
+111          } else {
+112              throw new IOException("unsupported graph type");
+113          }
+114  
+115          XMLWriter writer = new XMLWriter(out, OutputFormat.createPrettyPrint());
+116          writer.write(doc);
+117          writer.flush();
+118      }
+119  
+120      @Override
+121      public void readFrom(InputStream in) throws IOException {
+122          try {
+123              SAXReader reader = new SAXReader(true);
+124              reader.setStripWhitespaceText(true);
+125              
+126              reader.setFeature(Constants.XERCES_FEATURE_PREFIX+
+127                  Constants.SCHEMA_VALIDATION_FEATURE, true);
+128              reader.setProperty(Constants.XERCES_PROPERTY_PREFIX +
+129                  Constants.SCHEMA_LOCATION, String.format("%s %s",
+130                      NAMESPACE.getURI(), Resources.class.getResource(
+131                          "graph-document.xsd").toExternalForm()));
+132              
+133              final AtomicBoolean passed = new AtomicBoolean(true);
+134              final AtomicReference<SAXParseException> xmlerror = new AtomicReference<>();
+135              // TODO: we should do more detailed error handling here
+136              reader.setErrorHandler(new ErrorHandler() {
+137                  @Override
+138                  public void warning(SAXParseException exception) throws SAXException {
+139                  }
+140  
+141                  @Override
+142                  public void error(SAXParseException exception) throws SAXException {
+143                      xmlerror.set(exception);
+144                      passed.set(false);
+145                  }
+146  
+147                  @Override
+148                  public void fatalError(SAXParseException exception) throws SAXException {
+149                      xmlerror.set(exception);
+150                      passed.set(false);
+151                  }
+152                  
+153              });
+154              Document doc = reader.read(in);
+155              if (!passed.get()) {
+156                  // TODO: provide details (maybe via separate error object?)
+157                  throw xmlerror.get();
+158              }
+159              
+160              doc.normalize();
+161              
+162              Element root = doc.getRootElement();
+163              metadata.read(root.element(TAG_METADATA));
+164              
+165              if (graph instanceof Graph) {
+166                  readGraph(root.element(TAG_GRAPH));
+167              } else if (graph instanceof Digraph) {
+168                  readGraph(root.element(TAG_DIGRAPH));
+169              } else {
+170                  throw new IOException("unsupported graph type");
+171              }
+172          } catch (DocumentException | SAXException ex) {
+173              throw new IOException(ex);
+174          }
+175      }
+176  }
+
+ + +