]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/query/DiagramRequests.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / query / DiagramRequests.java
diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/query/DiagramRequests.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/query/DiagramRequests.java
new file mode 100644 (file)
index 0000000..919d63e
--- /dev/null
@@ -0,0 +1,202 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in 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.diagram.query;\r
+\r
+import java.util.Set;\r
+\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.common.ResourceArray;\r
+import org.simantics.db.common.request.ResourceRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.procedure.Listener;\r
+import org.simantics.db.request.AsyncRead;\r
+import org.simantics.db.request.Read;\r
+import org.simantics.diagram.adapter.IDiagramLoader;\r
+import org.simantics.diagram.adapter.NodeRequest;\r
+import org.simantics.diagram.connection.ConnectionVisuals;\r
+import org.simantics.diagram.content.TerminalMap;\r
+import org.simantics.diagram.flag.FlagUtil;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;\r
+import org.simantics.g2d.canvas.ICanvasContext;\r
+import org.simantics.g2d.diagram.IDiagram;\r
+import org.simantics.g2d.element.ElementClass;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.page.DiagramDesc;\r
+import org.simantics.structural.stubs.StructuralResource2;\r
+import org.simantics.structural2.modelingRules.CPConnection;\r
+import org.simantics.structural2.modelingRules.CPTerminal;\r
+import org.simantics.structural2.modelingRules.IConnectionPoint;\r
+import org.simantics.structural2.modelingRules.IModelingRules;\r
+import org.simantics.utils.datastructures.hints.IHintObservable;\r
+import org.simantics.utils.page.PageDesc;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class DiagramRequests {\r
+\r
+    /**\r
+     * @param diagram\r
+     * @return\r
+     */\r
+    public static Read<PageDesc> getPageDesc(final Resource diagram, final PageDesc defaultValue) {\r
+        return new Read<PageDesc>() {\r
+            @Override\r
+            public PageDesc perform(ReadGraph graph) throws DatabaseException {\r
+                return DiagramGraphUtil.getPageDesc(graph, diagram, defaultValue);\r
+            }\r
+        };\r
+    }\r
+\r
+    public static Read<DiagramDesc> getDiagramDesc(final Resource diagram) {\r
+        return new DiagramDescRead(diagram);\r
+    }\r
+\r
+    /**\r
+     * Adapt a diagram Element type resource into an {@link ElementClass}.\r
+     * \r
+     * @param elementType\r
+     * @param hints\r
+     * @return\r
+     */\r
+    public static AsyncRead<ElementClass> getElementClass(Resource elementType, IHintObservable hints) {\r
+        return new ElementClassQuery(elementType, hints);\r
+    }\r
+\r
+    /**\r
+     * @param canvas\r
+     * @param diagram\r
+     * @param element\r
+     * @param loadListener\r
+     * @return\r
+     */\r
+    public static AsyncRead<IElement> getElement(ICanvasContext canvas, IDiagram diagram, Resource element, Listener<IElement> loadListener) {\r
+        return new NodeRequest(canvas, diagram, element, loadListener);\r
+    }\r
+\r
+    /**\r
+     * @param monitor\r
+     * @param resource\r
+     * @param structuralPath\r
+     * @param loader\r
+     * @param initialHints\r
+     * @return\r
+     */\r
+    public static Read<IDiagram> loadDiagram(IProgressMonitor monitor, Resource model, Resource resource, Resource runtime, ResourceArray structuralPath,\r
+            IDiagramLoader loader, IHintObservable initialHints) {\r
+        return new DiagramLoadQuery(monitor, model, resource, runtime, structuralPath, loader, initialHints);\r
+    }\r
+\r
+    /**\r
+     * @param diagram\r
+     * @return\r
+     */\r
+    public static Read<IModelingRules> getModelingRules(final Resource diagram, final IModelingRules defaultValue) {\r
+        return new Read<IModelingRules>() {\r
+            @Override\r
+            public IModelingRules perform(ReadGraph graph) throws DatabaseException {\r
+                StructuralResource2 sr = StructuralResource2.getInstance(graph);\r
+                Resource rules = graph.getPossibleObject(diagram, sr.HasModelingRules);\r
+                if (rules == null)\r
+                    return defaultValue;\r
+                return graph.adapt(rules, IModelingRules.class);\r
+            }\r
+        };\r
+    }\r
+\r
+    /**\r
+     * @param connectionType\r
+     * @return\r
+     */\r
+    public static Read<ConnectionVisuals> getConnectionVisuals(Resource connectionType) {\r
+        return new ConnectionVisualsRequest(connectionType);\r
+    }\r
+\r
+    /**\r
+     * @param flag\r
+     * @return\r
+     */\r
+    public static Read<String[]> getFlagText(Resource flag) {\r
+        return new FlagTextQuery(flag);\r
+    }\r
+\r
+    public static Read<Resource> getFlagPair(Resource flag) {\r
+        return new FlagPairQuery(flag);\r
+    }\r
+\r
+    /**\r
+     * @param element\r
+     * @return\r
+     */\r
+    public static Read<TerminalMap> elementTypeTerminals(Resource elementType) {\r
+        return new ResourceRead<TerminalMap>(elementType) {\r
+            @Override\r
+            public TerminalMap perform(ReadGraph graph) throws DatabaseException {\r
+                return DiagramGraphUtil.getElementTypeTerminals(graph, resource);\r
+            }\r
+        };\r
+    }\r
+\r
+    /**\r
+     * @param element\r
+     * @return\r
+     */\r
+    public static Read<TerminalMap> elementTerminals(Resource element) {\r
+        return new ResourceRead<TerminalMap>(element) {\r
+            @Override\r
+            public TerminalMap perform(ReadGraph graph) throws DatabaseException {\r
+                return DiagramGraphUtil.getElementTerminals(graph, resource);\r
+            }\r
+        };\r
+    }\r
+\r
+    /**\r
+     * Browses all diagram connections that are related to {@code connection} by flags.\r
+     * Adds the connections to set {@code conns} and all related connection points to set {@code cps}.\r
+     */\r
+       public static void expandConnections(ReadGraph graph, Resource connection, Set<Resource> conns, Set<IConnectionPoint> cps) throws DatabaseException {\r
+\r
+               if(!conns.add(connection)) return;\r
+\r
+               DiagramResource DIA = DiagramResource.getInstance(graph);\r
+               StructuralResource2 STR = StructuralResource2.getInstance(graph);\r
+\r
+               cps.add(new CPConnection(connection));\r
+               for(Resource connector : graph.getObjects(connection, DIA.HasConnector)) {\r
+                       for(Statement stm : graph.getStatements(connector, STR.Connects)) {\r
+                               Resource element = stm.getObject();\r
+                               if(element.equals(connection)) continue;\r
+                               if(graph.isInstanceOf(element, DIA.Flag)) {\r
+                                       FlagUtil.forCounterparts(graph, element, (otherFlag) -> {\r
+                                               Resource flagConnector = graph.getPossibleObject(otherFlag, DIA.Flag_ConnectionPoint);\r
+                                               if(flagConnector != null) {\r
+                                                       Resource otherConnection = graph.getPossibleObject(flagConnector, DIA.IsConnectorOf);\r
+                                                       if(otherConnection != null) {\r
+                                                               expandConnections(graph, otherConnection, conns, cps);\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                               } else {\r
+                                       Resource connectionPoint = graph.getInverse(stm.getPredicate());\r
+                                       //System.err.println("term: " + NameUtils.getSafeName(graph, element) + " : " + NameUtils.getSafeName(graph, connectionPoint));\r
+                                       cps.add(new CPTerminal(element, connectionPoint));\r
+                               }\r
+                       }\r
+               }\r
+\r
+       }\r
+    \r
+}\r