/******************************************************************************* * Copyright (c) 2011, 2012 Montages A.G. * 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Guillaume Hillairet (Montages A.G.) : initial implementation *******************************************************************************/ package org.eclipse.gmf.tests.tr; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; 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.gmf.codegen.gmfgen.GenEditorGenerator; import org.eclipse.gmf.codegen.gmfgen.GenTopLevelNode; import org.eclipse.gmf.gmfgraph.Canvas; import org.eclipse.gmf.internal.bridge.StatefulVisualIdentifierDispencer; import org.eclipse.gmf.mappings.CanvasMapping; import org.eclipse.gmf.mappings.GMFMapFactory; import org.eclipse.gmf.mappings.Mapping; import org.eclipse.gmf.mappings.NodeMapping; import org.eclipse.gmf.mappings.TopNodeReference; import org.eclipse.gmf.tests.ConfiguredTestCase; import org.eclipse.gmf.tests.tr.TransformationTestSupport.Transformation; public class QvtGenModelTransformerVisualIDWithTraceTest extends ConfiguredTestCase { protected static String testFolder = "platform:/plugin/org.eclipse.gmf.tests/models/tests"; //$NON-NLS-1$ public QvtGenModelTransformerVisualIDWithTraceTest(String name) { super(name); } private Mapping mapping; private GenModel genModel; private Canvas canvas; private ResourceSet resoureSet; private IProject myProject; private URI projectURI; public void setUp() throws Exception { super.setUp(); myProject = createProject(); projectURI = URI.createURI(myProject.getFullPath().toString()); resoureSet = new ResourceSetImpl(); Resource genModelResource = resoureSet.createResource(URI.createURI(testFolder).appendSegment("test.genmodel")); genModelResource.load(null); genModel = (GenModel) genModelResource.getContents().get(0); Resource graphModelResource = resoureSet.createResource(URI.createURI(testFolder).appendSegment("test.gmfgraph")); graphModelResource.load(null); canvas = (Canvas) graphModelResource.getContents().get(0); mapping = loadMapping(); } public void tearDown() throws Exception { deleteProject(); myProject = null; super.tearDown(); } protected Mapping loadMapping() { Mapping mapping = GMFMapFactory.eINSTANCE.createMapping(); CanvasMapping cmap = GMFMapFactory.eINSTANCE.createCanvasMapping(); cmap.setDiagramCanvas(getCanvas()); mapping.setDiagram(cmap); EPackage ePackage = getGenModel().getGenPackages().get(0).getEcorePackage(); EClass container = (EClass) ePackage.getEClassifier("UltimateContainer"); EReference containment = (EReference) container.getEStructuralFeature("all"); EClass srcA = (EClass) ePackage.getEClassifier("NodeSrcA"); cmap.setDomainMetaElement(container); cmap.setDomainModel(ePackage); TopNodeReference top1 = GMFMapFactory.eINSTANCE.createTopNodeReference(); top1.setContainmentFeature(containment); NodeMapping nmap = GMFMapFactory.eINSTANCE.createNodeMapping(); nmap.setDomainMetaElement(srcA); nmap.setDiagramNode(getCanvas().getNodes().get(0)); top1.setOwnedChild(nmap); mapping.getNodes().add(top1); return mapping; } private GenModel getGenModel() { return genModel; } private Canvas getCanvas() { return canvas; } private Mapping getMapping() { return mapping; } protected TopNodeReference createTopNode(String name) { TopNodeReference existing = getMapping().getNodes().get(0); EPackage ePackage = existing.getOwnedChild().getDomainMetaElement().getEPackage(); EClass eClass = (EClass) ePackage.getEClassifier(name); TopNodeReference node = GMFMapFactory.eINSTANCE.createTopNodeReference(); node.setContainmentFeature(existing.getContainmentFeature()); NodeMapping nmap = GMFMapFactory.eINSTANCE.createNodeMapping(); nmap.setDomainMetaElement(eClass); nmap.setDiagramNode(existing.getChild().getDiagramNode()); node.setOwnedChild(nmap); return node; } public void testVisualIDWithNoTrace() { Transformation java = TransformationTestSupport.getJavaTransformation(getGenModel(), getMapping(), false); Transformation qvt = TransformationTestSupport.getQvtTransformation(getGenModel(), getMapping(), false); GenEditorGenerator expected = java.execute(projectURI.appendSegment("model.java.gmfgen")); GenEditorGenerator actual = qvt.execute(projectURI.appendSegment("model.java.gmfgen")); EList<GenTopLevelNode> expNodes = expected.getDiagram().getTopLevelNodes(); EList<GenTopLevelNode> actNodes = actual.getDiagram().getTopLevelNodes(); assertEquals(1, expNodes.size()); assertEquals(expNodes.size(), actNodes.size()); assertEquals(2001, expNodes.get(0).getVisualID()); for (int i=0;i<expNodes.size();i++){ GenTopLevelNode expNode = expNodes.get(i); GenTopLevelNode actNode = actNodes.get(i); assertEquals(expNode.getVisualID(), actNode.getVisualID()); } ((StatefulVisualIdentifierDispencer) java.getDispencer()).saveState(); ((StatefulVisualIdentifierDispencer) qvt.getDispencer()).saveState(); TopNodeReference node = createTopNode("NodeTargetB"); getMapping().getNodes().add(node); expected = java.execute(projectURI.appendSegment("model.java.gmfgen")); actual = qvt.execute(projectURI.appendSegment("model.java.gmfgen")); expNodes = expected.getDiagram().getTopLevelNodes(); actNodes = actual.getDiagram().getTopLevelNodes(); assertEquals(2, expNodes.size()); assertEquals(expNodes.size(), actNodes.size()); assertEquals(2001, expNodes.get(0).getVisualID()); assertEquals(2002, expNodes.get(1).getVisualID()); for (int i=0;i<expNodes.size();i++){ GenTopLevelNode expNode = expNodes.get(i); GenTopLevelNode actNode = actNodes.get(i); assertEquals(expNode.getVisualID(), actNode.getVisualID()); } node = createTopNode("NodeTargetC"); getMapping().getNodes().add(0, node); ((StatefulVisualIdentifierDispencer) java.getDispencer()).saveState(); ((StatefulVisualIdentifierDispencer) qvt.getDispencer()).saveState(); expected = java.execute(projectURI.appendSegment("model.java.gmfgen")); actual = qvt.execute(projectURI.appendSegment("model.java.gmfgen")); expNodes = expected.getDiagram().getTopLevelNodes(); actNodes = actual.getDiagram().getTopLevelNodes(); assertEquals(3, expNodes.size()); assertEquals(expNodes.size(), actNodes.size()); assertEquals(2003, expNodes.get(0).getVisualID()); assertEquals(2001, expNodes.get(1).getVisualID()); assertEquals(2002, expNodes.get(2).getVisualID()); for (int i=0;i<expNodes.size();i++){ GenTopLevelNode expNode = expNodes.get(i); GenTopLevelNode actNode = actNodes.get(i); assertEquals(expNode.getVisualID(), actNode.getVisualID()); } ((StatefulVisualIdentifierDispencer) java.getDispencer()).saveState(); ((StatefulVisualIdentifierDispencer) qvt.getDispencer()).saveState(); } protected IProject createProject() { String projectName = "TransformToGenModelOperationTest_" + String.valueOf(System.currentTimeMillis()); //$NON-NLS-1$ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); assertFalse("Project with this name already present in the workspace: " + projectName, project.exists()); try { project.create(new NullProgressMonitor()); project.open(new NullProgressMonitor()); } catch (CoreException e) { fail(e.getMessage()); } assertTrue("Project was not created: " + projectName, project.exists()); return project; } protected void deleteProject() throws CoreException { if (getProject() != null) { if (getProject().isOpen()) { getProject().close(new NullProgressMonitor()); } if (getProject().exists()) { getProject().delete(true, new NullProgressMonitor()); } } } protected IProject getProject() { return myProject; } }