import java.util.Collections;
import java.util.List;
+import java.util.UUID;
+import org.simantics.databoard.Bindings;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.ObjectsWithType;
+import org.simantics.db.common.request.PossibleIndexRoot;
import org.simantics.db.exception.DatabaseException;
import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.layer0.Layer0;
+import org.simantics.scenegraph.profile.request.ProfileActiveEntryResources;
public class ProfileUtils {
return graph.getRelatedValue2(entries, DIA.Profile_children, entries);
}
+ public static Resource getPossibleProfileActivationState(ReadGraph graph, Resource runtimeDiagram, Resource profile) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+ DiagramResource DIA = DiagramResource.getInstance(graph);
+ Resource conf = graph.getPossibleObject(runtimeDiagram, DIA.RuntimeDiagram_HasConfiguration);
+ if(conf == null) return null;
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(conf));
+ if(indexRoot == null) return null;
+ // Find existing state
+ for(Resource state : graph.syncRequest(new ObjectsWithType(indexRoot, L0.ConsistsOf, DIA.ProfileActivationState))) {
+ Resource ref = graph.getPossibleObject(state, DIA.ProfileActivationState_HasProfile);
+ if(profile.equals(ref)) return state;
+ }
+ return null;
+
+ }
+
+ public static Resource claimProfileActivationState(WriteGraph graph, Resource runtimeDiagram, Resource runtimeProfile, Resource entry) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ DiagramResource DIA = DiagramResource.getInstance(graph);
+ Resource conf = graph.getPossibleObject(runtimeDiagram, DIA.RuntimeDiagram_HasConfiguration);
+ if(conf == null) return null;
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(conf));
+ if(indexRoot == null) return null;
+ // Find existing state
+ for(Resource state : graph.syncRequest(new ObjectsWithType(indexRoot, L0.ConsistsOf, DIA.ProfileActivationState))) {
+ Resource profile = graph.getPossibleObject(state, DIA.ProfileActivationState_HasProfile);
+ if(profile.equals(runtimeProfile)) return state;
+ }
+ // Create new state
+ Resource state = graph.newResource();
+ graph.claim(state, L0.InstanceOf, DIA.ProfileActivationState);
+ graph.claimLiteral(state, L0.HasName, L0.String, UUID.randomUUID().toString(), Bindings.STRING);
+ graph.claim(state, DIA.ProfileActivationState_HasProfile, runtimeProfile);
+ graph.claim(indexRoot, L0.ConsistsOf, state);
+ return state;
+ }
+
+
}