X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Fwizard%2FMigrateWizard.java;h=751ec023c1e6d4903a41b0a4be6830a7bc75b267;hb=28438fa467ae60dd63515be2df724c6ff9c299c9;hp=59c478e0d55f70408237bc23227ae1ee677c1dbc;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/wizard/MigrateWizard.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/wizard/MigrateWizard.java index 59c478e0d..751ec023c 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/wizard/MigrateWizard.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/wizard/MigrateWizard.java @@ -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 diagramsToReopen = Simantics.getSession().syncRequest( + (Read>) 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 componentsToDiagrams(ReadGraph graph, Collection ops) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + ModelingResources MOD = ModelingResources.getInstance(graph); + Set 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> 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> 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(""); + 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> 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(""); + 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> pair : model.instances) { + for (Triple> 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);