/******************************************************************************* * <copyright> * * Copyright (c) 2005, 2010 SAP AG. * 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: * SAP AG - initial API, implementation and documentation * * </copyright> * *******************************************************************************/ package org.eclipse.graphiti.tests.cases; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EcoreFactory; import org.eclipse.emf.ecore.resource.impl.ResourceImpl; import org.eclipse.graphiti.mm.Property; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import org.eclipse.graphiti.mm.pictograms.PictogramLink; import org.eclipse.graphiti.mm.pictograms.PictogramsFactory; import org.eclipse.graphiti.mm.pictograms.Shape; import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.services.ILinkService; import org.eclipse.graphiti.tests.reuse.GFAbstractTestCase; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; /** * */ public class LinkServiceTest extends GFAbstractTestCase { // Fixture private Diagram d; private Shape s1; private static String PROPERTY_VALUE_1 = "value1"; public static ILinkService linkService = Graphiti.getLinkService(); @BeforeClass public static void prepareClass() { } @Before public void initializeTest() { d = Graphiti.getPeCreateService().createDiagram("tutorial", "test", true); assertNotNull(d); s1 = Graphiti.getPeCreateService().createShape(d, true); s1.setGraphicsAlgorithm(Graphiti.getGaCreateService().createRectangle(d)); assertNotNull(s1); ResourceImpl resource = new ResourceImpl(); resource.getContents().add(d); } @Test public void getBusinessObjectForLinkedPictogramElement() { EClass bo = EcoreFactory.eINSTANCE.createEClass(); d.eResource().getContents().add(bo); PictogramLink link = createOrGetPictogramLink(s1); link.getBusinessObjects().add(bo); EObject linkedBo = linkService.getBusinessObjectForLinkedPictogramElement(s1); assertNotNull(linkedBo); assertEquals(bo, linkedBo); } @Test public void getAllBusinessObjectsForLinkedPictogramElement() { PictogramLink link = createOrGetPictogramLink(s1); EClass bo1 = EcoreFactory.eINSTANCE.createEClass(); d.eResource().getContents().add(bo1); link.getBusinessObjects().add(bo1); EClass bo2 = EcoreFactory.eINSTANCE.createEClass(); d.eResource().getContents().add(bo2); link.getBusinessObjects().add(bo2); EObject linkedBos[] = linkService.getAllBusinessObjectsForLinkedPictogramElement(s1); assertEquals(2, linkedBos.length); List<EObject> boList = Arrays.asList(linkedBos); assertTrue(boList.contains(bo1)); assertTrue(boList.contains(bo2)); } @Test public void linkProperty() { // hasLinkProperty() // setLinkProperty() // getLinkProperty() boolean hasLinkProperty = linkService.hasLinkProperty(s1, PROPERTY_VALUE_1); assertFalse(hasLinkProperty); Property linkProperty = linkService.getLinkProperty(s1); assertNull(linkProperty); linkService.setLinkProperty(s1, PROPERTY_VALUE_1); hasLinkProperty = linkService.hasLinkProperty(s1, PROPERTY_VALUE_1); assertTrue(hasLinkProperty); linkProperty = linkService.getLinkProperty(s1); assertNotNull(linkProperty); String value = linkProperty.getValue(); assertEquals(PROPERTY_VALUE_1, value); } @Test public void getPictogramElements() { Shape s1a = Graphiti.getPeCreateService().createShape(d, true); Shape s2a = Graphiti.getPeCreateService().createShape(d, true); Shape s3i = Graphiti.getPeCreateService().createShape(d, false); EClass bo1 = EcoreFactory.eINSTANCE.createEClass(); bo1.setName("bo1"); d.eResource().getContents().add(bo1); EClass bo2 = EcoreFactory.eINSTANCE.createEClass(); bo2.setName("bo2"); d.eResource().getContents().add(bo2); EClass bo3 = EcoreFactory.eINSTANCE.createEClass(); bo3.setName("bo3"); d.eResource().getContents().add(bo3); List<EObject> boList = new ArrayList<EObject>(); boList.add(bo1); List<PictogramElement> pes = linkService.getPictogramElements(d, boList, false); assertTrue(pes.isEmpty()); link(s3i, bo1); pes = linkService.getPictogramElements(d, boList, true); assertTrue(pes.isEmpty()); pes = linkService.getPictogramElements(d, boList, false); assertFalse(pes.isEmpty()); assertEquals(s3i, pes.get(0)); link(s1a, bo1); link(s2a, bo2); link(s2a, bo3); pes = linkService.getPictogramElements(d, boList, true); assertFalse(pes.isEmpty()); assertEquals(s1a, pes.get(0)); pes = linkService.getPictogramElements(d, bo1); assertTrue(pes.size() == 2); assertTrue(pes.contains(s1a)); assertTrue(pes.contains(s3i)); pes = linkService.getPictogramElements(d, bo3); assertTrue(pes.size() == 1); assertTrue(pes.contains(s2a)); } private PictogramLink createOrGetPictogramLink(PictogramElement pe) { PictogramLink link = pe.getLink(); if (link == null) { link = PictogramsFactory.eINSTANCE.createPictogramLink(); link.setPictogramElement(pe); d.getPictogramLinks().add(link); } return link; } private void link(PictogramElement pe, EObject bo) { PictogramLink link = createOrGetPictogramLink(pe); link.getBusinessObjects().add(bo); } }