Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjmallet2017-08-02 17:08:16 +0000
committerMaxime Porhel2017-08-16 09:05:30 +0000
commitab7bcb88e97bab8abd1eaf8c758aa86b93275dbf (patch)
tree2e1ffaa3bf4e1785d7df9d160b2c005c59bd72ca
parent7affc3e2877e785690d7b3020e2e792d0d90f74f (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/DAnalysisSessionTests.java11
-rw-r--r--plugins/org.eclipse.sirius/plugin.properties1
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/SessionFactoryImpl.java8
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/viewpoint/Messages.java3
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

Back to the top