1 package org.simantics.migration.ui;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\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
20 public class MigrateActionFactory implements ActionFactory {
\r
23 public Runnable create(Object target) {
\r
24 final Resource resource = (Resource)target;
\r
25 return new Runnable() {
\r
33 private void analyze(final Resource resource) {
\r
34 Simantics.getSession().asyncRequest(new ReadRequest() {
\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
43 Collections.sort(updates);
\r
44 Display.getDefault().asyncExec(new Runnable() {
\r
47 select(resource, updates);
\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
60 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
\r
64 public void dispose() {
\r
68 public Object[] getElements(Object inputElement) {
\r
69 return updates.toArray();
\r
72 listDialog.setLabelProvider(new LabelProvider() {
\r
74 public String getText(Object element) {
\r
75 return ((Update)element).versionName;
\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
84 update.execute(resource);
\r
85 update.updateTargetVersion(resource);
\r
86 } catch(DatabaseException e) {
\r
87 e.printStackTrace();
\r