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