]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.migration.ui;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 \r
6 import org.eclipse.jface.viewers.IStructuredContentProvider;\r
7 import org.eclipse.jface.viewers.LabelProvider;\r
8 import org.eclipse.jface.viewers.Viewer;\r
9 import org.eclipse.swt.widgets.Display;\r
10 import org.eclipse.ui.dialogs.ListDialog;\r
11 import org.simantics.Simantics;\r
12 import org.simantics.db.ReadGraph;\r
13 import org.simantics.db.Resource;\r
14 import org.simantics.db.common.request.ReadRequest;\r
15 import org.simantics.db.exception.DatabaseException;\r
16 import org.simantics.db.layer0.adapter.ActionFactory;\r
17 import org.simantics.layer0.SoftwareConfigurationResources;\r
18 import org.simantics.migration.ui.MigrationAnalysis.Update;\r
19 \r
20 public class MigrateActionFactory implements ActionFactory {\r
21 \r
22     @Override\r
23     public Runnable create(Object target) {\r
24         final Resource resource = (Resource)target;\r
25         return new Runnable() {\r
26             @Override\r
27             public void run() {\r
28                 analyze(resource);\r
29             }            \r
30         };\r
31     }\r
32     \r
33     private void analyze(final Resource resource) {\r
34         Simantics.getSession().asyncRequest(new ReadRequest() {            \r
35             @Override\r
36             public void run(ReadGraph graph) throws DatabaseException {\r
37                 SoftwareConfigurationResources SC = SoftwareConfigurationResources.getInstance(graph);\r
38                 final ArrayList<Update> updates = new ArrayList<Update>();\r
39                 for(Resource version : graph.getObjects(resource, SC.IsCompatibleWith)) {\r
40                     MigrationAnalysis analysis = new MigrationAnalysis(graph, version);\r
41                     updates.addAll(analysis.getUpdates());\r
42                 }\r
43                 Collections.sort(updates);\r
44                 Display.getDefault().asyncExec(new Runnable() {\r
45                     @Override\r
46                     public void run() {\r
47                         select(resource, updates);                        \r
48                     }            \r
49                 });  \r
50             }\r
51         });\r
52     }\r
53     \r
54     private void select(final Resource resource, final ArrayList<Update> updates) {\r
55         ListDialog listDialog = new ListDialog(Display.getCurrent().getActiveShell());\r
56         listDialog.setTitle("Migrate");\r
57         listDialog.setMessage("Choose the version to migrate to");\r
58         listDialog.setContentProvider(new IStructuredContentProvider() {            \r
59             @Override\r
60             public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {       \r
61             }\r
62             \r
63             @Override\r
64             public void dispose() {\r
65             }\r
66             \r
67             @Override\r
68             public Object[] getElements(Object inputElement) {\r
69                 return updates.toArray();\r
70             }\r
71         });\r
72         listDialog.setLabelProvider(new LabelProvider() {\r
73             @Override\r
74             public String getText(Object element) {\r
75                 return ((Update)element).versionName;\r
76             }\r
77         });\r
78         listDialog.setInput(updates);\r
79         if(listDialog.open() == ListDialog.OK) {\r
80             Object[] result = listDialog.getResult();\r
81             if(result.length == 1) {\r
82                 Update update = (Update)result[0];\r
83                 try {\r
84                     update.execute(resource);\r
85                     update.updateTargetVersion(resource);                    \r
86                 } catch(DatabaseException e) {\r
87                     e.printStackTrace();\r
88                 }\r
89             }\r
90         }\r
91     }\r
92 \r
93 }\r