/*
* Copyright (c) 2006 Borland Software Corporation
*
* 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:
* Dmitry Stadnik (Borland) - initial API and implementation
*/
package org.eclipse.gmf.tests.setup.annotated;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.gmf.gmfgraph.Canvas;
import org.eclipse.gmf.gmfgraph.ChildAccess;
import org.eclipse.gmf.gmfgraph.Compartment;
import org.eclipse.gmf.gmfgraph.Connection;
import org.eclipse.gmf.gmfgraph.DiagramElement;
import org.eclipse.gmf.gmfgraph.DiagramLabel;
import org.eclipse.gmf.gmfgraph.FigureDescriptor;
import org.eclipse.gmf.gmfgraph.FigureGallery;
import org.eclipse.gmf.gmfgraph.RealFigure;
import org.eclipse.gmf.gmfgraph.GMFGraphFactory;
import org.eclipse.gmf.gmfgraph.Label;
import org.eclipse.gmf.gmfgraph.Node;
import org.eclipse.gmf.gmfgraph.PolylineConnection;
import org.eclipse.gmf.gmfgraph.Rectangle;
import org.eclipse.gmf.tests.setup.DiaDefSetup;
import org.eclipse.gmf.tests.setup.DiaDefSource;
/**
* Creates graphical definition model from annotated domain model.
*
* @author dstadnik
*/
public class GraphDefASetup extends AbstractASetup implements DiaDefSource {
protected EPackage ePackage;
protected Canvas canvas;
protected FigureGallery fGallery;
protected Map<EObject, DiagramElement> owners;
public GraphDefASetup(EPackage ePackage) {
this.ePackage = ePackage;
}
protected Iterator<EObject> getAllDomainModelContents() {
return ePackage.eAllContents();
}
protected void createCanvas() {
owners = new HashMap<EObject, DiagramElement>();
canvas = GMFGraphFactory.eINSTANCE.createCanvas();
canvas.setName("Default"); //$NON-NLS-1$
fGallery = GMFGraphFactory.eINSTANCE.createFigureGallery();
fGallery.setName("default"); //$NON-NLS-1$
canvas.getFigures().add(fGallery);
processDomainModel();
}
// canvas
protected void processCanvas(EModelElement element, String name, List<Parameter> params) {
canvas.setName(getName(element, name));
}
// node
protected void processNode(EModelElement element, String name, List<Parameter> params) {
Node node = createNode(element, name, params);
canvas.getNodes().add(node);
RealFigure figure = createNodeFigure(node, element, params);
FigureDescriptor fd = DiaDefSetup.newDescriptor(figure);
fGallery.getDescriptors().add(fd);
node.setFigure(fd);
owners.put(element, node);
}
protected Node createNode(EModelElement element, String name, List<Parameter> params) {
Node node = GMFGraphFactory.eINSTANCE.createNode();
node.setName(getName(element, name));
return node;
}
protected RealFigure createNodeFigure(Node node, EModelElement element, List<Parameter> params) {
Rectangle figure = GMFGraphFactory.eINSTANCE.createRectangle();
figure.setName(node.getName() + "Figure"); //$NON-NLS-1$
return figure;
}
// compartment
protected void processCompartment(EModelElement element, String name, List<Parameter> params) {
Compartment compartment = createCompartment(element, name, params);
canvas.getCompartments().add(compartment);
RealFigure figure = createCompartmentFigure(compartment, element, params);
FigureDescriptor fd = DiaDefSetup.newDescriptor(figure);
fGallery.getDescriptors().add(fd);
compartment.setFigure(fd);
}
protected Compartment createCompartment(EModelElement element, String name, List<Parameter> params) {
Compartment compartment = GMFGraphFactory.eINSTANCE.createCompartment();
compartment.setName(getName(element, name));
return compartment;
}
protected RealFigure createCompartmentFigure(Compartment compartment, EModelElement element, List<Parameter> params) {
Rectangle figure = GMFGraphFactory.eINSTANCE.createRectangle();
figure.setName(compartment.getName() + "Figure"); //$NON-NLS-1$
return figure;
}
// link
protected void processLink(EModelElement element, String name, List<Parameter> params) {
Connection connection = createLink(element, name, params);
canvas.getConnections().add(connection);
RealFigure figure = createLinkFigure(connection, element, params);
FigureDescriptor fd = DiaDefSetup.newDescriptor(figure);
fGallery.getDescriptors().add(fd);
connection.setFigure(fd);
owners.put(element, connection);
}
protected Connection createLink(EModelElement element, String name, List<Parameter> params) {
Connection connection = GMFGraphFactory.eINSTANCE.createConnection();
connection.setName(getName(element, name));
return connection;
}
protected RealFigure createLinkFigure(Connection connection, EModelElement element, List<Parameter> params) {
PolylineConnection figure = GMFGraphFactory.eINSTANCE.createPolylineConnection();
figure.setName(connection.getName() + "Figure"); //$NON-NLS-1$
return figure;
}
// label
protected void processLabel(EModelElement element, String name, List<Parameter> params) {
DiagramLabel label = createLabel(element, name, params);
canvas.getLabels().add(label);
RealFigure figure = createLabelFigure(label, element, params);
// if label element is contained within element mapped to
// node or connection then label figure should be added to
// container figure
DiagramElement host = owners.get(element.eContainer());
if (host != null) {
((RealFigure) host.getFigure().getActualFigure()).getChildren().add(figure);
ChildAccess ca = DiaDefSetup.newAccess(host.getFigure(), figure);
label.setFigure(host.getFigure());
label.setAccessor(ca);
} else {
FigureDescriptor fd = DiaDefSetup.newDescriptor(figure);
fGallery.getDescriptors().add(fd);
label.setFigure(fd);
}
}
protected DiagramLabel createLabel(EModelElement element, String name, List<Parameter> params) {
DiagramLabel label = GMFGraphFactory.eINSTANCE.createDiagramLabel();
label.setName(getName(element, name));
return label;
}
protected RealFigure createLabelFigure(DiagramLabel label, EModelElement element, List<Parameter> params) {
Label figure = GMFGraphFactory.eINSTANCE.createLabel();
figure.setName(label.getName() + "Figure"); //$NON-NLS-1$
return figure;
}
public Canvas getCanvasDef() {
if (canvas == null) {
createCanvas();
saveModel(canvas, "gmfgraph"); //$NON-NLS-1$
validate(canvas);
}
return canvas;
}
public DiagramLabel getLabelDef() {
return null;
}
public Connection getLinkDef() {
return null;
}
public Node getNodeDef() {
return null;
}
}