]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/visualisations/DynamicVisualisationsContributions.java
Dynamic Visualisations view improvements & profile refactoring
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / visualisations / DynamicVisualisationsContributions.java
index 45e52fb55c48c99519f4a17ca7525efec3b4d9d9..6c25d237886fc82825045d7f45e08c257511a5e6 100644 (file)
@@ -17,6 +17,7 @@ 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.district.network.visualisations.model.DynamicArrowContribution;
 import org.simantics.district.network.visualisations.model.DynamicColorContribution;
 import org.simantics.district.network.visualisations.model.DynamicColorMap;
 import org.simantics.district.network.visualisations.model.DynamicSizeContribution;
@@ -41,6 +42,7 @@ public class DynamicVisualisationsContributions {
     private static final String DYNAMIC_VISUALISATIONS_CONTRIBUTION_MODULE = "DynamicVisualisationsContribution";
     private static final String COLOR_CONTRIBUTION = "colorContribution";
     private static final String SIZE_CONTRIBUTION = "sizeContribution";
+    private static final String ARROW_CONTRIBUTION = "arrowContribution";
 
     public static Map<String, DynamicColorMap> dynamicColorMaps(ReadGraph graph) throws DatabaseException {
         List<Resource> sharedOntologies = Simantics.applySCL("Simantics/SharedOntologies", "getSharedOntologies", graph, Tuple0.INSTANCE);
@@ -168,6 +170,35 @@ public class DynamicVisualisationsContributions {
         return null;
     }
 
+    public static Collection<DynamicArrowObject> dynamicEdgeArrowObjects(ReadGraph graph) throws DatabaseException {
+        
+        List<Resource> sharedOntologies = Simantics.applySCL("Simantics/SharedOntologies", "getSharedOntologies", graph, Tuple0.INSTANCE);
+        
+        List<DynamicArrowObject> results = new ArrayList<>();
+        
+        for (Resource sharedOntology : sharedOntologies) {
+            Collection<Resource> findByType = graph.syncRequest(new ObjectsWithSupertype(sharedOntology, Layer0.getInstance(graph).ConsistsOf, StructuralResource2.getInstance(graph).Component));
+            //Collection<Resource> findByType = QueryIndexUtils.searchByType(graph, sharedOntology, );
+            for (Resource find : findByType) {
+                NamedResource moduleType = new NamedResource(NameLabelUtil.modalName(graph, find), find);
+                DynamicArrowObject dynamicarrowObject = dynamicEdgeArrowObject(graph, moduleType);
+                if (dynamicarrowObject != null)
+                    results.add(dynamicarrowObject);
+            }
+        }
+        return results;
+    }
+    
+    private static DynamicArrowObject dynamicEdgeArrowObject(ReadGraph graph, NamedResource moduleType) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        Resource sclModule = Layer0Utils.getPossibleChild(graph, moduleType.getResource(), L0.SCLModule, DYNAMIC_VISUALISATIONS_CONTRIBUTION_MODULE);
+        if (sclModule != null) {
+            String moduleURI = graph.getURI(sclModule);
+            return new DynamicArrowObject(moduleType, getDynamicEdgeArrowContributionSupplier(moduleURI, ARROW_CONTRIBUTION));
+        }
+        return null;
+    }
+    
     private static Supplier<Stream<DynamicColorMap>> getDynamicColorMapSupplier(String uri, String expressionText) {
         return () -> {
             try {
@@ -196,6 +227,20 @@ public class DynamicVisualisationsContributions {
         };
     }
 
+    private static Supplier<Stream<DynamicArrowContribution>> getDynamicEdgeArrowContributionSupplier(String uri, String expressionText) {
+        return () -> {
+            try {
+                @SuppressWarnings("unchecked")
+                List<DynamicArrowContribution> result = (List<DynamicArrowContribution>) SCLOsgi.MODULE_REPOSITORY.getValue(uri, expressionText);
+                return result.stream();//result.stream().map(DynamicColorContribution::fromTuple9);
+            } catch (ValueNotFound e) {
+                LOGGER.error("Could not find contributions", e);
+                //throw new RuntimeException(e);
+                return Stream.empty();
+            }
+        };
+    }
+    
     private static Supplier<Stream<DynamicSizeContribution>> getDynamicSizeContributionSupplier(String uri, String expressionText) {
         return () -> {
             try {
@@ -210,6 +255,28 @@ public class DynamicVisualisationsContributions {
         };
     }
 
+    public static class DynamicArrowObject {
+
+        private final NamedResource arrowObject;
+        private final Supplier<Stream<DynamicArrowContribution>> arrowContributionSupplier;
+        private Map<String, DynamicArrowContribution> arrowContributions;
+
+        public DynamicArrowObject(NamedResource coloringObject, Supplier<Stream<DynamicArrowContribution>> arrowContributionSupplier) {
+            this.arrowObject = coloringObject;
+            this.arrowContributionSupplier = arrowContributionSupplier;
+        }
+
+        public NamedResource getArrowObject() {
+            return arrowObject;
+        }
+
+        public Map<String, DynamicArrowContribution> getArrowContributions() {
+            if (arrowContributions == null)
+                arrowContributions = arrowContributionSupplier.get().collect(Collectors.toMap(c -> c.getLabel(), c -> c));
+            return arrowContributions;
+        }
+    }
+    
     public static class DynamicColoringObject {
 
         private final NamedResource coloringObject;