]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/ActivateModel.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / ActivateModel.java
1 package org.simantics.db.layer0.request;\r
2 \r
3 import org.simantics.db.Resource;\r
4 import org.simantics.db.VirtualGraph;\r
5 import org.simantics.db.WriteGraph;\r
6 import org.simantics.db.common.request.WriteResultRequest;\r
7 import org.simantics.db.exception.DatabaseException;\r
8 import org.simantics.db.service.VirtualGraphSupport;\r
9 import org.simantics.operation.Layer0X;\r
10 \r
11 public class ActivateModel extends WriteResultRequest<Boolean> {\r
12 \r
13     final Resource project;\r
14     final Resource model;\r
15 \r
16     public ActivateModel(Resource project, Resource model) {\r
17         \r
18         if(project == null) throw new IllegalArgumentException("project can not be null");\r
19         this.project = project;\r
20         this.model = model;\r
21         \r
22     }\r
23 \r
24     public static Boolean perform(WriteGraph graph, Resource project, Resource model) throws DatabaseException {\r
25         Layer0X L0X = Layer0X.getInstance(graph);\r
26         if (model != null) {\r
27             if (!graph.hasStatement(model, L0X.IsActivatedBy, project)) {\r
28                 graph.deny(project, L0X.Activates);\r
29                 graph.claim(project, L0X.Activates, model);\r
30                 return true;\r
31             }\r
32         } else {\r
33             if (graph.hasStatement(project, L0X.Activates)) {\r
34                 graph.deny(project, L0X.Activates);\r
35                 return true;\r
36             }\r
37         }\r
38         return false;\r
39     }\r
40 \r
41     @Override\r
42     public Boolean perform(WriteGraph graph) throws DatabaseException {\r
43         VirtualGraphSupport support = graph.getService(VirtualGraphSupport.class);\r
44         VirtualGraph activations = support.getWorkspacePersistent("activations");\r
45         VirtualGraph vg = graph.getProvider();\r
46         if (vg == activations) {\r
47             return perform(graph, project, model);\r
48         } else {\r
49             return graph.syncRequest(new WriteResultRequest<Boolean>() {\r
50                 @Override\r
51                 public Boolean perform(WriteGraph graph) throws DatabaseException {\r
52                     return ActivateModel.perform(graph, project, model);\r
53                 }\r
54             });\r
55         }\r
56     }\r
57 \r
58 }\r