blob: 918d68c0714d8390ecb649e15caea9c2ca2d106e [file] [log] [blame]
/*
* Copyright (c) 2010-2013, 2015 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.common;
import org.eclipse.emf.cdo.dawn.examples.acore.ACoreRoot;
import org.eclipse.emf.cdo.dawn.examples.acore.AcorePackage;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.mango.MangoValue;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.common.util.URI;
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.ecore.xmi.impl.XMIResourceFactoryImpl;
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.NotationPackage;
import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
* @author Martin Fluegge
*/
public class GMFTest extends AbstractCDOTest
{
public void testDiagram() throws Exception
{
CDOSession session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
diagram.setName("MyDiagram");
diagram.setVisible(true);
diagram.setMutable(false);
resource.getContents().add(diagram);
transaction.commit();
}
session.close();
session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/test1");
Diagram diagram = (Diagram)resource.getContents().get(0);
assertEquals("MyDiagram", diagram.getName());
assertEquals(true, diagram.isVisible());
assertEquals(false, diagram.isMutable());
}
}
public void testSimpleNode() throws Exception
{
CDOSession session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Node node = createExampleNode();
MangoValue mangoValue = getMangoFactory().createMangoValue();
node.setElement(mangoValue);
resource.getContents().add(node);
resource.getContents().add(mangoValue);
transaction.commit();
}
session.close();
session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/test1");
Node node = (Node)resource.getContents().get(0);
assertEquals(true, node.isVisible());
assertEquals(false, node.isMutable());
assertInstanceOf(Bounds.class, node.getLayoutConstraint());
Bounds bounds = (Bounds)node.getLayoutConstraint();
assertEquals(1503, bounds.getHeight());
assertEquals(1979, bounds.getWidth());
assertEquals(777, bounds.getX());
assertEquals(888, bounds.getY());
assertInstanceOf(MangoValue.class, node.getElement());
}
}
private Node createExampleNode()
{
Node node = NotationFactory.eINSTANCE.createNode();
Bounds bounds = NotationFactory.eINSTANCE.createBounds();
bounds.setHeight(1503);
bounds.setWidth(1979);
bounds.setX(777);
bounds.setY(888);
node.setVisible(true);
node.setMutable(false);
node.setLayoutConstraint(bounds);
return node;
}
public void testSimpleEdge() throws Exception
{
CDOSession session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Edge edge = createExampleEdge();
resource.getContents().add(edge);
transaction.commit();
}
session.close();
session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/test1");
Edge edge = (Edge)resource.getContents().get(0);
assertEquals(true, edge.isVisible());
assertEquals(false, edge.isMutable());
assertEquals(10, ((RelativeBendpoints)edge.getBendpoints()).getPoints().size());
for (int i = 0; i < 10; i++)
{
assertInstanceOf(RelativeBendpoint.class, ((RelativeBendpoints)edge.getBendpoints()).getPoints().get(i));
}
}
}
private Edge createExampleEdge()
{
Edge edge = NotationFactory.eINSTANCE.createEdge();
edge.setVisible(true);
edge.setMutable(false);
RelativeBendpoints bendpoints = NotationFactory.eINSTANCE.createRelativeBendpoints();
edge.setBendpoints(bendpoints);
List<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>();
for (int i = 0; i < 10; i++)
{
RelativeBendpoint bendPoint = new RelativeBendpoint(1, 2, 3, 4);
points.add(bendPoint);
}
bendpoints.setPoints(points);
edge.setBendpoints(bendpoints);
return edge;
}
public void testSimpleDiagramWithViews() throws Exception
{
CDOSession session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
diagram.setName("MyDiagram");
int numberOfNodes = 10;
for (int i = 0; i < numberOfNodes; i++)
{
// Node node = createExampleNode();
// nodes.add(node);
diagram.createChild(NotationPackage.eINSTANCE.getNode());
}
for (int i = 0; i < 5; i++)
{
Node nodeA = (Node)diagram.getChildren().get(i);
Node nodeB = (Node)diagram.getChildren().get(numberOfNodes - 1 - i);
Edge edge = diagram.createEdge(NotationPackage.eINSTANCE.getEdge());
edge.setSource(nodeA);
edge.setTarget(nodeB);
System.out.println("break");
}
resource.getContents().add(diagram);
transaction.commit();
}
session.close();
session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/test1");
Diagram diagram = (Diagram)resource.getContents().get(0);
assertEquals(true, diagram.isVisible());
assertEquals(false, diagram.isMutable());
assertEquals(10, diagram.getChildren().size());
assertEquals(5, diagram.getEdges().size());
}
}
public void testDiagramFromXMIResource() throws Exception
{
CDOSession session = openSession();
{
ResourceSet resourceSet = new ResourceSetImpl();
AcorePackage.eINSTANCE.eClass();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("acore_diagram",
new XMIResourceFactoryImpl());
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("acore", new XMIResourceFactoryImpl());
System.out.println(GMFTest.class.getResource("."));
System.out.println(GMFTest.class.getResource("/"));
URL resourceURI = GMFTest.class.getResource("");
String resourcePath = resourceURI.toString().substring(0, resourceURI.toString().lastIndexOf("/bin"));
System.out.println(resourcePath);
// Resource emfResource = resourceSet.getResource(URI.createURI(resourcePath + "/testdata/simple.acore"), true);
Resource gmfResource = resourceSet.getResource(URI.createURI(resourcePath + "/testdata/simple.acore_diagram"),
true);
Diagram diagram = (Diagram)gmfResource.getContents().get(0);
ACoreRoot classDiagram = (ACoreRoot)diagram.getElement();
for (Object o : diagram.getPersistedChildren())
{
View view = (View)o;
System.out.println(view.getElement());
}
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
resource.getContents().add(classDiagram);
resource.getContents().add(diagram);
transaction.commit();
}
session.close();
session = openSession();
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/test1");
Diagram reloadedDiagram = (Diagram)resource.getContents().get(1);
assertInstanceOf(ACoreRoot.class, reloadedDiagram.getElement());
assertEquals(true, reloadedDiagram.isVisible());
assertEquals(false, reloadedDiagram.isMutable());
assertEquals(3, reloadedDiagram.getChildren().size());
assertEquals(2, reloadedDiagram.getEdges().size());
for (Object o : reloadedDiagram.getEdges())
{
Edge edge = (Edge)o;
RelativeBendpoints bendpoints = (RelativeBendpoints)edge.getBendpoints();
assertNotNull(bendpoints);
assertEquals(true, bendpoints.getPoints().size() > 0);
}
}
}
}