X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2FProfiles.java;h=cca82ff9aa3edc292f11a7d0219beee6f3b048dc;hp=ff0f7b685f1d25e751b0a72061b336a47c38f05e;hb=HEAD;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07 diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java index ff0f7b685..cca82ff9a 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java @@ -17,9 +17,13 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.eclipse.core.runtime.NullProgressMonitor; import org.simantics.databoard.Bindings; +import org.simantics.databoard.binding.mutable.Variant; import org.simantics.db.ReadGraph; +import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; +import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; import org.simantics.db.WriteOnlyGraph; import org.simantics.db.common.request.WriteRequest; @@ -33,6 +37,7 @@ import org.simantics.db.layer0.util.SimanticsClipboardImpl; import org.simantics.db.layer0.util.SimanticsKeys; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.service.VirtualGraphSupport; +import org.simantics.diagram.profile.ProfileActivityBean.Profile; import org.simantics.diagram.stubs.DiagramResource; import org.simantics.graph.db.TransferableGraphs; import org.simantics.graph.representation.Root; @@ -288,7 +293,7 @@ public class Profiles { return resource; } }; - handler.copyToClipboard(graph, builder); + handler.copyToClipboard(graph, builder, new NullProgressMonitor()); for(Set object : builder.getContents()) { TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH); TransferableGraphs.importGraph1(graph, tg, advisor); @@ -321,4 +326,89 @@ public class Profiles { return instance; } + public static ProfileActivityBean readProfileActivity( + RequestProcessor processor, + Resource root) + throws DatabaseException + { + return processor.syncRequest(new ProfileActivityBeanRequest(root)); + } + + public static ProfileActivityBean readProfileActivity( + RequestProcessor processor, + Resource root, + Map writeToMap) + throws DatabaseException + { + ProfileActivityBean pab = readProfileActivity(processor, root); + if (pab != null && writeToMap != null) + writeToMap.put(ProfileActivityBean.EXTENSION_KEY, new Variant(ProfileActivityBean.BINDING, pab)); + return pab; + } + + public static void writeProfileActivity( + RequestProcessor processor, + Resource root, + ProfileActivityBean bean) + throws DatabaseException + { + VirtualGraph vg = processor.getService(VirtualGraphSupport.class).getWorkspacePersistent("profiles"); + processor.syncRequest(new WriteRequest(vg) { + @Override + public void perform(WriteGraph graph) throws DatabaseException { + writeProfileActivity(graph, root, bean); + } + }); + } + + private static void writeProfileActivity( + WriteGraph graph, + Resource root, + ProfileActivityBean bean) + throws DatabaseException + { + String rootUri = graph.getPossibleURI(root); + if (rootUri == null) + return; + + SimulationResource SIMU = SimulationResource.getInstance(graph); + for (Profile p : bean.topLevelProfiles.values()) { + Resource pr = resolveRelativeUri(graph, rootUri, p.relativeUri); + if (pr == null) + continue; + for (String active : p.activeEntries) { + Resource ar = resolveRelativeUri(graph, rootUri, active); + if (ar != null) + graph.claim(pr, SIMU.IsActive, ar); + } + } + + Resource activeProfile = resolveRelativeUri(graph, rootUri, bean.activeProfile); + if (activeProfile != null) { + DiagramResource DIA = DiagramResource.getInstance(graph); + graph.claim(root, DIA.HasActiveProfile, DIA.HasActiveProfile_Inverse, activeProfile); + } + } + + static String possiblyRelativeUri(ReadGraph graph, String rootUri, Resource r) throws DatabaseException { + if (r == null) + return null; + String uri = graph.getPossibleURI(r); + if (rootUri != null && uri != null && uri.startsWith(rootUri)) + return uri.substring(rootUri.length()); + return uri; + } + + static Resource resolveRelativeUri(ReadGraph graph, String rootUri, String possiblyRelativeUri) throws DatabaseException { + return possiblyRelativeUri != null + ? graph.getPossibleResource( resolveRelativeUri(rootUri, possiblyRelativeUri) ) + : null; + } + + private static String resolveRelativeUri(String rootUri, String possiblyRelativeUri) { + return possiblyRelativeUri.startsWith("http:/") + ? possiblyRelativeUri + : rootUri + possiblyRelativeUri; + } + }