]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/wizard/MigrateWizard.java
Externalize strings
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / wizard / MigrateWizard.java
index 59c478e0d55f70408237bc23227ae1ee677c1dbc..751ec023c1e6d4903a41b0a4be6830a7bc75b267 100644 (file)
@@ -16,6 +16,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
@@ -34,6 +35,7 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.events.ModifyEvent;
@@ -66,6 +68,7 @@ import org.simantics.db.common.utils.Logger;
 import org.simantics.db.common.utils.Versions;
 import org.simantics.db.exception.CancelTransactionException;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.request.Read;
 import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.layer0.Layer0;
 import org.simantics.modeling.MigrateModel;
@@ -73,11 +76,13 @@ import org.simantics.modeling.MigrateModel.MigrationOperation;
 import org.simantics.modeling.ModelingResources;
 import org.simantics.modeling.UserComponentMigration;
 import org.simantics.modeling.ui.Activator;
+import org.simantics.modeling.ui.diagramEditor.DiagramEditor;
 import org.simantics.structural.stubs.StructuralResource2;
 import org.simantics.ui.workbench.dialogs.ResourceSelectionDialog3;
 import org.simantics.utils.datastructures.Pair;
 import org.simantics.utils.datastructures.Triple;
 import org.simantics.utils.strings.AlphanumComparator;
+import org.simantics.utils.ui.SWTUtils;
 
 import gnu.trove.map.hash.THashMap;
 import gnu.trove.set.hash.THashSet;
@@ -98,12 +103,12 @@ public class MigrateWizard extends Wizard {
        
        this.initial = initial;
 
-        setWindowTitle("Perform migration");
+        setWindowTitle(Messages.MigrateWizard_PerformMigration);
         setNeedsProgressMonitor(true);
         setForcePreviousAndNextButtons(false);
         setDialogSettings(Activator.getDefault().getDialogSettings());
 
-        prefnode = InstanceScope.INSTANCE.getNode( "org.simantics.modeling.ui.wizard.MigrateWizard" );
+        prefnode = InstanceScope.INSTANCE.getNode( "org.simantics.modeling.ui.wizard.MigrateWizard" ); //$NON-NLS-1$
         
     }
 
@@ -153,11 +158,19 @@ public class MigrateWizard extends Wizard {
                             graph.markUndoPoint();
                             String report = UserComponentMigration.doMigration(mon.newChild(500, SubMonitor.SUPPRESS_NONE), graph, result);
                             UserComponentMigration.doPostMigration(mon.newChild(500, SubMonitor.SUPPRESS_NONE), graph, result);
-                            mon.setTaskName("Committing Changes");
-                            mon.subTask("");
+                            mon.setTaskName(Messages.MigrateWizard_MonitorCommitingChanges);
+                            mon.subTask(""); //$NON-NLS-1$
                             return report;
                         }
                     });
+
+                    // Schedule diagram reinitialization to see actual migration changes
+                    // This needs to be done because the diagram editor can't currently
+                    // refresh itself after type (InstanceOf) changes in diagram elements.
+                    Set<Resource> diagramsToReopen = Simantics.getSession().syncRequest(
+                            (Read<Set<Resource>>) graph -> componentsToDiagrams(graph, ops));
+                    SWTUtils.asyncExec(MigrateWizard.this.getContainer().getShell().getDisplay(),
+                            () -> DiagramEditor.reinitializeDiagram(diagramsToReopen));
                 } catch (DatabaseException e) {
                     throw new InvocationTargetException(e);
                 } finally {
@@ -165,7 +178,6 @@ public class MigrateWizard extends Wizard {
                 }
             });
 
-
             ReportDialog md = new ReportDialog(getShell(), report[0], 800, 500);
             md.open();
 
@@ -175,15 +187,30 @@ public class MigrateWizard extends Wizard {
             Throwable cause = e.getCause();
             if (!(cause instanceof CancelTransactionException || cause instanceof OperationCanceledException)) {
                 Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
-                        "Migration failed, see Error Log for details.", e.getCause()));
+                        Messages.MigrateWizard_ActivatorMigrationFailed, e.getCause()));
             }
         } catch (InterruptedException e) {
             Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
-                    "Migration interrupted, see Error Log for details.", e));
+                    Messages.MigrateWizard_ActivatorMigrationInterrupted, e));
         }
         return false;
     }
 
+    private static final Set<Resource> componentsToDiagrams(ReadGraph graph, Collection<MigrationOperation> ops) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        ModelingResources MOD = ModelingResources.getInstance(graph);
+        Set<Resource> diagrams = new HashSet<>();
+        for (MigrationOperation op : ops) {
+            Resource composite = graph.getPossibleObject(op.instanceToMigrate.getResource(), L0.PartOf);
+            if (composite != null) {
+                Resource diagram = graph.getPossibleObject(composite, MOD.CompositeToDiagram);
+                if (diagram != null)
+                    diagrams.add(diagram);
+            }
+        }
+        return diagrams;
+    }
+
     static class ReportDialog extends MessageDialog {
         private final String report;
         private final int initialWidth;
@@ -191,9 +218,9 @@ public class MigrateWizard extends Wizard {
 
         public ReportDialog(Shell shell, String report, int width, int height) {
             super(shell, 
-                    "Migration report", null, 
-                    "", 
-                    MessageDialog.INFORMATION, new String[] { "Continue" }, 0);
+                    Messages.MigrateWizard_MigrationReport, null, 
+                    "",  //$NON-NLS-1$
+                    MessageDialog.INFORMATION, new String[] { Messages.MigrateWizard_Continue }, 0);
             this.report = report;
             this.initialWidth = width;
             this.initialHeight = height;
@@ -255,7 +282,7 @@ public class MigrateWizard extends Wizard {
         String                previouslySelectedLocationId = null;
 
         public MigratePage(String initial) {
-            super("Perform migration", "Perform migration", null);
+            super(Messages.MigrateWizard_PerformMigration, Messages.MigrateWizard_PerformMigration, null);
             this.initial = initial;
         }
 
@@ -270,7 +297,7 @@ public class MigrateWizard extends Wizard {
                 container.setLayout(layout);
             }
 
-            new Label(container, SWT.NONE).setText("&Source:");
+            new Label(container, SWT.NONE).setText(Messages.MigrateWizard_SourceAnd);
             source = new Text(container, SWT.BORDER);
             source.setText(initial);
             source.addModifyListener(new ModifyListener() {
@@ -283,14 +310,14 @@ public class MigrateWizard extends Wizard {
             GridDataFactory.fillDefaults().grab(true, false).span(8, 1).applyTo(source);
 
             browseSource = new Button(container, SWT.NONE);
-            browseSource.setText("&Browse");
+            browseSource.setText(Messages.MigrateWizard_BrowseAnd);
             GridDataFactory.fillDefaults().grab(false, false).applyTo(browseSource);
             browseSource.addSelectionListener(new SelectionAdapter() {
                 @Override
                 public void widgetSelected(SelectionEvent e_) {
                     try {
                         Map<String, Pair<String, ImageDescriptor>> map = Simantics.getSession().syncRequest(new BrowseSourceContentRequest(target.getText()));
-                        String uri = queryTargetSelection("Select Source Type", map);
+                        String uri = queryTargetSelection(Messages.MigrateWizard_SelectSourceType, map);
                         if (uri != null)
                             source.setText(uri);
                     } catch (DatabaseException e) {
@@ -299,7 +326,7 @@ public class MigrateWizard extends Wizard {
                 }
             });
 
-            new Label(container, SWT.NONE).setText("&Target:");
+            new Label(container, SWT.NONE).setText(Messages.MigrateWizard_TargetAnd);
             target = new Text(container, SWT.BORDER);
             target.setText(initial);
             target.addModifyListener(new ModifyListener() {
@@ -313,14 +340,14 @@ public class MigrateWizard extends Wizard {
             GridDataFactory.fillDefaults().grab(true, false).span(8, 1).applyTo(target);
 
             browseTarget = new Button(container, SWT.NONE);
-            browseTarget.setText("B&rowse");
+            browseTarget.setText(Messages.MigrateWizard_BrowseAnd1);
             GridDataFactory.fillDefaults().grab(false, false).applyTo(browseTarget);
             browseTarget.addSelectionListener(new SelectionAdapter() {
                 @Override
                 public void widgetSelected(SelectionEvent e_) {
                     try {
                         Map<String, Pair<String, ImageDescriptor>> map = Simantics.getSession().syncRequest(new BrowseTargetContentRequest(source.getText()));
-                        String uri = queryTargetSelection("Select Target Type", map);
+                        String uri = queryTargetSelection(Messages.MigrateWizard_SelectTargetType, map);
                         if (uri != null)
                             target.setText(uri);
                     } catch (DatabaseException e) {
@@ -330,7 +357,7 @@ public class MigrateWizard extends Wizard {
             });
 
             symbolsLabel = new Label(container, SWT.NONE);
-            symbolsLabel.setText("Target &symbol:");
+            symbolsLabel.setText(Messages.MigrateWizard_TargetAndSymbol);
             GridDataFactory.fillDefaults().applyTo(symbolsLabel);
 
             symbols = new CCombo(container, SWT.BORDER | SWT.READ_ONLY);
@@ -346,10 +373,10 @@ public class MigrateWizard extends Wizard {
 
             instanceLabel = new Label(container, SWT.NONE);
             GridDataFactory.fillDefaults().grab(true, false).span(10, 1).applyTo(instanceLabel);
-            instanceLabel.setText("");
+            instanceLabel.setText(""); //$NON-NLS-1$
 
             locationsLabel = new Label(container, SWT.NONE);
-            locationsLabel.setText("&Locations:");
+            locationsLabel.setText(Messages.MigrateWizard_LocationAnd);
             locations = new CCombo(container, SWT.BORDER | SWT.READ_ONLY);
             locations.setVisibleItemCount(25);
             locations.addSelectionListener(new SelectionAdapter() {
@@ -365,16 +392,16 @@ public class MigrateWizard extends Wizard {
             GridDataFactory.fillDefaults().grab(true, false).span(9, 1).applyTo(locations);
 
             instancesLabel = new Label(container, SWT.NONE);
-            instancesLabel.setText("&Select instances to migrate:");
+            instancesLabel.setText(Messages.MigrateWizard_SelectInstancesToMigrate);
             GridDataFactory.fillDefaults().grab(true, false).span(10, 1).applyTo(instancesLabel);
 
             buttonBar = new Composite(container, SWT.NONE);
             RowLayoutFactory.fillDefaults().type(SWT.HORIZONTAL).applyTo(buttonBar);
             GridDataFactory.fillDefaults().grab(true, false).span(10, 1).applyTo(buttonBar);
             Button selectAll = new Button(buttonBar, SWT.PUSH);
-            selectAll.setText("Select &All");
+            selectAll.setText(Messages.MigrateWizard_SelectAllAnd);
             Button selectNone = new Button(buttonBar, SWT.PUSH);
-            selectNone.setText("Select &None");
+            selectNone.setText(Messages.MigrateWizard_SelectNoneAnd);
             selectAll.addSelectionListener(new SelectionAdapter() {
                 @Override
                 public void widgetSelected(SelectionEvent e) {
@@ -448,7 +475,7 @@ public class MigrateWizard extends Wizard {
                 });
 
                 symbols.removeAll();
-                symbols.add("<retain symbol name>");
+                symbols.add(Messages.MigrateWizard_RetainSymbolName);
                 for(NamedResource nr : syms) {
                     symbols.add(nr.getName());
                 }
@@ -519,7 +546,7 @@ public class MigrateWizard extends Wizard {
 
             int preSelect = -1, i = 0;
             for (Triple<String,NamedResource,Collection<MigrationOperation>> r : model.instances) {
-                locations.add(r.second.getName() + " (" + r.third.size() + " instances)");
+                locations.add(NLS.bind(Messages.MigrateWizard_LocationInstance, r.second.getName(), r.third.size())); 
                 if (r.first.equals(previouslySelectedLocationId))
                     preSelect = i;
                 if (preSelect < 0 && model.activeModels.contains(r.second.getResource()))
@@ -527,7 +554,7 @@ public class MigrateWizard extends Wizard {
                 ++i;
             }
             if (locations.getItemCount() == 0) {
-                locations.add("<no instances were found>");
+                locations.add(Messages.MigrateWizard_NoInstancesFound);
                 locations.select(0);
             } else {
                 locations.select(preSelect > -1 ? preSelect : 0);
@@ -537,27 +564,30 @@ public class MigrateWizard extends Wizard {
         void refreshInstances() {
 
             int toMigrate = 0;
-            for(Triple<String,NamedResource,Collection<MigrationOperation>> pair : model.instances) {
+            for (Triple<String, NamedResource, Collection<MigrationOperation>> pair : model.instances) {
                 toMigrate += pair.third.size();
             }
 
-            if(model.instanceCount == 0)
-                instanceLabel.setText("No instances were found.");
-            else if(model.instanceCount == 1) {
-                if(toMigrate == 1) {
-                    instanceLabel.setText("1 migratable instance found.");
+            if (model.instanceCount == 0)
+                instanceLabel.setText(Messages.MigrateWizard_NoInstancesWereFound);
+            else if (model.instanceCount == 1) {
+                if (toMigrate == 1) {
+                    instanceLabel.setText(Messages.MigrateWizard_OneMigratableInstanceFound);
                 } else {
-                    instanceLabel.setText("1 instance found, but it cannot be migrated with current settings.");
+                    instanceLabel.setText(Messages.MigrateWizard_InstanceFoundCannotBeMigrated);
                 }
             } else {
-                if(toMigrate < model.instanceCount) {
-                    if(toMigrate == 0) {
-                        instanceLabel.setText(model.instanceCount + " instances were found. None of them can be migrated with current settings.");
+                if (toMigrate < model.instanceCount) {
+                    if (toMigrate == 0) {
+                        instanceLabel
+                        .setText(NLS.bind(Messages.MigrateWizard_NumberOfInstancesFound, model.instanceCount));
                     } else {
-                        instanceLabel.setText(model.instanceCount + " instances were found. " + (model.instanceCount-toMigrate) + " of them cannot be migrated with current settings.");
+                        instanceLabel.setText(NLS.bind(Messages.MigrateWizard_InstancesWereFound, model.instanceCount,
+                                (model.instanceCount - toMigrate)));
                     }
                 } else {
-                    instanceLabel.setText(model.instanceCount + " migratable instances found. ");
+                    instanceLabel
+                    .setText(NLS.bind(Messages.MigrateWizard_MigratableInstancesFound, model.instanceCount));
                 }
             }
 
@@ -566,7 +596,7 @@ public class MigrateWizard extends Wizard {
             if (model == null)
                 return;
 
-            if(toMigrate == 0) {
+            if (toMigrate == 0) {
                 locationsLabel.setVisible(false);
                 locations.setVisible(false);
                 GridDataFactory.fillDefaults().exclude(true).applyTo(locationsLabel);
@@ -578,25 +608,26 @@ public class MigrateWizard extends Wizard {
                 GridDataFactory.fillDefaults().grab(true, false).span(9, 1).applyTo(locations);
             }
 
-            if(!model.instances.isEmpty()) {
+            if (!model.instances.isEmpty()) {
 
                 int locationIndex = locations.getSelectionIndex();
-                if(locationIndex == -1) return;
+                if (locationIndex == -1)
+                    return;
 
                 model.sortedShownInstances = new ArrayList<>();
-                for(MigrationOperation o : model.instances.get(locationIndex).third)
+                for (MigrationOperation o : model.instances.get(locationIndex).third)
                     model.sortedShownInstances.add(o);
                 Collections.sort(model.sortedShownInstances, MIGRATION_OP_COMPARATOR);
-                for(MigrationOperation o : model.sortedShownInstances) {
+                for (MigrationOperation o : model.sortedShownInstances) {
                     String uri = o.toString();
-                    uri = uri.replace("http://Projects/Development%20Project/", "");
+                    uri = uri.replace("http://Projects/Development%20Project/", ""); //$NON-NLS-1$ //$NON-NLS-2$
                     uri = URIStringUtils.unescape(uri);
                     instances.add(uri);
                 }
 
             }
 
-            if(model.sortedShownInstances.isEmpty()) {
+            if (model.sortedShownInstances.isEmpty()) {
                 instancesLabel.setVisible(false);
                 instances.setVisible(false);
                 buttonBar.setVisible(false);