diff options
| author | jmallet | 2017-08-02 17:08:16 +0000 |
|---|---|---|
| committer | Maxime Porhel | 2017-08-16 09:05:30 +0000 |
| commit | ab7bcb88e97bab8abd1eaf8c758aa86b93275dbf (patch) | |
| tree | 2e1ffaa3bf4e1785d7df9d160b2c005c59bd72ca | |
| parent | 7affc3e2877e785690d7b3020e2e792d0d90f74f (diff) | |
| download | org.eclipse.sirius-ab7bcb88e97bab8abd1eaf8c758aa86b93275dbf.tar.gz org.eclipse.sirius-ab7bcb88e97bab8abd1eaf8c758aa86b93275dbf.tar.xz org.eclipse.sirius-ab7bcb88e97bab8abd1eaf8c758aa86b93275dbf.zip | |
[514982] Check resource before DAnalysis session creation.
The opening of any file with "Sirius Diagram Editing" editor caused an
error and corrupted the file by converting it in DAnalysis session
whereas the file is not a representation resource. Now, we check
resource type before creating DAnalysis session.
Bug: 514982
Change-Id: I98711b43f48aaa777d6b5b0ed060d8e2abd23e08
Signed-off-by: jmallet <jessy.mallet@obeo.fr>
4 files changed, 22 insertions, 1 deletions
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/DAnalysisSessionTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/DAnalysisSessionTests.java index 5fe66bae0c..bd4fa43ca5 100644 --- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/DAnalysisSessionTests.java +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/DAnalysisSessionTests.java @@ -41,6 +41,7 @@ import org.eclipse.sirius.ui.business.api.session.IEditingSession; import org.eclipse.sirius.ui.business.api.session.SessionUIManager; import org.eclipse.sirius.viewpoint.DRepresentation; import org.eclipse.sirius.viewpoint.DView; +import org.eclipse.sirius.viewpoint.Messages; import org.eclipse.sirius.viewpoint.description.RepresentationDescription; import org.eclipse.sirius.viewpoint.description.Viewpoint; import org.eclipse.ui.IEditorPart; @@ -406,6 +407,16 @@ public class DAnalysisSessionTests extends SiriusDiagramTestCase { } } + public void testCreateSessionFromEcoreResource() throws Exception { + URI semanticUri = toURI(SEMANTIC_MODEL_PATH); + try { + session = SessionFactory.INSTANCE.createSession(semanticUri, new NullProgressMonitor()); + fail(); + } catch (final Exception e) { + assertEquals(Messages.SessionFactoryImpl_ResourceTypeErrorMsg, e.getMessage()); + } + } + public void testAddRemoveSpecialResourceDoesNotUnloadIt() { doOpenSession(); final Resource resource = EcorePackage.eINSTANCE.eResource(); diff --git a/plugins/org.eclipse.sirius/plugin.properties b/plugins/org.eclipse.sirius/plugin.properties index f923a6dc92..15180057f4 100644 --- a/plugins/org.eclipse.sirius/plugin.properties +++ b/plugins/org.eclipse.sirius/plugin.properties @@ -231,6 +231,7 @@ RuntimeLoggerInterpreterImpl_evaluationConditionErrorMsg = Evaluation condition SaveSessionJob_sessionSavingMsg = Session saving Saver_savingErrorMsg = Core exception while saving session SelectionWizardDescriptionImpl_title = Selection Wizard +SessionFactoryImpl_ResourceTypeErrorMsg = session creation failed: the resource resource is not a representations resource. SessionFactoryImpl_EmptyContentErrorMsg = session creation failed: the resource content is empty. SessionFactoryImpl_creationFailedErrorMsg = Session creation failed SessionFactoryImpl_sessionCreation = Session creation diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/SessionFactoryImpl.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/SessionFactoryImpl.java index 685ceab22c..ace69194ba 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/SessionFactoryImpl.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/SessionFactoryImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2015 THALES GLOBAL SERVICES. + * Copyright (c) 2008, 2017 THALES GLOBAL SERVICES. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -25,6 +25,7 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.sirius.business.api.query.ResourceQuery; import org.eclipse.sirius.business.api.session.Session; import org.eclipse.sirius.business.api.session.factory.SessionFactory; import org.eclipse.sirius.business.internal.movida.Movida; @@ -33,6 +34,7 @@ import org.eclipse.sirius.business.internal.movida.registry.ViewpointURIConverte import org.eclipse.sirius.business.internal.session.danalysis.DAnalysisSessionImpl; import org.eclipse.sirius.common.tools.api.editing.EditingDomainFactoryService; import org.eclipse.sirius.common.tools.api.resource.ResourceSetFactory; +import org.eclipse.sirius.tools.internal.resource.InMemoryResourceImpl; import org.eclipse.sirius.tools.internal.resource.ResourceSetUtil; import org.eclipse.sirius.viewpoint.DAnalysis; import org.eclipse.sirius.viewpoint.Messages; @@ -140,6 +142,10 @@ public final class SessionFactoryImpl implements SessionFactory { try { monitor.beginTask(Messages.SessionFactoryImpl_sessionCreation, 2); Resource sessionModelResource = new ResourceSetImpl().createResource(sessionResourceURI); + ResourceQuery resourceQuery = new ResourceQuery(sessionModelResource); + if (!(resourceQuery.isRepresentationsResource() || sessionModelResource instanceof InMemoryResourceImpl)) { + throw new IllegalArgumentException(Messages.SessionFactoryImpl_ResourceTypeErrorMsg); + } DAnalysis analysis = ViewpointFactory.eINSTANCE.createDAnalysis(); sessionModelResource.getContents().add(analysis); try { diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/viewpoint/Messages.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/viewpoint/Messages.java index 225b926947..f66f5d0cc9 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/viewpoint/Messages.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/viewpoint/Messages.java @@ -487,6 +487,9 @@ public final class Messages { public static String SelectionWizardDescriptionImpl_title; @TranslatableMessage + public static String SessionFactoryImpl_ResourceTypeErrorMsg; + + @TranslatableMessage public static String SessionFactoryImpl_EmptyContentErrorMsg; @TranslatableMessage |
