]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/utils/OntologicalRequirementEnforceRequest.java
5f0df08112afac9a0c97b824bffd06bd44bf6c5e
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / utils / OntologicalRequirementEnforceRequest.java
1 package org.simantics.modeling.utils;\r
2 \r
3 import java.util.Collection;\r
4 \r
5 import org.simantics.datatypes.literal.GUID;\r
6 import org.simantics.db.Resource;\r
7 import org.simantics.db.WriteGraph;\r
8 import org.simantics.db.common.CommentMetadata;\r
9 import org.simantics.db.common.request.WriteRequest;\r
10 import org.simantics.db.common.utils.CommonDBUtils;\r
11 import org.simantics.db.exception.DatabaseException;\r
12 import org.simantics.db.layer0.util.Layer0Utils;\r
13 import org.simantics.layer0.Layer0;\r
14 import org.simantics.modeling.ModelingResources;\r
15 import org.simantics.modeling.adapters.ChangeHistoryUpdated;\r
16 import org.simantics.modeling.adapters.ChangeInformation;\r
17 \r
18 /**\r
19  * @author Antti Villberg\r
20  * @author Tuukka Lehtonen\r
21  */\r
22 public class OntologicalRequirementEnforceRequest extends WriteRequest {\r
23 \r
24         private Collection<Resource> creates;\r
25         private Collection<Resource> modis;\r
26         private Collection<Resource> ids;\r
27         private String author;\r
28         private long time;\r
29 \r
30         public OntologicalRequirementEnforceRequest(Collection<Resource> creates, Collection<Resource> modis, Collection<Resource> ids) {\r
31                 this(creates,\r
32                                 modis,\r
33                                 ids,\r
34                                 System.getProperty("user.name", ""),\r
35                                 System.currentTimeMillis());\r
36         }\r
37 \r
38         public OntologicalRequirementEnforceRequest(Collection<Resource> creates, Collection<Resource> modis, Collection<Resource> ids, String author, long time) {\r
39                 this.creates = creates;\r
40                 this.modis = modis;\r
41                 this.ids = ids;\r
42                 this.author = author;\r
43                 this.time = time;\r
44         }\r
45 \r
46         @Override\r
47         public void perform(WriteGraph graph) throws DatabaseException {\r
48                 update(graph, creates, modis, ids, true, author, time, true);\r
49         }\r
50 \r
51         public static void update(\r
52                         WriteGraph graph,\r
53                         Collection<Resource> creates,\r
54                         Collection<Resource> modis,\r
55                         Collection<Resource> ids,\r
56                         boolean addComment,\r
57                         boolean disableDependencyIndexing) throws DatabaseException\r
58         {\r
59                 update(graph,\r
60                                 creates,\r
61                                 modis,\r
62                                 ids,\r
63                                 addComment,\r
64                                 System.getProperty("user.name", ""),\r
65                                 System.currentTimeMillis(),\r
66                                 disableDependencyIndexing);\r
67 \r
68         }\r
69 \r
70         public static void update(\r
71                         WriteGraph graph,\r
72                         Collection<Resource> creates,\r
73                         Collection<Resource> modis,\r
74                         Collection<Resource> ids,\r
75                         boolean addComment,\r
76                         String author,\r
77                         long time,\r
78                         boolean disableDependencyIndexing) throws DatabaseException\r
79         {\r
80                 if (disableDependencyIndexing)\r
81                         Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
82                 \r
83                 ModelingResources MOD = ModelingResources.getInstance(graph);\r
84                 Layer0 L0 = Layer0.getInstance(graph);\r
85 \r
86                 if (!creates.isEmpty()) {\r
87                         ChangeInformation info = new ChangeInformation();\r
88                         info.createdAt = time;\r
89                         info.createdBy = author;\r
90                         info.modifiedAt = time;\r
91                         info.modifiedBy = author;\r
92 \r
93                         for (Resource c : creates) {\r
94                                 CommonDBUtils.selectClusterSet(graph, c);\r
95                                 graph.claimLiteral(c, MOD.changeInformation, MOD.changeInformation_Inverse, MOD.ChangeInformation, info, ChangeInformation.BINDING);\r
96                         }\r
97                 }\r
98 \r
99                 for (Resource m : modis) {\r
100                         ChangeInformation info = graph.getPossibleRelatedValue(m, MOD.changeInformation, ChangeInformation.BINDING);\r
101                         if (info == null) {\r
102                                 // Should not be possible but lets handle this anyway\r
103                                 info = new ChangeInformation();\r
104                                 info.createdAt = time;\r
105                                 info.createdBy = author;\r
106                         }\r
107                         info.modifiedAt = time;\r
108                         info.modifiedBy = author;\r
109                         CommonDBUtils.selectClusterSet(graph, m);\r
110                         graph.claimLiteral(m, MOD.changeInformation, MOD.changeInformation_Inverse, MOD.ChangeInformation, info, ChangeInformation.BINDING);\r
111                 }\r
112                 \r
113                 for (Resource r : ids) {\r
114                         if (!graph.hasStatement(r, L0.identifier)) {\r
115                                 CommonDBUtils.selectClusterSet(graph, r);\r
116                     graph.addLiteral(r, L0.identifier, L0.identifier_Inverse, L0.GUID, GUID.random(), GUID.BINDING);\r
117                         }\r
118                 }\r
119 \r
120                 graph.addMetadata( graph.getMetadata(CommentMetadata.class).add("Updated change information") );\r
121                 \r
122                 graph.addMetadata( graph.getMetadata(ChangeHistoryUpdated.class) );\r
123                 \r
124         }\r
125 \r
126 }