+ 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;
+ }
+