]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document/src/org/simantics/document/DocumentUtils.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.document / src / org / simantics / document / DocumentUtils.java
index 726d43a9b47acec10d2b880fc78a520b0cebf081..e539df2c3aa27cdc0cb276363809d52e125e48ba 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2012 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.document;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-import java.util.List;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.util.URIStringUtils;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.RequestProcessor;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.VirtualGraph;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.request.PossibleIndexRoot;\r
-import org.simantics.db.common.request.ResourceRead;\r
-import org.simantics.db.common.request.UniqueRead;\r
-import org.simantics.db.common.request.WriteResultRequest;\r
-import org.simantics.db.common.utils.Logger;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.layer0.variable.Variables;\r
-import org.simantics.document.function.WikiDocumentNodeImpl;\r
-import org.simantics.document.node.Composite;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.scenegraph.loader.ScenegraphLoaderProcess;\r
-import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;\r
-import org.simantics.scenegraph.loader.ScenegraphVariable;\r
-import org.simantics.scenegraph.ontology.ScenegraphResources;\r
-import org.simantics.simulation.ontology.SimulationResource;\r
-import org.simantics.wiki.ui.SimanticsDialect;\r
-\r
-import com.lowagie.text.Document;\r
-import com.lowagie.text.DocumentException;\r
-import com.lowagie.text.pdf.PdfWriter;\r
-\r
-public class DocumentUtils {\r
-\r
-       static class DeepDocs extends ResourceRead<List<Resource>> {\r
-\r
-               protected DeepDocs(Resource resource) {\r
-                       super(resource);\r
-               }\r
-\r
-               @Override\r
-               public List<Resource> perform(ReadGraph graph) throws DatabaseException {\r
-\r
-                       DocumentResource DOC = DocumentResource.getInstance(graph);\r
-                       Resource doc = graph.getPossibleObject(resource, DOC.HasDocument);\r
-\r
-                       Layer0 L0 = Layer0.getInstance(graph);\r
-                       Collection<Resource> children = graph.getObjects(resource, L0.ConsistsOf);\r
-                       if(children.isEmpty()) {\r
-                               if(doc != null) return Collections.singletonList(resource);\r
-                               else return Collections.emptyList();\r
-                       } else {\r
-                               ArrayList<Resource> result = new ArrayList<Resource>();\r
-                               if(doc != null) result.add(resource);\r
-                               for(Resource child : children)\r
-                                       result.addAll(graph.syncRequest(new DeepDocs(child)));\r
-                               return result;\r
-                       }\r
-                       \r
-               }\r
-        \r
-       }\r
-       \r
-       public DocumentSettings getDocumentSettings(RequestProcessor processor, final Resource resource) throws DatabaseException {\r
-\r
-               return processor.syncRequest(new ResourceRead<DocumentSettings>(resource) {\r
-\r
-                       @Override\r
-                       public DocumentSettings perform(ReadGraph graph) throws DatabaseException {\r
-\r
-                               Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));\r
-                               if(indexRoot == null) return DocumentSettings.DEFAULT;\r
-                               \r
-                               DocumentResource DOC = DocumentResource.getInstance(graph);\r
-                               DocumentSettings result = graph.getPossibleRelatedValue(indexRoot, DOC.documentSettings, DocumentSettings.BINDING);\r
-                               if(result == null) return DocumentSettings.DEFAULT;\r
-                               return result;\r
-                               \r
-                       }\r
-                       \r
-               });\r
-\r
-       }\r
-\r
-       public void getDocumentCSSText(RequestProcessor processor, final Resource resource, final StringBuilder css) throws DatabaseException {\r
-\r
-               css.append(processor.sync(new ResourceRead<String>(resource) {\r
-\r
-                       @Override\r
-                       public String perform(ReadGraph graph) throws DatabaseException {\r
-\r
-                               Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));\r
-                               if(indexRoot == null) return "";\r
-                               \r
-                               DocumentResource DOC = DocumentResource.getInstance(graph);\r
-                               String css = graph.getPossibleRelatedValue(indexRoot, DOC.cssDocument, Bindings.STRING);\r
-                               if(css == null) return "";\r
-                               \r
-                               return css;\r
-                               \r
-                       }\r
-                       \r
-               }));\r
-\r
-       }\r
-\r
-       public void getDocumentWikiTextRecursive(Session session, final Resource resource, final StringBuilder wiki, final StringBuilder css) throws DatabaseException {\r
-\r
-               List<Resource> rs = session.sync(new DeepDocs(resource));\r
-               for(Resource r : rs) {\r
-                       getDocumentWikiText(session, r, wiki);\r
-               }\r
-               \r
-               getDocumentCSSText(session, resource, css);\r
-               \r
-       }\r
-\r
-       public void getDocumentWikiText(Session session, final Resource resource, final StringBuilder b) {\r
-               \r
-               try {\r
-\r
-                       final ScenegraphLoaderProcess loader = new ScenegraphLoaderProcess(new Composite(), "CreatePDFAction");\r
-                       \r
-                       final Variable context = session.sync(new WriteResultRequest<Variable>(session.getService(VirtualGraph.class)) {\r
-\r
-                               @Override\r
-                               public Variable perform(WriteGraph graph) throws DatabaseException {\r
-\r
-                                       DocumentResource DOC = DocumentResource.getInstance(graph);\r
-                                       Resource doc = graph.getPossibleObject(resource, DOC.HasDocument);\r
-                                       if(doc == null) return null;\r
-\r
-                                       Layer0 L0 = Layer0.getInstance(graph);\r
-                                       ScenegraphResources SG = ScenegraphResources.getInstance(graph);\r
-                                       Resource runtime = graph.newResource();\r
-                                       graph.claim(runtime, L0.InstanceOf, null, SG.Runtime);\r
-                                       Variable base = Variables.getVariable(graph, resource);\r
-\r
-                                       String uri = base.getURI(graph);\r
-                                       graph.claimLiteral(runtime, SG.Runtime_HasVariable, uri, Bindings.STRING);\r
-\r
-                                       return new ScenegraphVariable(base, doc, runtime, loader.getRoot());\r
-\r
-                               }\r
-\r
-                       });\r
-                       \r
-                       if(context == null) return;\r
-\r
-                       String wiki = session.sync(new UniqueRead<String>() {\r
-\r
-                               @Override\r
-                               public String perform(ReadGraph graph) throws DatabaseException {\r
-\r
-                                       DocumentResource DOC = DocumentResource.getInstance(graph);\r
-                                       Resource doc = graph.getSingleObject(resource, DOC.HasDocumentation);\r
-                                       Resource scenegraph = graph.getSingleObject(doc, DOC.ScenegraphDocument_scenegraph);\r
-                                       \r
-                                       WikiDocumentNodeImpl node = loader.load(graph, scenegraph, ScenegraphLoaderUtils.getRuntime(graph, context));\r
-\r
-                                       StringBuilder b = new StringBuilder();\r
-                                       node.create(b, true);\r
-                                       \r
-                                       String text = b.toString();\r
-                                       \r
-                                       return SimanticsDialect.INSTANCE.apply(graph, Variables.getVariable(graph, resource), text);\r
-                                       \r
-                               }\r
-\r
-                       });\r
-                       \r
-                       loader.dispose();\r
-\r
-                       b.append(wiki);\r
-                       \r
-               } catch (DatabaseException e) {\r
-                       e.printStackTrace();\r
-               }\r
-       }       \r
-\r
-       public void print(RequestProcessor processor, Resource res, String wiki, String css, DocumentSettings settings, final PdfWriter writer, final Document document) throws DocumentException {\r
-               try {\r
-                       Exportable exp = processor.syncRequest(new UniqueRead<Exportable>() {\r
-\r
-                               @Override\r
-                               public Exportable perform(ReadGraph graph) throws DatabaseException {\r
-                                       return new Exportable(graph, res, wiki, css, settings, true);\r
-                               }\r
-                               \r
-                       });\r
-                       exp.export(document, writer);\r
-               } catch (DocumentException e) {\r
-                       Logger.defaultLogError(e);\r
-               } catch (DatabaseException e) {\r
-                       Logger.defaultLogError(e);\r
-               }\r
-       }\r
-\r
-    public static String indexRootPath(ReadGraph graph, Variable selection) throws DatabaseException {\r
-       \r
-       Variable possibleConfiguration = Variables.getPossibleConfigurationVariable(graph, selection);\r
-       if(possibleConfiguration != null) selection = possibleConfiguration;\r
-       \r
-       Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(selection.getRepresents(graph)));\r
-       if(indexRoot == null) return "";\r
-\r
-       String selectionURI = selection.getParent(graph).getURI(graph);\r
-\r
-       SimulationResource SIMU = SimulationResource.getInstance(graph);\r
-       Resource configuration = graph.getPossibleObject(indexRoot, SIMU.HasConfiguration);\r
-       if(configuration != null) {\r
-               String configurationURI = graph.getURI(configuration);\r
-               if(selectionURI.startsWith(configurationURI)) {\r
-                       if(selectionURI.equals(configurationURI)) return "Configuration / ";\r
-                       return URIStringUtils.unescape(selectionURI.substring(configurationURI.length() + 1).replace("/", " / ") + " / ");\r
-               }\r
-       }\r
-       \r
-       String rootURI = graph.getURI(indexRoot);\r
-       String result = selectionURI.replace(rootURI, "");\r
-       if(result.isEmpty()) result = "/";\r
-       \r
-       return URIStringUtils.unescape(result);\r
-       \r
-    }\r
-       \r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.document;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.util.URIStringUtils;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.RequestProcessor;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.VirtualGraph;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.PossibleIndexRoot;
+import org.simantics.db.common.request.ResourceRead;
+import org.simantics.db.common.request.UniqueRead;
+import org.simantics.db.common.request.WriteResultRequest;
+import org.simantics.db.common.utils.Logger;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.layer0.variable.Variables;
+import org.simantics.document.function.WikiDocumentNodeImpl;
+import org.simantics.document.node.Composite;
+import org.simantics.layer0.Layer0;
+import org.simantics.scenegraph.loader.ScenegraphLoaderProcess;
+import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;
+import org.simantics.scenegraph.loader.ScenegraphVariable;
+import org.simantics.scenegraph.ontology.ScenegraphResources;
+import org.simantics.simulation.ontology.SimulationResource;
+import org.simantics.wiki.ui.SimanticsDialect;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.pdf.PdfWriter;
+
+public class DocumentUtils {
+
+       static class DeepDocs extends ResourceRead<List<Resource>> {
+
+               protected DeepDocs(Resource resource) {
+                       super(resource);
+               }
+
+               @Override
+               public List<Resource> perform(ReadGraph graph) throws DatabaseException {
+
+                       DocumentResource DOC = DocumentResource.getInstance(graph);
+                       Resource doc = graph.getPossibleObject(resource, DOC.HasDocument);
+
+                       Layer0 L0 = Layer0.getInstance(graph);
+                       Collection<Resource> children = graph.getObjects(resource, L0.ConsistsOf);
+                       if(children.isEmpty()) {
+                               if(doc != null) return Collections.singletonList(resource);
+                               else return Collections.emptyList();
+                       } else {
+                               ArrayList<Resource> result = new ArrayList<Resource>();
+                               if(doc != null) result.add(resource);
+                               for(Resource child : children)
+                                       result.addAll(graph.syncRequest(new DeepDocs(child)));
+                               return result;
+                       }
+                       
+               }
+        
+       }
+       
+       public DocumentSettings getDocumentSettings(RequestProcessor processor, final Resource resource) throws DatabaseException {
+
+               return processor.syncRequest(new ResourceRead<DocumentSettings>(resource) {
+
+                       @Override
+                       public DocumentSettings perform(ReadGraph graph) throws DatabaseException {
+
+                               Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));
+                               if(indexRoot == null) return DocumentSettings.DEFAULT;
+                               
+                               DocumentResource DOC = DocumentResource.getInstance(graph);
+                               DocumentSettings result = graph.getPossibleRelatedValue(indexRoot, DOC.documentSettings, DocumentSettings.BINDING);
+                               if(result == null) return DocumentSettings.DEFAULT;
+                               return result;
+                               
+                       }
+                       
+               });
+
+       }
+
+       public void getDocumentCSSText(RequestProcessor processor, final Resource resource, final StringBuilder css) throws DatabaseException {
+
+               css.append(processor.sync(new ResourceRead<String>(resource) {
+
+                       @Override
+                       public String perform(ReadGraph graph) throws DatabaseException {
+
+                               Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resource));
+                               if(indexRoot == null) return "";
+                               
+                               DocumentResource DOC = DocumentResource.getInstance(graph);
+                               String css = graph.getPossibleRelatedValue(indexRoot, DOC.cssDocument, Bindings.STRING);
+                               if(css == null) return "";
+                               
+                               return css;
+                               
+                       }
+                       
+               }));
+
+       }
+
+       public void getDocumentWikiTextRecursive(Session session, final Resource resource, final StringBuilder wiki, final StringBuilder css) throws DatabaseException {
+
+               List<Resource> rs = session.sync(new DeepDocs(resource));
+               for(Resource r : rs) {
+                       getDocumentWikiText(session, r, wiki);
+               }
+               
+               getDocumentCSSText(session, resource, css);
+               
+       }
+
+       public void getDocumentWikiText(Session session, final Resource resource, final StringBuilder b) {
+               
+               try {
+
+                       final ScenegraphLoaderProcess loader = new ScenegraphLoaderProcess(new Composite(), "CreatePDFAction");
+                       
+                       final Variable context = session.sync(new WriteResultRequest<Variable>(session.getService(VirtualGraph.class)) {
+
+                               @Override
+                               public Variable perform(WriteGraph graph) throws DatabaseException {
+
+                                       DocumentResource DOC = DocumentResource.getInstance(graph);
+                                       Resource doc = graph.getPossibleObject(resource, DOC.HasDocument);
+                                       if(doc == null) return null;
+
+                                       Layer0 L0 = Layer0.getInstance(graph);
+                                       ScenegraphResources SG = ScenegraphResources.getInstance(graph);
+                                       Resource runtime = graph.newResource();
+                                       graph.claim(runtime, L0.InstanceOf, null, SG.Runtime);
+                                       Variable base = Variables.getVariable(graph, resource);
+
+                                       String uri = base.getURI(graph);
+                                       graph.claimLiteral(runtime, SG.Runtime_HasVariable, uri, Bindings.STRING);
+
+                                       return new ScenegraphVariable(base, doc, runtime, loader.getRoot());
+
+                               }
+
+                       });
+                       
+                       if(context == null) return;
+
+                       String wiki = session.sync(new UniqueRead<String>() {
+
+                               @Override
+                               public String perform(ReadGraph graph) throws DatabaseException {
+
+                                       DocumentResource DOC = DocumentResource.getInstance(graph);
+                                       Resource doc = graph.getSingleObject(resource, DOC.HasDocumentation);
+                                       Resource scenegraph = graph.getSingleObject(doc, DOC.ScenegraphDocument_scenegraph);
+                                       
+                                       WikiDocumentNodeImpl node = loader.load(graph, scenegraph, ScenegraphLoaderUtils.getRuntime(graph, context));
+
+                                       StringBuilder b = new StringBuilder();
+                                       node.create(b, true);
+                                       
+                                       String text = b.toString();
+                                       
+                                       return SimanticsDialect.INSTANCE.apply(graph, Variables.getVariable(graph, resource), text);
+                                       
+                               }
+
+                       });
+                       
+                       loader.dispose();
+
+                       b.append(wiki);
+                       
+               } catch (DatabaseException e) {
+                       e.printStackTrace();
+               }
+       }       
+
+       public void print(RequestProcessor processor, Resource res, String wiki, String css, DocumentSettings settings, final PdfWriter writer, final Document document) throws DocumentException {
+               try {
+                       Exportable exp = processor.syncRequest(new UniqueRead<Exportable>() {
+
+                               @Override
+                               public Exportable perform(ReadGraph graph) throws DatabaseException {
+                                       return new Exportable(graph, res, wiki, css, settings, true);
+                               }
+                               
+                       });
+                       exp.export(document, writer);
+               } catch (DocumentException e) {
+                       Logger.defaultLogError(e);
+               } catch (DatabaseException e) {
+                       Logger.defaultLogError(e);
+               }
+       }
+
+    public static String indexRootPath(ReadGraph graph, Variable selection) throws DatabaseException {
+       
+       Variable possibleConfiguration = Variables.getPossibleConfigurationVariable(graph, selection);
+       if(possibleConfiguration != null) selection = possibleConfiguration;
+       
+       Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(selection.getRepresents(graph)));
+       if(indexRoot == null) return "";
+
+       String selectionURI = selection.getParent(graph).getURI(graph);
+
+       SimulationResource SIMU = SimulationResource.getInstance(graph);
+       Resource configuration = graph.getPossibleObject(indexRoot, SIMU.HasConfiguration);
+       if(configuration != null) {
+               String configurationURI = graph.getURI(configuration);
+               if(selectionURI.startsWith(configurationURI)) {
+                       if(selectionURI.equals(configurationURI)) return "Configuration / ";
+                       return URIStringUtils.unescape(selectionURI.substring(configurationURI.length() + 1).replace("/", " / ") + " / ");
+               }
+       }
+       
+       String rootURI = graph.getURI(indexRoot);
+       String result = selectionURI.replace(rootURI, "");
+       if(result.isEmpty()) result = "/";
+       
+       return URIStringUtils.unescape(result);
+       
+    }
+       
+}