]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/migration/AttachCreationInformationStep.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / migration / AttachCreationInformationStep.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/migration/AttachCreationInformationStep.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/migration/AttachCreationInformationStep.java
new file mode 100644 (file)
index 0000000..4aeb187
--- /dev/null
@@ -0,0 +1,60 @@
+package org.simantics.modeling.migration;\r
+\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.DelayedWriteRequest;\r
+import org.simantics.db.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.migration.MigrationState;\r
+import org.simantics.db.layer0.migration.MigrationStep;\r
+import org.simantics.db.layer0.migration.MigrationUtils;\r
+import org.simantics.db.layer0.util.Layer0Utils;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.modeling.ModelingUtils;\r
+import org.simantics.simulation.ontology.SimulationResource;\r
+import org.simantics.utils.logging.TimeLogger;\r
+\r
+/**\r
+ * Runs\r
+ * {@link ModelingUtils#attachCreationInformation(IProgressMonitor, WriteGraph, Resource)}\r
+ * for all imported models.\r
+ * \r
+ * @author Tuukka Lehtonen\r
+ */\r
+public enum AttachCreationInformationStep implements MigrationStep {\r
+\r
+    INSTANCE;\r
+\r
+    public static AttachCreationInformationStep get() {\r
+        return INSTANCE;\r
+    }\r
+\r
+    @Override\r
+    public void applyTo(final IProgressMonitor monitor, Session session, MigrationState state) throws DatabaseException {\r
+        final Resource indexRoot = MigrationUtils.getResource(monitor, session, state);\r
+        if (indexRoot == null)\r
+            return;\r
+\r
+        session.sync(new DelayedWriteRequest() {\r
+            @Override\r
+            public void perform(WriteGraph graph) throws DatabaseException {\r
+                attach(monitor, graph, indexRoot);\r
+            }\r
+        });\r
+    }\r
+\r
+    private static void attach(IProgressMonitor monitor, WriteGraph graph, Resource indexRoot) throws DatabaseException {\r
+        Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
+        Layer0 L0 = Layer0.getInstance(graph);\r
+        SimulationResource SIMU = SimulationResource.getInstance(graph);\r
+        for (Resource model : graph.getObjects(indexRoot, L0.ConsistsOf)) {\r
+            if (graph.isInstanceOf(model, SIMU.Model)) {\r
+                TimeLogger.log(AttachCreationInformationStep.class, "attaching creation information to model " + NameUtils.getSafeName(graph, model));\r
+                ModelingUtils.attachCreationInformation(monitor, graph, model);\r
+            }\r
+        }\r
+    }\r
+\r
+}
\ No newline at end of file