/* * Copyright (c) 2010-2013 Eike Stepper (Berlin, Germany) and others. * 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: * Martin Fluegge - initial API and implementation */ package org.eclipse.emf.cdo.dawn.tests.ui.gmf; import org.eclipse.emf.cdo.dawn.examples.acore.AClass; import org.eclipse.emf.cdo.dawn.examples.acore.ACoreRoot; import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassAggregationsEditPart; import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassAssociationsEditPart; import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassCompositionsEditPart; import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassImplementedInterfacesEditPart; import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassSubClassesEditPart; import org.eclipse.emf.cdo.dawn.tests.AbstractDawnGEFTest; import org.eclipse.emf.cdo.dawn.tests.ui.util.DawnAcoreTestUtil; import org.eclipse.emf.cdo.dawn.tests.ui.util.DawnSWTBotUtil; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gef.EditPart; import org.eclipse.gmf.runtime.notation.Bounds; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.Edge; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.NotationFactory; import org.eclipse.gmf.runtime.notation.RelativeBendpoints; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint; import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditPart; import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditor; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.List; /** * @author Martin Fluegge */ @RunWith(SWTBotJunit4ClassRunner.class) public class MultipleResourcesTest extends AbstractDawnGEFTest { @Test public void testRemotelyRenameAClass() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); editor.save(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 250, 100, "B", getBot(), editor); editor.save(); Diagram diagram = (Diagram)resource2.getContents().get(0); assertEquals(2, diagram.getChildren().size()); View nodeB = (View)diagram.getChildren().get(1); AClass classB = (AClass)nodeB.getElement(); assertEquals("B", classB.getName()); classB.setName("C"); transaction.commit(); List<SWTBotGefEditPart> aClassEditParts = DawnAcoreTestUtil.getAClassEditParts(editor); SWTBotGefEditPart classBEditpart = aClassEditParts.get(1); AClass editorClassB = (AClass)((View)classBEditpart.part().getModel()).getElement(); assertEquals("C", editorClassB.getName()); } @Test public void testRemotelyMoveNode() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); editor.save(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); assertEquals(1, diagram.getChildren().size()); Node nodeA = (Node)diagram.getChildren().get(0); Bounds bounds = (Bounds)nodeA.getLayoutConstraint(); bounds.setHeight(40); bounds.setWidth(30); bounds.setX(200); bounds.setY(250); transaction.commit(); sleep(500); List<SWTBotGefEditPart> aClassEditParts = DawnAcoreTestUtil.getAClassEditParts(editor); SWTBotGefEditPart classBEditpart = aClassEditParts.get(0); Node editorNodeA = (Node)classBEditpart.part().getModel(); Bounds editorBounds = (Bounds)editorNodeA.getLayoutConstraint(); assertEquals(bounds.getX(), editorBounds.getX()); assertEquals(bounds.getY(), editorBounds.getY()); assertEquals(bounds.getWidth(), editorBounds.getWidth()); assertEquals(bounds.getHeight(), editorBounds.getHeight()); } @Test public void testCreateNodeRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); editor.save(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); ACoreRoot aCoreRoot = (ACoreRoot)diagram.getElement(); AClass newAClass = AcoreFactory.eINSTANCE.createAClass(); newAClass.setName("A-Team"); aCoreRoot.getClasses().add(newAClass); Node newNode = DawnAcoreTestUtil.createNewAClassRemote(diagram, newAClass); newNode.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds()); Bounds bounds = (Bounds)newNode.getLayoutConstraint(); bounds.setHeight(40); bounds.setWidth(30); bounds.setX(200); bounds.setY(250); newNode.setElement(newAClass); assertEquals(1, diagram.getChildren().size()); assertEquals(1, aCoreRoot.getClasses().size()); transaction.commit(); sleep(1000); List<SWTBotGefEditPart> aClassEditParts = DawnAcoreTestUtil.getAClassEditParts(editor); assertEquals(1, aClassEditParts.size()); SWTBotGefEditPart classBEditpart = aClassEditParts.get(0); Node editorNewNode = (Node)classBEditpart.part().getModel(); AClass editorNewAclass = (AClass)editorNewNode.getElement(); assertEquals("A-Team", editorNewAclass.getName()); Bounds editorBounds = (Bounds)editorNewNode.getLayoutConstraint(); assertEquals(bounds.getX(), editorBounds.getX()); assertEquals(bounds.getY(), editorBounds.getY()); assertEquals(bounds.getWidth(), editorBounds.getWidth()); assertEquals(bounds.getHeight(), editorBounds.getHeight()); } @Test public void testAddNodeRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); editor.save(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); Node newNode = EcoreUtil.copy((Node)diagram.getChildren().get(0));// diagram.createChild(NotationPackage.eINSTANCE.getNode()); newNode.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds()); Bounds bounds = (Bounds)newNode.getLayoutConstraint(); bounds.setHeight(40); bounds.setWidth(30); bounds.setX(200); bounds.setY(250); AClass newAClass = AcoreFactory.eINSTANCE.createAClass(); newAClass.setName("A-Team"); newNode.setElement(newAClass); ACoreRoot aCoreRoot = (ACoreRoot)diagram.getElement(); aCoreRoot.getClasses().add(newAClass); diagram.insertChild(newNode); assertEquals(2, diagram.getChildren().size()); assertEquals(2, aCoreRoot.getClasses().size()); transaction.commit(); sleep(1000); List<SWTBotGefEditPart> aClassEditParts = DawnAcoreTestUtil.getAClassEditParts(editor); assertEquals(2, aClassEditParts.size()); SWTBotGefEditPart classBEditpart = aClassEditParts.get(1); Node editorNewNode = (Node)classBEditpart.part().getModel(); AClass editorNewAclass = (AClass)editorNewNode.getElement(); assertEquals("A-Team", editorNewAclass.getName()); Bounds editorBounds = (Bounds)editorNewNode.getLayoutConstraint(); assertEquals(bounds.getX(), editorBounds.getX()); assertEquals(bounds.getY(), editorBounds.getY()); assertEquals(bounds.getWidth(), editorBounds.getWidth()); assertEquals(bounds.getHeight(), editorBounds.getHeight()); } @Test public void testModifyConnectionRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 200, 200, "B", getBot(), editor); List<SWTBotGefEditPart> aClassEditParts = DawnAcoreTestUtil.getAClassEditParts(editor); Node nodeA = (Node)aClassEditParts.get(0).part().getModel(); Node nodeB = (Node)aClassEditParts.get(1).part().getModel(); createEdge(DawnAcoreTestUtil.CONNECTION_ASSOCIATION, nodeA, nodeB, editor); editor.save(); { List<SWTBotGefEditPart> aaClassAssociationsEditParts = DawnAcoreTestUtil.getAClassAssociationsEditParts(editor); assertEquals(1, aaClassAssociationsEditParts.size()); EditPart part = aaClassAssociationsEditParts.get(0).part(); Edge editorEdge = (Edge)part.getModel(); assertEquals(2, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); List<?> edges = diagram.getEdges(); assertEquals(1, edges.size()); Edge edge = (Edge)edges.get(0); RelativeBendpoint relativeBendpoint = new RelativeBendpoint(0, 100, -100, 0); RelativeBendpoints relativeBendpoints = (RelativeBendpoints)edge.getBendpoints(); @SuppressWarnings("unchecked") List<RelativeBendpoint> points = relativeBendpoints.getPoints(); List<RelativeBendpoint> newBendPoints = new ArrayList<RelativeBendpoint>(points); newBendPoints.add(1, relativeBendpoint); relativeBendpoints.setPoints(newBendPoints); transaction.commit(); sleep(1000); } List<SWTBotGefEditPart> aaClassAssociationsEditParts = DawnAcoreTestUtil.getAClassAssociationsEditParts(editor); assertEquals(1, aaClassAssociationsEditParts.size()); EditPart part = aaClassAssociationsEditParts.get(0).part(); Edge editorEdge = (Edge)part.getModel(); assertEquals(3, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } @Test public void testCreateAssociationConnectionRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 200, 200, "B", getBot(), editor); editor.save(); { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); Node nodeA = (Node)diagram.getChildren().get(0); Node nodeB = (Node)diagram.getChildren().get(1); List<RelativeBendpoint> newBendPoints = new ArrayList<RelativeBendpoint>(); RelativeBendpoint relativeBendpoint = new RelativeBendpoint(0, 100, -100, 0); newBendPoints.add(relativeBendpoint); Edge edge = DawnAcoreTestUtil.createNewAssociationRemote(nodeA, nodeB, newBendPoints); assertNotNull(edge); transaction.commit(); sleep(1000); } List<SWTBotGefEditPart> connectionEditParts = DawnSWTBotUtil.getAllConnections(editor); assertEquals(1, connectionEditParts.size()); EditPart part = connectionEditParts.get(0).part(); assertInstanceOf(AClassAssociationsEditPart.class, part); assertInstanceOf(Edge.class, part.getModel()); Edge editorEdge = (Edge)part.getModel(); assertEquals(3, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } @Test public void testCreateAggregationConnectionRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 200, 200, "B", getBot(), editor); editor.save(); { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); Node nodeA = (Node)diagram.getChildren().get(0); Node nodeB = (Node)diagram.getChildren().get(1); List<RelativeBendpoint> newBendPoints = new ArrayList<RelativeBendpoint>(); RelativeBendpoint relativeBendpoint = new RelativeBendpoint(0, 100, -100, 0); newBendPoints.add(relativeBendpoint); Edge edge = DawnAcoreTestUtil.createNewAggregationRemote(nodeA, nodeB, newBendPoints); assertNotNull(edge); transaction.commit(); sleep(1000); } List<SWTBotGefEditPart> connectionEditParts = DawnSWTBotUtil.getAllConnections(editor); assertEquals(1, connectionEditParts.size()); EditPart part = connectionEditParts.get(0).part(); assertInstanceOf(AClassAggregationsEditPart.class, part); assertInstanceOf(Edge.class, part.getModel()); Edge editorEdge = (Edge)part.getModel(); assertEquals(3, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } @Test public void testCreateCompositionConnectionRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 200, 200, "B", getBot(), editor); editor.save(); { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); Node nodeA = (Node)diagram.getChildren().get(0); Node nodeB = (Node)diagram.getChildren().get(1); List<RelativeBendpoint> newBendPoints = new ArrayList<RelativeBendpoint>(); RelativeBendpoint relativeBendpoint = new RelativeBendpoint(0, 100, -100, 0); newBendPoints.add(relativeBendpoint); Edge edge = DawnAcoreTestUtil.createNewCompositionRemote(nodeA, nodeB, newBendPoints); assertNotNull(edge); transaction.commit(); sleep(1000); } List<SWTBotGefEditPart> connectionEditParts = DawnSWTBotUtil.getAllConnections(editor); assertEquals(1, connectionEditParts.size()); EditPart part = connectionEditParts.get(0).part(); assertInstanceOf(AClassCompositionsEditPart.class, part); assertInstanceOf(Edge.class, part.getModel()); Edge editorEdge = (Edge)part.getModel(); assertEquals(3, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } @Test public void testCreateInheritanceConnectionRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 200, 200, "B", getBot(), editor); editor.save(); { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); Node nodeA = (Node)diagram.getChildren().get(0); Node nodeB = (Node)diagram.getChildren().get(1); List<RelativeBendpoint> newBendPoints = new ArrayList<RelativeBendpoint>(); RelativeBendpoint relativeBendpoint = new RelativeBendpoint(0, 100, -100, 0); newBendPoints.add(relativeBendpoint); Edge edge = DawnAcoreTestUtil.createNewInheritanceRelationRemote(nodeA, nodeB, newBendPoints); assertNotNull(edge); transaction.commit(); sleep(1000); } List<SWTBotGefEditPart> connectionEditParts = DawnSWTBotUtil.getAllConnections(editor); assertEquals(1, connectionEditParts.size()); EditPart part = connectionEditParts.get(0).part(); assertInstanceOf(AClassSubClassesEditPart.class, part); assertInstanceOf(Edge.class, part.getModel()); Edge editorEdge = (Edge)part.getModel(); assertEquals(3, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } @Test public void testCreateImplementsConnectionRemotely() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_INTERFACE, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 200, 200, "B", getBot(), editor); editor.save(); { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource2 = transaction.getResource("/default.acore_diagram"); Diagram diagram = (Diagram)resource2.getContents().get(0); Node nodeA = (Node)diagram.getChildren().get(0); Node nodeB = (Node)diagram.getChildren().get(1); List<RelativeBendpoint> newBendPoints = new ArrayList<RelativeBendpoint>(); RelativeBendpoint relativeBendpoint = new RelativeBendpoint(0, 100, -100, 0); newBendPoints.add(relativeBendpoint); Edge edge = DawnAcoreTestUtil.createNewImplementsRelationRemote(nodeA, nodeB, newBendPoints); assertNotNull(edge); transaction.commit(); sleep(1000); } List<SWTBotGefEditPart> connectionEditParts = DawnSWTBotUtil.getAllConnections(editor); assertEquals(1, connectionEditParts.size()); EditPart part = connectionEditParts.get(0).part(); assertInstanceOf(AClassImplementedInterfacesEditPart.class, part); assertInstanceOf(Edge.class, part.getModel()); Edge editorEdge = (Edge)part.getModel(); assertEquals(3, ((RelativeBendpoints)editorEdge.getBendpoints()).getPoints().size()); } }