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;
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;
return resource;
}
};
- handler.copyToClipboard(graph, builder);
+ handler.copyToClipboard(graph, builder, new NullProgressMonitor());
for(Set<SimanticsClipboard.Representation> object : builder.getContents()) {
TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);
TransferableGraphs.importGraph1(graph, tg, advisor);
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<String, Variant> 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;
+ }
+
}