--- /dev/null
+package org.simantics.modeling.utils;\r
+\r
+import java.util.Collection;\r
+\r
+import org.simantics.datatypes.literal.GUID;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.CommentMetadata;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.common.utils.CommonDBUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.util.Layer0Utils;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.modeling.ModelingResources;\r
+import org.simantics.modeling.adapters.ChangeHistoryUpdated;\r
+import org.simantics.modeling.adapters.ChangeInformation;\r
+\r
+/**\r
+ * @author Antti Villberg\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class OntologicalRequirementEnforceRequest extends WriteRequest {\r
+\r
+ private Collection<Resource> creates;\r
+ private Collection<Resource> modis;\r
+ private Collection<Resource> ids;\r
+ private String author;\r
+ private long time;\r
+\r
+ public OntologicalRequirementEnforceRequest(Collection<Resource> creates, Collection<Resource> modis, Collection<Resource> ids) {\r
+ this(creates,\r
+ modis,\r
+ ids,\r
+ System.getProperty("user.name", ""),\r
+ System.currentTimeMillis());\r
+ }\r
+\r
+ public OntologicalRequirementEnforceRequest(Collection<Resource> creates, Collection<Resource> modis, Collection<Resource> ids, String author, long time) {\r
+ this.creates = creates;\r
+ this.modis = modis;\r
+ this.ids = ids;\r
+ this.author = author;\r
+ this.time = time;\r
+ }\r
+\r
+ @Override\r
+ public void perform(WriteGraph graph) throws DatabaseException {\r
+ update(graph, creates, modis, ids, true, author, time, true);\r
+ }\r
+\r
+ public static void update(\r
+ WriteGraph graph,\r
+ Collection<Resource> creates,\r
+ Collection<Resource> modis,\r
+ Collection<Resource> ids,\r
+ boolean addComment,\r
+ boolean disableDependencyIndexing) throws DatabaseException\r
+ {\r
+ update(graph,\r
+ creates,\r
+ modis,\r
+ ids,\r
+ addComment,\r
+ System.getProperty("user.name", ""),\r
+ System.currentTimeMillis(),\r
+ disableDependencyIndexing);\r
+\r
+ }\r
+\r
+ public static void update(\r
+ WriteGraph graph,\r
+ Collection<Resource> creates,\r
+ Collection<Resource> modis,\r
+ Collection<Resource> ids,\r
+ boolean addComment,\r
+ String author,\r
+ long time,\r
+ boolean disableDependencyIndexing) throws DatabaseException\r
+ {\r
+ if (disableDependencyIndexing)\r
+ Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
+ \r
+ ModelingResources MOD = ModelingResources.getInstance(graph);\r
+ Layer0 L0 = Layer0.getInstance(graph);\r
+\r
+ if (!creates.isEmpty()) {\r
+ ChangeInformation info = new ChangeInformation();\r
+ info.createdAt = time;\r
+ info.createdBy = author;\r
+ info.modifiedAt = time;\r
+ info.modifiedBy = author;\r
+\r
+ for (Resource c : creates) {\r
+ CommonDBUtils.selectClusterSet(graph, c);\r
+ graph.claimLiteral(c, MOD.changeInformation, MOD.changeInformation_Inverse, MOD.ChangeInformation, info, ChangeInformation.BINDING);\r
+ }\r
+ }\r
+\r
+ for (Resource m : modis) {\r
+ ChangeInformation info = graph.getPossibleRelatedValue(m, MOD.changeInformation, ChangeInformation.BINDING);\r
+ if (info == null) {\r
+ // Should not be possible but lets handle this anyway\r
+ info = new ChangeInformation();\r
+ info.createdAt = time;\r
+ info.createdBy = author;\r
+ }\r
+ info.modifiedAt = time;\r
+ info.modifiedBy = author;\r
+ CommonDBUtils.selectClusterSet(graph, m);\r
+ graph.claimLiteral(m, MOD.changeInformation, MOD.changeInformation_Inverse, MOD.ChangeInformation, info, ChangeInformation.BINDING);\r
+ }\r
+ \r
+ for (Resource r : ids) {\r
+ if (!graph.hasStatement(r, L0.identifier)) {\r
+ CommonDBUtils.selectClusterSet(graph, r);\r
+ graph.addLiteral(r, L0.identifier, L0.identifier_Inverse, L0.GUID, GUID.random(), GUID.BINDING);\r
+ }\r
+ }\r
+\r
+ graph.addMetadata( graph.getMetadata(CommentMetadata.class).add("Updated change information") );\r
+ \r
+ graph.addMetadata( graph.getMetadata(ChangeHistoryUpdated.class) );\r
+ \r
+ }\r
+\r
+}
\ No newline at end of file