]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/utils/OntologicalRequirementEnforceRequest.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / utils / OntologicalRequirementEnforceRequest.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/utils/OntologicalRequirementEnforceRequest.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/utils/OntologicalRequirementEnforceRequest.java
new file mode 100644 (file)
index 0000000..5f0df08
--- /dev/null
@@ -0,0 +1,126 @@
+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