-package org.simantics.migration.ui;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-\r
-import org.simantics.Simantics;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.adapter.ActionFactory;\r
-import org.simantics.db.request.Read;\r
-import org.simantics.layer0.SoftwareConfigurationResources;\r
-\r
-import gnu.trove.map.hash.THashMap;\r
-\r
-public class MigrationAnalysis {\r
- \r
- public class Update implements Comparable<Update> {\r
- Resource updateResource;\r
- Resource parentVersion;\r
- Resource childVersion;\r
- String versionName;\r
- \r
- public Update(Resource updateResource, Resource parentVersion,\r
- Resource childVersion, String versionName) {\r
- this.updateResource = updateResource;\r
- this.parentVersion = parentVersion;\r
- this.childVersion = childVersion;\r
- this.versionName = versionName;\r
- }\r
-\r
- @Override\r
- public int compareTo(Update o) {\r
- return versionName.compareTo(o.versionName);\r
- }\r
-\r
- public void execute(final Resource target) throws DatabaseException {\r
- Update parentUpdate = updates.get(parentVersion);\r
- if(parentUpdate != null)\r
- parentUpdate.execute(target);\r
- \r
- Collection<Runnable> migrateActions = Simantics.getSession().syncRequest(new Read<Collection<Runnable>>() {\r
- @Override\r
- public Collection<Runnable> perform(ReadGraph graph)\r
- throws DatabaseException {\r
- SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(graph);\r
- ArrayList<Runnable> result = new ArrayList<Runnable>(); \r
- for(Resource action : graph.getObjects(updateResource, SC.Update_HasMigrationAction))\r
- result.add(graph.adapt(action, ActionFactory.class).create(target));\r
- return result;\r
- } \r
- });\r
- for(Runnable action : migrateActions)\r
- action.run();\r
- }\r
- \r
- public void updateTargetVersion(final Resource target) throws DatabaseException {\r
- Simantics.getSession().syncRequest(new WriteRequest() { \r
- @Override\r
- public void perform(WriteGraph graph) throws DatabaseException {\r
- graph.markUndoPoint();\r
- SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(graph);\r
- graph.deny(target, SC.IsCompatibleWith, MigrationAnalysis.this.parentVersion);\r
- graph.claim(target, SC.IsCompatibleWith, childVersion);\r
- }\r
- });\r
- }\r
- }\r
- \r
- Resource parentVersion;\r
- THashMap<Resource, Update> updates = new THashMap<Resource, Update>();\r
-\r
- public MigrationAnalysis(ReadGraph g, Resource parentVersion) throws DatabaseException {\r
- this.parentVersion = parentVersion;\r
- updates.put(parentVersion, null);\r
- findUpdatesFrom(g, parentVersion);\r
- updates.remove(parentVersion);\r
- }\r
-\r
- private void findUpdatesFrom(ReadGraph g, Resource version) throws DatabaseException { \r
- SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(g);\r
- for(Resource update : g.getObjects(version, SC.Version_HasUpdate)) {\r
- Resource to = g.getSingleObject(update, SC.Update_To);\r
- if(!updates.contains(to)) {\r
- String name = NameUtils.getSafeLabel(g, to);\r
- updates.put(to, new Update(update, version, to, name));\r
- findUpdatesFrom(g, to);\r
- }\r
- }\r
- }\r
- \r
- public Collection<Update> getUpdates() {\r
- return updates.values();\r
- }\r
-}\r
+package org.simantics.migration.ui;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.adapter.ActionFactory;
+import org.simantics.db.request.Read;
+import org.simantics.layer0.SoftwareConfigurationResources;
+
+import gnu.trove.map.hash.THashMap;
+
+public class MigrationAnalysis {
+
+ public class Update implements Comparable<Update> {
+ Resource updateResource;
+ Resource parentVersion;
+ Resource childVersion;
+ String versionName;
+
+ public Update(Resource updateResource, Resource parentVersion,
+ Resource childVersion, String versionName) {
+ this.updateResource = updateResource;
+ this.parentVersion = parentVersion;
+ this.childVersion = childVersion;
+ this.versionName = versionName;
+ }
+
+ @Override
+ public int compareTo(Update o) {
+ return versionName.compareTo(o.versionName);
+ }
+
+ public void execute(final Resource target) throws DatabaseException {
+ Update parentUpdate = updates.get(parentVersion);
+ if(parentUpdate != null)
+ parentUpdate.execute(target);
+
+ Collection<Runnable> migrateActions = Simantics.getSession().syncRequest(new Read<Collection<Runnable>>() {
+ @Override
+ public Collection<Runnable> perform(ReadGraph graph)
+ throws DatabaseException {
+ SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(graph);
+ ArrayList<Runnable> result = new ArrayList<Runnable>();
+ for(Resource action : graph.getObjects(updateResource, SC.Update_HasMigrationAction))
+ result.add(graph.adapt(action, ActionFactory.class).create(target));
+ return result;
+ }
+ });
+ for(Runnable action : migrateActions)
+ action.run();
+ }
+
+ public void updateTargetVersion(final Resource target) throws DatabaseException {
+ Simantics.getSession().syncRequest(new WriteRequest() {
+ @Override
+ public void perform(WriteGraph graph) throws DatabaseException {
+ graph.markUndoPoint();
+ SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(graph);
+ graph.deny(target, SC.IsCompatibleWith, MigrationAnalysis.this.parentVersion);
+ graph.claim(target, SC.IsCompatibleWith, childVersion);
+ }
+ });
+ }
+ }
+
+ Resource parentVersion;
+ THashMap<Resource, Update> updates = new THashMap<Resource, Update>();
+
+ public MigrationAnalysis(ReadGraph g, Resource parentVersion) throws DatabaseException {
+ this.parentVersion = parentVersion;
+ updates.put(parentVersion, null);
+ findUpdatesFrom(g, parentVersion);
+ updates.remove(parentVersion);
+ }
+
+ private void findUpdatesFrom(ReadGraph g, Resource version) throws DatabaseException {
+ SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(g);
+ for(Resource update : g.getObjects(version, SC.Version_HasUpdate)) {
+ Resource to = g.getSingleObject(update, SC.Update_To);
+ if(!updates.contains(to)) {
+ String name = NameUtils.getSafeLabel(g, to);
+ updates.put(to, new Update(update, version, to, name));
+ findUpdatesFrom(g, to);
+ }
+ }
+ }
+
+ public Collection<Update> getUpdates() {
+ return updates.values();
+ }
+}