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