/*
* Copyright (c) 2005 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:
* Artem Tikhomirov (Borland) - initial API and implementation
*/
package org.eclipse.gmf.tests.setup;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
import org.eclipse.gmf.gmfgraph.BasicFont;
import org.eclipse.gmf.gmfgraph.Canvas;
import org.eclipse.gmf.gmfgraph.ChildAccess;
import org.eclipse.gmf.gmfgraph.Color;
import org.eclipse.gmf.gmfgraph.ColorConstants;
import org.eclipse.gmf.gmfgraph.Compartment;
import org.eclipse.gmf.gmfgraph.Connection;
import org.eclipse.gmf.gmfgraph.ConstantColor;
import org.eclipse.gmf.gmfgraph.DiagramLabel;
import org.eclipse.gmf.gmfgraph.Figure;
import org.eclipse.gmf.gmfgraph.FigureDescriptor;
import org.eclipse.gmf.gmfgraph.FigureGallery;
import org.eclipse.gmf.gmfgraph.RealFigure;
import org.eclipse.gmf.gmfgraph.FontStyle;
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;
/**
* This class is intended to be subclassed
* It is allowed to override setup* methods to tweak setup for managed gmfgraph instances.
*/
public class DiaDefSetup implements DiaDefSource {
private Canvas myCanvasDef;
private Node myNodeDef;
private Connection myLinkDef;
private FigureGallery myFigureContainer;
private DiagramLabel myLabelDef;
private Connection myColoredLinkDef;
private Node myColoredNodeDef;
private Compartment myCompartmentA;
private Compartment myCompartmentB;
private DiagramLabel myDecoratedLabelDef;
/**
* @return <code>this</code> for convenience
*/
public final DiaDefSetup init() {
myCanvasDef = GMFGraphFactory.eINSTANCE.createCanvas();
myNodeDef = GMFGraphFactory.eINSTANCE.createNode();
myLinkDef = GMFGraphFactory.eINSTANCE.createConnection();
myLabelDef = GMFGraphFactory.eINSTANCE.createDiagramLabel();
myFigureContainer = GMFGraphFactory.eINSTANCE.createFigureGallery();
myColoredLinkDef = GMFGraphFactory.eINSTANCE.createConnection();
myColoredNodeDef = GMFGraphFactory.eINSTANCE.createNode();
myCompartmentA = GMFGraphFactory.eINSTANCE.createCompartment();
myCompartmentB = GMFGraphFactory.eINSTANCE.createCompartment();
myDecoratedLabelDef = GMFGraphFactory.eINSTANCE.createDiagramLabel();
myFigureContainer.setName("fc1");
myCanvasDef.getFigures().add(myFigureContainer);
myCanvasDef.getNodes().add(myNodeDef);
myCanvasDef.getConnections().add(myLinkDef);
myCanvasDef.getLabels().add(myLabelDef);
myCanvasDef.getConnections().add(myColoredLinkDef);
myCanvasDef.getNodes().add(myColoredNodeDef);
myCanvasDef.getCompartments().add(myCompartmentA);
myCanvasDef.getCompartments().add(myCompartmentB);
myCanvasDef.getLabels().add(myDecoratedLabelDef);
commonSetupCanvasDef(myCanvasDef);
commonSetupNodeDef(myNodeDef);
commonSetupLinkDef(myLinkDef);
commonSetupLabelDef(myLabelDef);
commonSetupColoredLinkDef(myColoredLinkDef);
commonSetupColoredNodeDef(myColoredNodeDef);
commonSetupCompartmentA(myCompartmentA);
commonSetupCompartmentB(myCompartmentB);
commonSetupDecoratedLabelDef(myDecoratedLabelDef);
setupCanvasDef(myCanvasDef);
setupNodeDef(myNodeDef);
setupLinkDef(myLinkDef);
setupLabelDef(myLabelDef);
setupColoredLinkDef(myColoredLinkDef);
setupColoredNodeDef(myColoredNodeDef);
setupCompartmentA(myCompartmentA);
setupCompartmentB(myCompartmentB);
setupDecoratedLabelDef(myDecoratedLabelDef);
confineInResource();
return this;
}
private void commonSetupDecoratedLabelDef(DiagramLabel label) {
label.setName("DiagramLabelWithFont");
Label labelFigure = GMFGraphFactory.eINSTANCE.createLabel();
labelFigure.setText("LabelText");
label.setFigure(newDescriptor("LabelWithFont", labelFigure));
BasicFont font = GMFGraphFactory.eINSTANCE.createBasicFont();
font.setFaceName("Arial");
font.setHeight(18);
font.setStyle(FontStyle.BOLD_LITERAL);
labelFigure.setFont(font);
myFigureContainer.getDescriptors().add(label.getFigure());
}
private void commonSetupCompartmentA(Compartment compartment) {
compartment.setName("Compartment_Title_Collapse");
compartment.setNeedsTitle(true);
compartment.setCollapsible(true);
RealFigure compartmentFigure = GMFGraphFactory.eINSTANCE.createRectangle();
compartment.setFigure(newDescriptor("CompartmentFigureA", compartmentFigure));
myFigureContainer.getDescriptors().add(compartment.getFigure());
}
private void commonSetupCompartmentB(Compartment compartment) {
compartment.setName("Compartment_NoTitle_No_Collapse");
compartment.setNeedsTitle(false);
compartment.setCollapsible(false);
RealFigure compartmentFigure = GMFGraphFactory.eINSTANCE.createRectangle();
compartment.setFigure(newDescriptor("CompartmentFigureB", compartmentFigure));
myFigureContainer.getDescriptors().add(compartment.getFigure());
}
private void commonSetupColoredNodeDef(Node coloredNodeDef) {
coloredNodeDef.setName("ColoredRectangleNode");
final Rectangle rect = GMFGraphFactory.eINSTANCE.createRectangle();
coloredNodeDef.setFigure(newDescriptor("ColoredRectangle", rect));
rect.setForegroundColor(createColor(ColorConstants.RED_LITERAL));
rect.setBackgroundColor(createColor(ColorConstants.BLUE_LITERAL));
myFigureContainer.getDescriptors().add(coloredNodeDef.getFigure());
}
private void commonSetupColoredLinkDef(Connection coloredLinkDef) {
coloredLinkDef.setName("ColoredLinkConnection");
final PolylineConnection pc = GMFGraphFactory.eINSTANCE.createPolylineConnection();
coloredLinkDef.setFigure(newDescriptor("ColoredLink", pc));
pc.setForegroundColor(createColor(ColorConstants.ORANGE_LITERAL));
myFigureContainer.getDescriptors().add(coloredLinkDef.getFigure());
}
private Color createColor(ColorConstants color){
ConstantColor result = GMFGraphFactory.eINSTANCE.createConstantColor();
result.setValue(color);
return result;
}
private void confineInResource() {
new ResourceImpl(URI.createURI("uri://org.eclipse.gmf/tests/GMFGraphSetup")).getContents().add(myCanvasDef);
}
private void commonSetupCanvasDef(Canvas canvasDef) {
canvasDef.setName("Test-dd-canvas");
}
private void commonSetupNodeDef(Node nodeDef) {
nodeDef.setName("Test-dd-node");
nodeDef.setFigure(newDescriptor("nf1", GMFGraphFactory.eINSTANCE.createRoundedRectangle()));
myFigureContainer.getDescriptors().add(nodeDef.getFigure());
}
private void commonSetupLinkDef(Connection linkDef) {
linkDef.setName("Test-dd-link");
linkDef.setFigure(newDescriptor("lf1", GMFGraphFactory.eINSTANCE.createPolylineConnection()));
myFigureContainer.getDescriptors().add(linkDef.getFigure());
}
private void commonSetupLabelDef(DiagramLabel labelDef) {
labelDef.setName("TestLabel");
Label figure= GMFGraphFactory.eINSTANCE.createLabel();
labelDef.setFigure(newDescriptor("LabelFig", figure));
myFigureContainer.getDescriptors().add(labelDef.getFigure());
}
protected void setupCanvasDef(Canvas canvasDef) {
//hook for subclasses
}
protected void setupNodeDef(Node nodeDef) {
//hook for subclasses
}
protected void setupLinkDef(Connection linkDef) {
//hook for subclasses
}
protected void setupLabelDef(DiagramLabel labelDef) {
//hook for subclasses
}
public void setupColoredLinkDef(Connection myColoredLinkDef2) {
//hook for subclasses
}
public void setupColoredNodeDef(Node myColoredNodeDef2) {
//hook for subclasses
}
// XXX private hook???
private void setupCompartmentA(Compartment compartment) {
//hook for subclasses
}
private void setupCompartmentB(Compartment compartment) {
//hook for subclasses
}
private void setupDecoratedLabelDef(DiagramLabel myDecoratedLabelDef2) {
//hook for subclasses
}
public final Canvas getCanvasDef() {
return myCanvasDef;
}
public final Connection getLinkDef() {
return myLinkDef;
}
public final Node getNodeDef() {
return myNodeDef;
}
public final DiagramLabel getLabelDef() {
return myLabelDef;
}
public final FigureGallery getFigureContainer() {
return myFigureContainer;
}
public Connection getColoredLinkDef() {
return myColoredLinkDef;
}
public Node getColoredNodeDef() {
return myColoredNodeDef;
}
public Compartment getCompartmentA() {
return myCompartmentA;
}
public Compartment getCompartmentB() {
return myCompartmentB;
}
public DiagramLabel getDecoratedLabelDef() {
return myDecoratedLabelDef;
}
public static FigureDescriptor newDescriptor(String name, Figure fig) {
assert name != null;
FigureDescriptor fd = GMFGraphFactory.eINSTANCE.createFigureDescriptor();
fd.setActualFigure(fig);
fd.setName(name);
return fd;
}
public static FigureDescriptor newDescriptor(RealFigure fig) {
return newDescriptor(fig.getName(), fig);
}
public static ChildAccess newAccess(FigureDescriptor fd, RealFigure child) {
ChildAccess ca = GMFGraphFactory.eINSTANCE.createChildAccess();
ca.setFigure(child);
fd.getAccessors().add(ca);
return ca;
}
}