]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.migration.ui/src/org/simantics/migration/ui/MigrateActionFactory.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.migration.ui / src / org / simantics / migration / ui / MigrateActionFactory.java
diff --git a/bundles/org.simantics.migration.ui/src/org/simantics/migration/ui/MigrateActionFactory.java b/bundles/org.simantics.migration.ui/src/org/simantics/migration/ui/MigrateActionFactory.java
new file mode 100644 (file)
index 0000000..414b117
--- /dev/null
@@ -0,0 +1,93 @@
+package org.simantics.migration.ui;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.ui.dialogs.ListDialog;\r
+import org.simantics.Simantics;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.adapter.ActionFactory;\r
+import org.simantics.layer0.SoftwareConfigurationResources;\r
+import org.simantics.migration.ui.MigrationAnalysis.Update;\r
+\r
+public class MigrateActionFactory implements ActionFactory {\r
+\r
+    @Override\r
+    public Runnable create(Object target) {\r
+        final Resource resource = (Resource)target;\r
+        return new Runnable() {\r
+            @Override\r
+            public void run() {\r
+                analyze(resource);\r
+            }            \r
+        };\r
+    }\r
+    \r
+    private void analyze(final Resource resource) {\r
+        Simantics.getSession().asyncRequest(new ReadRequest() {            \r
+            @Override\r
+            public void run(ReadGraph graph) throws DatabaseException {\r
+                SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(graph);\r
+                final ArrayList<Update> updates = new ArrayList<Update>();\r
+                for(Resource version : graph.getObjects(resource, SC.IsCompatibleWith)) {\r
+                    MigrationAnalysis analysis = new MigrationAnalysis(graph, version);\r
+                    updates.addAll(analysis.getUpdates());\r
+                }\r
+                Collections.sort(updates);\r
+                Display.getDefault().asyncExec(new Runnable() {\r
+                    @Override\r
+                    public void run() {\r
+                        select(resource, updates);                        \r
+                    }            \r
+                });  \r
+            }\r
+        });\r
+    }\r
+    \r
+    private void select(final Resource resource, final ArrayList<Update> updates) {\r
+        ListDialog listDialog = new ListDialog(Display.getCurrent().getActiveShell());\r
+        listDialog.setTitle("Migrate");\r
+        listDialog.setMessage("Choose the version to migrate to");\r
+        listDialog.setContentProvider(new IStructuredContentProvider() {            \r
+            @Override\r
+            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {       \r
+            }\r
+            \r
+            @Override\r
+            public void dispose() {\r
+            }\r
+            \r
+            @Override\r
+            public Object[] getElements(Object inputElement) {\r
+                return updates.toArray();\r
+            }\r
+        });\r
+        listDialog.setLabelProvider(new LabelProvider() {\r
+            @Override\r
+            public String getText(Object element) {\r
+                return ((Update)element).versionName;\r
+            }\r
+        });\r
+        listDialog.setInput(updates);\r
+        if(listDialog.open() == ListDialog.OK) {\r
+            Object[] result = listDialog.getResult();\r
+            if(result.length == 1) {\r
+                Update update = (Update)result[0];\r
+                try {\r
+                    update.execute(resource);\r
+                    update.updateTargetVersion(resource);                    \r
+                } catch(DatabaseException e) {\r
+                    e.printStackTrace();\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+}\r