X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Fwizard%2FMigrateWizard.java;h=14386190c53b0a89e873582c16445acef8cf9ce0;hp=59c478e0d55f70408237bc23227ae1ee677c1dbc;hb=d90a13d82876ecd36bd3a73c00c879d6619376d1;hpb=ef969b71e1a0b8eabe93444cabaaf4960e7d1459 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..14386190c 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; @@ -59,6 +60,7 @@ import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.NamedResource; import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.request.UnaryRead; import org.simantics.db.common.request.UniqueRead; import org.simantics.db.common.request.WriteResultRequest; @@ -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; @@ -158,6 +163,14 @@ public class MigrateWizard extends Wizard { 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(); @@ -184,6 +196,21 @@ public class MigrateWizard extends Wizard { 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;