diff -r 3fff4c364ffc -r 12d8f0f6ef06 test/golden-master/javatest.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/golden-master/javatest.html Mon Oct 03 12:14:53 2022 +0200 @@ -0,0 +1,221 @@ + + + + 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 }
+
+ + +