]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java
Disconnected subgraph analysis for district network diagrams
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / DistrictNetworkUtil.java
index 40e8fc1d7825e3f47c877030b64ac3dcd632c9fe..64aab473a8a726ba6f4244ea1ce91c3367af9168 100644 (file)
@@ -9,12 +9,15 @@ import org.simantics.db.Resource;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.common.utils.OrderedSetUtils;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.request.PossibleVariable;
+import org.simantics.db.layer0.variable.Variable;
 import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;
 import org.simantics.diagram.synchronization.graph.layer.GraphLayer;
 import org.simantics.diagram.synchronization.graph.layer.IGraphLayerUtil;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
 import org.simantics.layer0.Layer0;
+import org.simantics.modeling.ModelingResources;
 import org.simantics.operation.Layer0X;
 
 public class DistrictNetworkUtil {
@@ -145,4 +148,60 @@ public class DistrictNetworkUtil {
         graph.claimLiteral(diagram, DIA.HasModCount, ++l, Bindings.LONG);
         return name;
     }
+
+    public static Resource getDiagramElement(ReadGraph graph, Resource component) throws DatabaseException {
+        if (component == null)
+            return null;
+        DiagramResource DIA = DiagramResource.getInstance(graph);
+        if (graph.isInstanceOf(component, DIA.Element))
+            return component;
+        ModelingResources MOD = ModelingResources.getInstance(graph);
+        Resource element = graph.getPossibleObject(component, MOD.ComponentToElement);
+        return element != null && graph.isInstanceOf(element, DIA.Element) ? element : null;
+    }
+
+    public static Resource getMappedElement(ReadGraph graph, Resource element) throws DatabaseException {
+        if (element == null)
+            return null;
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+        return graph.getPossibleObject(element, DN.MappedComponent);
+    }
+
+    public static Resource getMappedComponent(ReadGraph graph, Resource element) throws DatabaseException {
+        if (element == null)
+            return null;
+        Resource mappedElement = getMappedElement(graph, element);
+        if (mappedElement == null)
+            return null;
+        ModelingResources MOD = ModelingResources.getInstance(graph);
+        return graph.getPossibleObject(mappedElement, MOD.ElementToComponent);
+    }
+
+    public static Resource getMappedDNElement(ReadGraph graph, Resource element) throws DatabaseException {
+        if (element == null)
+            return null;
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+        return graph.getPossibleObject(element, DN.MappedFromElement);
+    }
+
+    public static Variable toMappedConfigurationModule(ReadGraph graph, Resource input) throws DatabaseException {
+        if (input == null)
+            return null;
+
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+        if (graph.isInstanceOf(input, DN.Element)) {
+            Resource mappedElement = getMappedElement(graph, input);
+            if (mappedElement == null)
+                return null;
+
+            ModelingResources MOD = ModelingResources.getInstance(graph);
+            Resource mappedComponent = graph.getPossibleObject(mappedElement, MOD.ElementToComponent);
+            if (mappedComponent == null)
+                return null;
+
+            return graph.syncRequest(new PossibleVariable(mappedComponent));
+        }
+        return null;
+    }
+
 }