]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph.profile/src/org/simantics/scenegraph/profile/request/RuntimeProfileActiveEntryResources.java
Better support for ontological profiles
[simantics/platform.git] / bundles / org.simantics.scenegraph.profile / src / org / simantics / scenegraph / profile / request / RuntimeProfileActiveEntryResources.java
index 762ee12bdd0cbf7c10c5db51fda81c7953a64e03..f59c1d71a0978addc151df7c0705e23543ffbeb2 100644 (file)
@@ -13,12 +13,15 @@ package org.simantics.scenegraph.profile.request;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
+import org.simantics.db.common.NamedResource;
 import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.scenegraph.profile.ProfileUtils;
 
 /**
  * @author Antti Villberg
@@ -34,15 +37,33 @@ public class RuntimeProfileActiveEntryResources extends ResourceRead<Collection<
         DiagramResource DIA = DiagramResource.getInstance(graph);
 
         ArrayList<Resource> result = new ArrayList<Resource>();
-        Resource activeProfile = graph.getPossibleObject(resource, DIA.RuntimeDiagram_HasRuntimeProfile);
-        if (activeProfile == null)
-            return result;
+        
+        result.addAll(graph.syncRequest(new ProfileEntryContributions(resource)));
 
+        Resource activeProfile = graph.getPossibleObject(resource, DIA.RuntimeDiagram_HasRuntimeProfile);
+        if (activeProfile == null) {
+               
+               List<NamedResource> available = graph.syncRequest(new AvailableProfiles(resource));
+               if(available.size() != 1) return result;
+               
+               activeProfile = available.iterator().next().getResource();
+            
+        }
+        
         Resource rootEntries = graph.getPossibleObject(activeProfile, DIA.HasEntries);
         if (rootEntries == null)
             return result;
         
-        return graph.syncRequest(new ProfileActiveEntryResources(activeProfile, rootEntries));
+        if(graph.isImmutable(activeProfile)) {
+               Resource activationState = ProfileUtils.getPossibleProfileActivationState(graph, resource, activeProfile);
+               if(activationState != null) {
+                       result.addAll(graph.syncRequest(new ProfileActiveEntryResources(activationState, rootEntries)));
+               }
+        } else {
+               result.addAll(graph.syncRequest(new ProfileActiveEntryResources(activeProfile, rootEntries)));
+        }
+        
+        return result;
         
     }