package com.windowtester.examples.gef.uml.parts; import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.NodeEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.editpolicies.RootComponentEditPolicy; import com.windowtester.examples.gef.common.part.connector.BottomAnchor; import com.windowtester.examples.gef.common.part.connector.TopAnchor; import com.windowtester.examples.gef.uml.figures.ClassElementFigure; import com.windowtester.examples.gef.uml.model.ClassElement; import com.windowtester.examples.gef.uml.model.InheritsRelationship; import com.windowtester.examples.gef.uml.policies.ClassNodeEditPolicy; import com.windowtester.examples.gef.uml.policies.UMLElementLayoutPolicy; /** * <p> * Copyright (c) 2007, Instantiations, Inc.<br> * All Rights Reserved * * @author Phil Quitslund * */ public class ClassElementEditPart extends AbstractDiagramNodePart { public ClassElementEditPart(ClassElement model) { setModel(model); } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ @Override protected IFigure createFigure() { ClassElement classElement = getClassElement(); return new ClassElementFigure(classElement.getName()); } protected ClassElement getClassElement() { return (ClassElement) getModel(); } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies() */ @Override protected void createEditPolicies() { installEditPolicy(EditPolicy.COMPONENT_ROLE, new RootComponentEditPolicy()); installEditPolicy(EditPolicy.LAYOUT_ROLE, new UMLElementLayoutPolicy()); installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ClassNodeEditPolicy()); } /* (non-Javadoc) * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent evt) { String prop = evt.getPropertyName(); if (ClassElement.SIZE_PROP.equals(prop) || ClassElement.LOCATION_PROP.equals(prop)) { refreshVisuals(); } else if (ClassElement.SOURCE_CONNECTIONS_PROP.equals(prop)) { refreshSourceConnections(); } else if (ClassElement.TARGET_CONNECTIONS_PROP.equals(prop)) { refreshTargetConnections(); } } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ @Override protected void refreshVisuals() { Point location = getClassElement().getLocation(); Rectangle bounds = new Rectangle(location.x, location.y, -1, -1); ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), bounds); } /** * @see NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart) */ public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) { return new TopAnchor(getFigure()); } /** * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request) */ public ConnectionAnchor getSourceConnectionAnchor(Request request) { return new TopAnchor(getFigure()); } /** * @see NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart) */ public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) { return new BottomAnchor(getFigure()); } /** * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.Request) */ public ConnectionAnchor getTargetConnectionAnchor(Request request) { return new BottomAnchor(getFigure()); } @SuppressWarnings("unchecked") @Override protected List getModelSourceConnections() { InheritsRelationship s = getClassElement().getSuper(); List supers = new ArrayList(); supers.add(s); return supers; } @SuppressWarnings("unchecked") @Override protected List getModelTargetConnections() { return getClassElement().getSubs(); } }