]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/visualisations/triggers/VisualisationTriggersContributions.java
Add missing visualization trigger code
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / visualisations / triggers / VisualisationTriggersContributions.java
diff --git a/org.simantics.district.network/src/org/simantics/district/network/visualisations/triggers/VisualisationTriggersContributions.java b/org.simantics.district.network/src/org/simantics/district/network/visualisations/triggers/VisualisationTriggersContributions.java
new file mode 100644 (file)
index 0000000..8120a97
--- /dev/null
@@ -0,0 +1,73 @@
+package org.simantics.district.network.visualisations.triggers;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.simantics.NameLabelUtil;
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.NamedResource;
+import org.simantics.db.common.request.ObjectsWithSupertype;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.util.Layer0Utils;
+import org.simantics.layer0.Layer0;
+import org.simantics.scl.compiler.top.ValueNotFound;
+import org.simantics.scl.osgi.SCLOsgi;
+import org.simantics.scl.runtime.SCLContext;
+import org.simantics.scl.runtime.tuple.Tuple0;
+import org.simantics.structural.stubs.StructuralResource2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class VisualisationTriggersContributions {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(VisualisationTriggersContributions.class);
+    private static final String VISUALISATIONS_TRIGGERS_MODULE = "VisualisationTriggers";
+    private static final String VISUALISATION_TRIGGER_CONTRIBUTION = "visualisationTriggers";
+    
+    public static Map<String, List<VisualisationTrigger>> visualisationTriggers(ReadGraph graph) throws DatabaseException {
+        List<Resource> sharedOntologies = Simantics.applySCL("Simantics/SharedOntologies", "getSharedOntologies", graph, Tuple0.INSTANCE);
+        
+        Map<String, List<VisualisationTrigger>> results = new HashMap<>();
+        Layer0 L0 = Layer0.getInstance(graph);
+        
+        Object oldGraph = SCLContext.getCurrent().get("graph");
+        try {
+            SCLContext.getCurrent().put("graph", graph);
+            for (Resource sharedOntology : sharedOntologies) {
+                
+                Collection<Resource> userComponents = graph.syncRequest(new ObjectsWithSupertype(sharedOntology, Layer0.getInstance(graph).ConsistsOf, StructuralResource2.getInstance(graph).Component));
+                
+                for (Resource userComponent : userComponents) {
+                    NamedResource moduleType = new NamedResource(NameLabelUtil.modalName(graph, userComponent), userComponent);
+                    List<VisualisationTrigger> visualisationTriggerContributions = visualisationTriggerContribution(graph, moduleType);
+                    if (visualisationTriggerContributions != null)
+                        results.put(moduleType.getName(), visualisationTriggerContributions);
+                }
+            }
+        } finally {
+            SCLContext.getCurrent().put("graph", oldGraph);
+        }
+        return results;
+    }
+    
+    private static List<VisualisationTrigger> visualisationTriggerContribution(ReadGraph graph, NamedResource moduleType) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        Resource sclModule = Layer0Utils.getPossibleChild(graph, moduleType.getResource(), L0.SCLModule, VISUALISATIONS_TRIGGERS_MODULE);
+        if (sclModule != null) {
+            String moduleURI = graph.getURI(sclModule);
+            try {
+                List<VisualisationTrigger> result = (List<VisualisationTrigger>) SCLOsgi.MODULE_REPOSITORY.getValue(moduleURI, VISUALISATION_TRIGGER_CONTRIBUTION);
+                return result;
+            } catch (ValueNotFound e) {
+                LOGGER.error("Could not find contributions for module {} and expression {}", moduleURI, VISUALISATION_TRIGGER_CONTRIBUTION, e);
+            }
+        }
+        return null;
+    }
+
+}
+