diff options
| author | Esteban Dugueperoux | 2015-08-31 12:33:26 +0000 |
|---|---|---|
| committer | Esteban DUGUEPEROUX | 2015-09-03 13:26:57 +0000 |
| commit | 6dd423b3acbb4c474faaa464161abe39cd89cb85 (patch) | |
| tree | 10d3c346234bc83e19524808e7c51d618958cad8 | |
| parent | 504dcbff7eba213112766095fc568c36346e3ca6 (diff) | |
| download | org.eclipse.sirius-6dd423b3acbb4c474faaa464161abe39cd89cb85.tar.gz org.eclipse.sirius-6dd423b3acbb4c474faaa464161abe39cd89cb85.tar.xz org.eclipse.sirius-6dd423b3acbb4c474faaa464161abe39cd89cb85.zip | |
[471456] Have SessionEditorInput.getURI() returns correct URI
- To avoid SessionEditorInput.equals() returns false for equals input,
we must override URIEditorInput.getURI() to return the URI of the input.
Bug: 471456
Change-Id: I1e9782cf136e067eda99174b4dcc2ec381e52873
Signed-off-by: Esteban Dugueperoux <esteban.dugueperoux@obeo.fr>
2 files changed, 29 insertions, 2 deletions
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/SessionEditorInputTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/SessionEditorInputTests.java index dad2f38b95..97d43bfe0e 100644 --- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/SessionEditorInputTests.java +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/SessionEditorInputTests.java @@ -30,9 +30,12 @@ import org.eclipse.sirius.business.api.query.URIQuery; import org.eclipse.sirius.business.api.session.Session; import org.eclipse.sirius.business.api.session.factory.SessionFactory; import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil; +import org.eclipse.sirius.diagram.DDiagram; +import org.eclipse.sirius.diagram.ui.business.api.query.DDiagramGraphicalQuery; import org.eclipse.sirius.tests.support.api.TestsUtil; import org.eclipse.sirius.tools.api.command.semantic.AddSemanticResourceCommand; import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager; +import org.eclipse.sirius.ui.business.api.session.SessionEditorInput; import org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionCallback; import org.eclipse.sirius.ui.business.internal.commands.ChangeViewpointSelectionCommand; import org.eclipse.sirius.viewpoint.DAnalysis; @@ -40,6 +43,7 @@ import org.eclipse.sirius.viewpoint.DRepresentation; import org.eclipse.sirius.viewpoint.DView; import org.eclipse.sirius.viewpoint.ViewpointPackage; import org.eclipse.sirius.viewpoint.description.Viewpoint; +import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import junit.framework.TestCase; @@ -95,7 +99,7 @@ public class SessionEditorInputTests extends TestCase { /** * Test that opening a {@link DRepresentation} whose {@link URI} has changed - * to be same a already opened {@link DRepresentation} doesn't open the + * to be same as an already opened {@link DRepresentation} doesn't open the * already opened {@link DRepresentation} but a new editor for the requested * {@link DRepresentation}. */ @@ -120,6 +124,19 @@ public class SessionEditorInputTests extends TestCase { IEditorPart newEditor = DialectUIManager.INSTANCE.openEditor(session, dRepresentation1, new NullProgressMonitor()); assertNotSame(editor1, newEditor); assertEquals("Editor for representation1 should be opened", 2, EclipseUIUtil.getActivePage().getEditorReferences().length); + IEditorInput newEditorInput = newEditor.getEditorInput(); + IEditorInput editor2Input = editor2.getEditorInput(); + assertTrue(newEditorInput instanceof SessionEditorInput); + assertTrue(editor2Input instanceof SessionEditorInput); + SessionEditorInput sessionNewEditorInput = (SessionEditorInput) newEditor.getEditorInput(); + SessionEditorInput sessionEditor2Input = (SessionEditorInput) editor2.getEditorInput(); + URI representation1GMFDiagramURI = EcoreUtil.getURI(new DDiagramGraphicalQuery((DDiagram) dRepresentation1).getAssociatedGMFDiagram().get()); + URI representation2GMFDiagramURI = EcoreUtil.getURI(new DDiagramGraphicalQuery((DDiagram) dRepresentation2).getAssociatedGMFDiagram().get()); + assertEquals(representation1GMFDiagramURI, sessionNewEditorInput.getURI()); + assertEquals(representation2GMFDiagramURI, sessionEditor2Input.getURI()); + assertEquals(new SessionEditorInput(representation1GMFDiagramURI, dRepresentation1.getName(), session), sessionNewEditorInput); + assertEquals(new SessionEditorInput(representation2GMFDiagramURI, dRepresentation2.getName(), session), sessionEditor2Input); + DialectUIManager.INSTANCE.closeEditor(editor1, false); DialectUIManager.INSTANCE.closeEditor(editor2, false); TestsUtil.synchronizationWithUIThread(); diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionEditorInput.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionEditorInput.java index ab0b2a3aba..18bf8a4681 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionEditorInput.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/business/api/session/SessionEditorInput.java @@ -21,6 +21,7 @@ import org.eclipse.emf.common.ui.URIEditorInput; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.sirius.business.api.session.Session; import org.eclipse.sirius.business.api.session.SessionManager; import org.eclipse.sirius.business.api.session.factory.SessionFactory; @@ -310,6 +311,15 @@ public class SessionEditorInput extends URIEditorInput { public void dispose() { } + @Override + public URI getURI() { + EObject input = inputRef != null ? inputRef.get() : null; + if (input != null) { + return EcoreUtil.getURI(input); + } + return super.getURI(); + } + /** * Overridden to test input existence in a generic way. * @@ -355,7 +365,7 @@ public class SessionEditorInput extends URIEditorInput { @Override public boolean equals(Object o) { - boolean equals = super.equals(o); + boolean equals = this == o || o instanceof SessionEditorInput && getURI().equals(((SessionEditorInput) o).getURI()); if (equals && o instanceof SessionEditorInput) { EObject input = getInput(false); if (input != null) { |
