X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram.profile%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2Ffunction%2FAll.java;h=998138765ca37aca0f850a08064fc03a0873f5ef;hb=08dc7080753f3ea35985e76e9effb9d3ff92c3b5;hp=0a3245b52268fb79e4c0a180a80dabae15dda206;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/function/All.java b/bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/function/All.java index 0a3245b52..998138765 100644 --- a/bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/function/All.java +++ b/bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/function/All.java @@ -26,7 +26,7 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.Instances; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.service.VirtualGraphSupport; -import org.simantics.diagram.profile.view.ResourcePair; +import org.simantics.diagram.profile.view.ProfileTuple; import org.simantics.diagram.stubs.DiagramResource; import org.simantics.layer0.Layer0; import org.simantics.scenegraph.loader.ScenegraphLoaderUtils; @@ -93,7 +93,7 @@ public class All { return new FunctionImpl1() { - public void processRecursively(WriteGraph graph, Resource runtimeProfile, Resource entry, boolean checked) throws DatabaseException { + public void processRecursively(WriteGraph graph, Resource runtimeDiagram, Resource runtimeProfile, Resource entry, boolean checked) throws DatabaseException { DiagramResource DIA = DiagramResource.getInstance(graph); @@ -110,7 +110,7 @@ public class All { singleSelGroups.add(group); } } - processRecursively(graph, runtimeProfile, child, checked); + processRecursively(graph, runtimeDiagram, runtimeProfile, child, checked); } } else if(graph.isInstanceOf(entry, DIA.ProfileEntry)) { @@ -120,23 +120,43 @@ public class All { //enable selected item from single selection groups, disable the rest. Collection entries = graph.getObjects(group, DIA.ProfileEntry_HasGroup_Inverse); for (Resource e : entries) { - graph.denyStatement(runtimeProfile, SimulationResource.getInstance(graph).IsActive, e); + deactivate(graph, runtimeDiagram, runtimeProfile, e); } - graph.claim(runtimeProfile, SimulationResource.getInstance(graph).IsActive, null, entry); + activate(graph, runtimeDiagram, runtimeProfile, entry); } else { - graph.denyStatement(runtimeProfile, SimulationResource.getInstance(graph).IsActive, entry); + deactivate(graph, runtimeDiagram, runtimeProfile, entry); } } else { if(checked) { - graph.claim(runtimeProfile, SimulationResource.getInstance(graph).IsActive, null, entry); + activate(graph, runtimeDiagram, runtimeProfile, entry); } else { - graph.denyStatement(runtimeProfile, SimulationResource.getInstance(graph).IsActive, entry); + deactivate(graph, runtimeDiagram, runtimeProfile, entry); } } } } + + private void activate(WriteGraph graph, Resource runtimeDiagram, Resource runtimeProfile, Resource entry) throws DatabaseException { + if(graph.isImmutable(runtimeProfile)) { + Resource activationState = ProfileUtils.claimProfileActivationState(graph, runtimeDiagram, runtimeProfile, entry); + if(activationState != null) + graph.claim(activationState, SimulationResource.getInstance(graph).IsActive, null, entry); + } else { + graph.claim(runtimeProfile, SimulationResource.getInstance(graph).IsActive, null, entry); + } + } + + private void deactivate(WriteGraph graph, Resource runtimeDiagram, Resource runtimeProfile, Resource entry) throws DatabaseException { + if(graph.isImmutable(runtimeProfile)) { + Resource activationState = ProfileUtils.claimProfileActivationState(graph, runtimeDiagram, runtimeProfile, entry); + if(activationState != null) + graph.denyStatement(activationState, SimulationResource.getInstance(graph).IsActive, entry); + } else { + graph.denyStatement(runtimeProfile, SimulationResource.getInstance(graph).IsActive, entry); + } + } @Override public Boolean apply(Object _event) { @@ -151,7 +171,7 @@ public class All { final Resource runtimeDiagram = (Resource)explorer.getRoot().getConstant(BuiltinKeys.INPUT); final boolean checked = item.getChecked(); NodeContext context = (NodeContext)item.getData(); - final ResourcePair entry = (ResourcePair)context.getConstant(BuiltinKeys.INPUT); + final ProfileTuple entry = (ProfileTuple)context.getConstant(BuiltinKeys.INPUT); try { VirtualGraphSupport support = Simantics.getSession().getService(VirtualGraphSupport.class); @@ -162,7 +182,7 @@ public class All { DiagramResource DIA = DiagramResource.getInstance(graph); Resource runtimeProfile = graph.getPossibleObject(runtimeDiagram, DIA.RuntimeDiagram_HasRuntimeProfile); - processRecursively(graph, runtimeProfile, entry.getSecond(), checked); + processRecursively(graph, runtimeDiagram, runtimeProfile, entry.getEntry(), checked); }