--- /dev/null
+package org.simantics.db.layer0.request;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.VirtualGraph;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.WriteResultRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.service.VirtualGraphSupport;\r
+import org.simantics.operation.Layer0X;\r
+\r
+public class ActivateModel extends WriteResultRequest<Boolean> {\r
+\r
+ final Resource project;\r
+ final Resource model;\r
+\r
+ public ActivateModel(Resource project, Resource model) {\r
+ \r
+ if(project == null) throw new IllegalArgumentException("project can not be null");\r
+ this.project = project;\r
+ this.model = model;\r
+ \r
+ }\r
+\r
+ public static Boolean perform(WriteGraph graph, Resource project, Resource model) throws DatabaseException {\r
+ Layer0X L0X = Layer0X.getInstance(graph);\r
+ if (model != null) {\r
+ if (!graph.hasStatement(model, L0X.IsActivatedBy, project)) {\r
+ graph.deny(project, L0X.Activates);\r
+ graph.claim(project, L0X.Activates, model);\r
+ return true;\r
+ }\r
+ } else {\r
+ if (graph.hasStatement(project, L0X.Activates)) {\r
+ graph.deny(project, L0X.Activates);\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public Boolean perform(WriteGraph graph) throws DatabaseException {\r
+ VirtualGraphSupport support = graph.getService(VirtualGraphSupport.class);\r
+ VirtualGraph activations = support.getWorkspacePersistent("activations");\r
+ VirtualGraph vg = graph.getProvider();\r
+ if (vg == activations) {\r
+ return perform(graph, project, model);\r
+ } else {\r
+ return graph.syncRequest(new WriteResultRequest<Boolean>() {\r
+ @Override\r
+ public Boolean perform(WriteGraph graph) throws DatabaseException {\r
+ return ActivateModel.perform(graph, project, model);\r
+ }\r
+ });\r
+ }\r
+ }\r
+\r
+}\r