### Eclipse Workspace Patch 1.0 #P org.eclipse.gmf.tests Index: src/org/eclipse/gmf/tests/gen/StandalonePluginConverterTest.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.gmf/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/StandalonePluginConverterTest.java,v retrieving revision 1.2 diff -u -r1.2 StandalonePluginConverterTest.java --- src/org/eclipse/gmf/tests/gen/StandalonePluginConverterTest.java 10 Apr 2006 13:28:17 -0000 1.2 +++ src/org/eclipse/gmf/tests/gen/StandalonePluginConverterTest.java 18 Apr 2006 21:16:08 -0000 @@ -13,21 +13,40 @@ package org.eclipse.gmf.tests.gen; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IStatus; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.impl.ResourceImpl; +import org.eclipse.gmf.gmfgraph.Canvas; +import org.eclipse.gmf.gmfgraph.Child; +import org.eclipse.gmf.gmfgraph.Compartment; +import org.eclipse.gmf.gmfgraph.Connection; +import org.eclipse.gmf.gmfgraph.ConnectionFigure; import org.eclipse.gmf.gmfgraph.CustomFigure; +import org.eclipse.gmf.gmfgraph.DiagramElement; +import org.eclipse.gmf.gmfgraph.DiagramLabel; import org.eclipse.gmf.gmfgraph.Figure; import org.eclipse.gmf.gmfgraph.FigureGallery; import org.eclipse.gmf.gmfgraph.GMFGraphFactory; +import org.eclipse.gmf.gmfgraph.Label; +import org.eclipse.gmf.gmfgraph.LabeledContainer; +import org.eclipse.gmf.gmfgraph.Node; +import org.eclipse.gmf.gmfgraph.Rectangle; import org.eclipse.gmf.gmfgraph.util.RuntimeFQNSwitch; import org.eclipse.gmf.graphdef.codegen.StandaloneGenerator; +import org.eclipse.gmf.graphdef.codegen.StandaloneGenerator.GenerationInfo; import org.eclipse.gmf.internal.graphdef.codegen.StandaloneGalleryConverter; public class StandalonePluginConverterTest extends FigureCodegenTestBase { + private static final String CUSTOM_FIGURES_PAKKAGE = "custom.figures.pakkage"; + public StandalonePluginConverterTest(String name) { super(name); } @@ -43,11 +62,8 @@ gallery.getFigures().addAll(Arrays.asList(originals)); final String standalonePlugin = "org.eclipse.gmf.tests.generated.custom.figures.t" + System.currentTimeMillis(); - final String customFiguresPackage = "custom.figures.pakkage"; - StandaloneGenerator.ConfigImpl config = new StandaloneGenerator.ConfigImpl(standalonePlugin, customFiguresPackage, false); - StandaloneGenerator generator = new StandaloneGenerator(gallery, config, new RuntimeFQNSwitch()); - generator.run(); - assertTrue(generator.getRunStatus().getSeverity() < IStatus.ERROR); + StandaloneGenerator.ConfigImpl config = new StandaloneGenerator.ConfigImpl(standalonePlugin, CUSTOM_FIGURES_PAKKAGE, false); + StandaloneGenerator generator = generateStandalone(gallery, config); StandaloneGenerator.GenerationInfo info = generator.getGenerationInfo(); for (int i = 0; i < originals.length; i++){ @@ -66,7 +82,7 @@ CustomFigure nextCustom = (CustomFigure)next; assertNotNull(nextCustom.getName()); assertEquals(standalonePlugin, nextCustom.getBundleName()); - assertTrue(nextCustom.getQualifiedClassName().startsWith(customFiguresPackage + ".")); + assertTrue(nextCustom.getQualifiedClassName().startsWith(CUSTOM_FIGURES_PAKKAGE + ".")); } installPlugin(standalonePlugin); @@ -92,6 +108,125 @@ nextCheck.checkFigure(nextCheck.instantiateFigure(nextClass)); } } + + public void testMirroredDiagramElements(){ + Canvas canvas = GMFGraphFactory.eINSTANCE.createCanvas(); + FigureGallery gallery = GMFGraphFactory.eINSTANCE.createFigureGallery(); + canvas.getFigures().add(gallery); + Label label = GMFGraphFactory.eINSTANCE.createLabel(); + label.setName("GraphLabel"); + ConnectionFigure connection = GMFGraphFactory.eINSTANCE.createPolylineConnection(); + connection.setName("GraphConnection"); + Rectangle rectangle = GMFGraphFactory.eINSTANCE.createRectangle(); + rectangle.setName("GraphRectangle"); + LabeledContainer labeledContainer = GMFGraphFactory.eINSTANCE.createLabeledContainer(); + labeledContainer.setName("GraphLabeledContainer"); + + gallery.getFigures().addAll(Arrays.asList(new Figure[] { + label, + connection, + rectangle, + labeledContainer, + })); + + Node node = GMFGraphFactory.eINSTANCE.createNode(); + node.setName("DiagramNode"); + node.setFigure(rectangle); + + DiagramLabel diagramLabel = GMFGraphFactory.eINSTANCE.createDiagramLabel(); + diagramLabel.setName("DiagramLabel"); + diagramLabel.setFigure(label); + + Child child = GMFGraphFactory.eINSTANCE.createChild(); + child.setName("DiagramChild"); + child.setFigure(rectangle); + + Connection diagramConnection = GMFGraphFactory.eINSTANCE.createConnection(); + diagramConnection.setName("DiagramConnection"); + diagramConnection.setFigure(connection); + + Compartment compartment = GMFGraphFactory.eINSTANCE.createCompartment(); + compartment.setName("DiagramCompartment"); + compartment.setNeedsTitle(!compartment.isNeedsTitle()); + compartment.setCollapsible(!compartment.isCollapsible()); + compartment.setFigure(labeledContainer); + + canvas.getNodes().add(node); + canvas.getChildren().add(child); + canvas.getLabels().add(diagramLabel); + canvas.getConnections().add(diagramConnection); + canvas.getCompartments().add(compartment); + + Resource resource = confineInResource(canvas); + + final String standalonePlugin = "org.eclipse.gmf.tests.generated.mirrored.diagram.elements.t" + System.currentTimeMillis(); + StandaloneGenerator.ConfigImpl config = new StandaloneGenerator.ConfigImpl(standalonePlugin, CUSTOM_FIGURES_PAKKAGE, false); + StandaloneGenerator generator = generateStandalone(gallery, config); + StandaloneGalleryConverter galleryConverter = new StandaloneGalleryConverter(generator.getGenerationInfo()); + galleryConverter.convertFigureGallery(); + Canvas mirroredCanvas = galleryConverter.mirrorDiagramElements(Collections.singletonList(resource)); + + class Checker { + private final GenerationInfo myGenerationInfo; + + public Checker(GenerationInfo generationInfo){ + myGenerationInfo = generationInfo; + } + + public void check(List originalsByType, List mirroredByType){ + assertEquals(originalsByType.size(), mirroredByType.size()); + Iterator allOriginals = originalsByType.iterator(); + Iterator allMirrored = mirroredByType.iterator(); + while (allOriginals.hasNext() || allMirrored.hasNext()){ + DiagramElement nextOriginal = (DiagramElement)allOriginals.next(); + DiagramElement nextMirrored = (DiagramElement)allMirrored.next(); + check(nextOriginal, nextMirrored); + } + assertFalse(allOriginals.hasNext()); + assertFalse(allMirrored.hasNext()); + } + + public void check(DiagramElement original, DiagramElement mirrored){ + assertEquals(original.eClass().getClassifierID(), mirrored.eClass().getClassifierID()); + assertEquals(original.getName(), mirrored.getName()); + String expectedFQN = myGenerationInfo.getGeneratedClassFQN(original.getFigure()); + Figure actualFigure = mirrored.getFigure(); + assertNotNull(actualFigure); + assertTrue(actualFigure instanceof CustomFigure); + CustomFigure actual = (CustomFigure)actualFigure; + assertEquals(expectedFQN, actual.getQualifiedClassName()); + assertEquals(myGenerationInfo.getConfig().getPluginID(), actual.getBundleName()); + + if (original instanceof Compartment){ + Compartment originalCompartment = (Compartment)original; + Compartment mirroredCompartment = (Compartment)mirrored; + assertEquals(originalCompartment.isCollapsible(), mirroredCompartment.isCollapsible()); + assertEquals(originalCompartment.isNeedsTitle(), mirroredCompartment.isNeedsTitle()); + } + ///XXX do we need to check Facets??? + } + } + + Checker checker = new Checker(generator.getGenerationInfo()); + checker.check(canvas.getChildren(), mirroredCanvas.getChildren()); + checker.check(canvas.getNodes(), mirroredCanvas.getNodes()); + checker.check(canvas.getCompartments(), mirroredCanvas.getCompartments()); + checker.check(canvas.getConnections(), mirroredCanvas.getConnections()); + checker.check(canvas.getLabels(), mirroredCanvas.getLabels()); + } + + private StandaloneGenerator generateStandalone(FigureGallery gallery, StandaloneGenerator.Config config) { + StandaloneGenerator generator = new StandaloneGenerator(gallery, config, new RuntimeFQNSwitch()); + generator.run(); + assertTrue(generator.getRunStatus().getSeverity() < IStatus.ERROR); + return generator; + } + + private Resource confineInResource(Canvas canvas) { + Resource result = new ResourceImpl(URI.createURI("uri://org.eclipse.gmf/tests/StandalonePluginConverterTest")); + result.getContents().add(canvas); + return result; + } private static Class searchForFigureName(GeneratedClassData[] classes, String expectedName){ Class result = null; #P org.eclipse.gmf.graphdef.codegen Index: src/org/eclipse/gmf/internal/graphdef/codegen/StandaloneGalleryConverter.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.gmf/plugins/org.eclipse.gmf.graphdef.codegen/src/org/eclipse/gmf/internal/graphdef/codegen/StandaloneGalleryConverter.java,v retrieving revision 1.1 diff -u -r1.1 StandaloneGalleryConverter.java --- src/org/eclipse/gmf/internal/graphdef/codegen/StandaloneGalleryConverter.java 10 Apr 2006 13:28:14 -0000 1.1 +++ src/org/eclipse/gmf/internal/graphdef/codegen/StandaloneGalleryConverter.java 18 Apr 2006 21:16:09 -0000 @@ -74,11 +74,13 @@ Collection compartments = myDiagramElementsCopier.copyAll(original.getCompartments()); Collection labels = myDiagramElementsCopier.copyAll(original.getLabels()); Collection nodes = myDiagramElementsCopier.copyAll(original.getNodes()); + Collection connections = myDiagramElementsCopier.copyAll(original.getConnections()); result.getChildren().addAll(children); result.getCompartments().addAll(compartments); result.getLabels().addAll(labels); result.getNodes().addAll(nodes); + result.getConnections().addAll(connections); } } }