Author: bobtarling Date: 2011-05-24 05:00:18-0700 New Revision: 19504 Added: trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigNode.java trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigPort.java Modified: trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/UMLDeploymentDiagram.java
Log: Allow a Port to be dropped in a node and connect to its boundary Added: trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigNode.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigNode.java?view=markup&pathrev=19504 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigNode.java 2011-05-24 05:00:18-0700 @@ -0,0 +1,182 @@ +/* $Id: $ + ***************************************************************************** + * Copyright (c) 2011 Contributors - see below + * 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: + * Bob Tarling + ***************************************************************************** + */ + +package org.argouml.deployment2.diagram; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Polygon; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; +import java.io.Serializable; +import java.util.Vector; + +import org.argouml.model.Model; +import org.argouml.uml.diagram.DiagramSettings; +import org.argouml.uml.diagram.ui.FigNodeModelElement; +import org.tigris.gef.presentation.Fig; + +/** + * A fig representing a node in a UML2 deployment diagram + * @author Bob Tarling + */ +public class FigNode extends FigNodeModelElement { + + protected static final int DEPTH = 20; + private static final int WIDTH = 200; + private static final int HEIGHT = 180; + private static final int MIN_WIDTH = 80; + private static final int MIN_HEIGHT = 80; + private static final int MARGIN = 2; + + @Override + protected Fig createBigPortFig() { + FigCube port = new FigCube(0, 0, + WIDTH, + HEIGHT, DEPTH); + port.setFilled(false); + port.setLineWidth(1); + return port; + } + + public FigNode(Object owner, Rectangle bounds, + DiagramSettings settings) { + super(owner, bounds, settings); + initialize(); + } + + private void initialize() { + addFig(getBigPort()); + addFig(getStereotypeFig()); + addFig(getNameFig()); + } + + @Override + public Dimension getMinimumSize() { + final Dimension stereoDim = getStereotypeFig().getMinimumSize(); + final Dimension nameDim = getNameFig().getMinimumSize(); + + int w = Math.max(stereoDim.width, nameDim.width) + DEPTH; + int h = stereoDim.height + nameDim.height + DEPTH; + + w = Math.max(MIN_WIDTH, w); + h = Math.max(MIN_HEIGHT, h); + return new Dimension(w, h); + } + + @Override + protected void setStandardBounds(int x, int y, int w, int h) { + if (getNameFig() == null) { + return; + } + getBigPort().setBounds(x, y, w, h); + + Dimension stereoDim = getStereotypeFig().getMinimumSize(); + getStereotypeFig().setBounds( + x + getLeftMargin(), y + getTopMargin(), + w - getLeftMargin() - getRightMargin(), stereoDim.height); + + Dimension nameDim = getNameFig().getMinimumSize(); + getNameFig().setBounds( + x + getLeftMargin(), getStereotypeFig().getY() + stereoDim.height + 1, + w - getLeftMargin() - getRightMargin(), nameDim.height); + _x = x; + _y = y; + _w = w; + _h = h; + updateEdges(); + } + + @Override + public void setEnclosingFig(Fig encloser) { + if (encloser == null + || (encloser != null + && Model.getFacade().isANode(encloser.getOwner()))) { + super.setEnclosingFig(encloser); + } + } + + @Override + public boolean getUseTrapRect() { + return true; + } + + public Rectangle getTrapRect() { + return new Rectangle(_x, _y + DEPTH, _w - DEPTH, _h - DEPTH); + } + + @Override + public Vector getPopUpActions(MouseEvent me) { + Vector popUpActions = super.getPopUpActions(me); + popUpActions.add( + popUpActions.size() - getPopupAddOffset(), + buildModifierPopUp(ABSTRACT | LEAF | ROOT)); + return popUpActions; + } + + + int getRightMargin() { + return DEPTH + MARGIN; + } + + int getLeftMargin() { + return MARGIN; + } + + int getTopMargin() { + return DEPTH + MARGIN; + } + + int getBottomMargin() { + return MARGIN; + } + + + public class FigCube extends Fig implements Serializable { + + private final int depth; + + public FigCube(int x, int y, int w, int h, int d) { + super(x, y, w, h); + depth = d; + } + + public void paint(Graphics g) { + + final Color fillColor = getFillColor(); + final Color lineColor = getLineColor(); + + g.setColor(fillColor); + Polygon p = new Polygon(); + p.addPoint(_x + depth, _y); + p.addPoint(_x + _w, _y); + p.addPoint(_x + _w, _y + _h - depth); + p.addPoint(_x + _w - depth, _y + _h); + p.addPoint(_x, _y + _h); + p.addPoint(_x, _y + depth); + p.addPoint(_x + depth, _y); + g.fillPolygon(p); + + + g.setColor(lineColor); + g.drawPolygon(p); + g.drawLine(_x, _y + depth, _x + _w - depth, _y + depth); + g.drawLine(_x + _w - depth, _y + depth, _x + _w - depth, _y + _h); + g.drawLine(_x + _w - depth, _y + depth, _x + _w, _y); + } + + public void appendSvg(StringBuffer sb) { + } + } +} Added: trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigPort.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigPort.java?view=markup&pathrev=19504 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/FigPort.java 2011-05-24 05:00:18-0700 @@ -0,0 +1,97 @@ +/* $Id: $ + ***************************************************************************** + * Copyright (c) 2011 Contributors - see below + * 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: + * Bob Tarling + ***************************************************************************** + */ + +package org.argouml.deployment2.diagram; + +import java.awt.Point; +import java.awt.Rectangle; +import org.argouml.uml.diagram.DiagramSettings; +import org.argouml.uml.diagram.ui.FigNodeModelElement; +import org.tigris.gef.base.LayerPerspective; +import org.tigris.gef.di.GraphNode; +import org.tigris.gef.presentation.Connector; +import org.tigris.gef.presentation.Fig; +import org.tigris.gef.presentation.FigRect; + +class FigPort extends FigNodeModelElement implements Connector { + + private static final int WIDTH = 16; + private static final int HEIGHT = 16; + + FigNode node; + + public FigPort(Object owner, Rectangle bounds, + DiagramSettings settings) { + super(owner, bounds, settings); + initialize(); + } + + public GraphNode getGraphNode() { + return node; + } + + public void setGraphNode(GraphNode node) { + this.node = (FigNode) node; + } + + + @Override + public void setEnclosingFig(Fig encloser) { + // TODO: Note copy/paste code in FigExitPoint - where is this code + // better placed in GEF? + LayerPerspective lp = (LayerPerspective) getLayer(); + if (lp == null) { + return; + } + + super.setEnclosingFig(encloser); + FigNode node = ((FigNode) encloser); + + if (node != null) { + node.addConnector(this); + } else { + FigNode previousNode = (FigNode) getGraphNode(); + if (previousNode != null) + previousNode.removeConnector(this); + } + } + + @Override + protected Fig createBigPortFig() { + FigRect fr = new FigRect(0, 0, WIDTH, HEIGHT); + fr.setLineWidth(1); + return fr; + } + + private void initialize() { + setEditable(false); + addFig(getBigPort()); + } + + @Override + public boolean isResizable() { + return false; + } + + @Override + public Point connectionPoint(Point anotherPt) { + return getBigPort().connectionPoint(anotherPt); + } + + @Override + protected void setStandardBounds(int x, int y, int w, int h) { + getBigPort().setBounds(x, y, w, h); + calcBounds(); + updateEdges(); + } +} Modified: trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/UMLDeploymentDiagram.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/UMLDeploymentDiagram.java?view=diff&pathrev=19504&r1=19503&r2=19504 ============================================================================== --- trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/UMLDeploymentDiagram.java (original) +++ trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram/UMLDeploymentDiagram.java 2011-05-24 05:00:18-0700 @@ -32,7 +32,6 @@ import org.argouml.uml.diagram.DiagramSettings; import org.argouml.uml.diagram.deployment.ui.DeploymentDiagramRenderer; import org.argouml.uml.diagram.deployment.ui.FigComponent; -import org.argouml.uml.diagram.deployment.ui.FigMNode; import org.argouml.uml.diagram.deployment.ui.FigObject; import org.argouml.uml.diagram.static_structure.ui.FigClass; import org.argouml.uml.diagram.static_structure.ui.FigComment; @@ -47,7 +46,6 @@ import org.tigris.gef.base.LayerPerspective; import org.tigris.gef.base.LayerPerspectiveMutable; import org.tigris.gef.base.ModeCreatePolyEdge; -import org.tigris.gef.presentation.FigNode; /** * Diagram for UML2 Deployment Diagram @@ -56,14 +54,15 @@ public class UMLDeploymentDiagram extends UMLDiagram { private static final List acceptList = Arrays.asList(new Object[] { - Model.getMetaTypes().getNode(), + Model.getMetaTypes().getActor(), Model.getMetaTypes().getAssociation(), - Model.getMetaTypes().getComponent(), Model.getMetaTypes().getUMLClass(), + Model.getMetaTypes().getComment(), + Model.getMetaTypes().getComponent(), Model.getMetaTypes().getInterface(), + Model.getMetaTypes().getNode(), Model.getMetaTypes().getObject(), - Model.getMetaTypes().getComment(), - Model.getMetaTypes().getActor() + Model.getMetaTypes().getPort() }); /** @@ -135,6 +134,7 @@ ArrayList actions = new ArrayList(); actions.add(getNodeAction(Model.getMetaTypes().getNode())); + actions.add(getNodeAction(Model.getMetaTypes().getPort())); actions.add(getNodeAction(Model.getMetaTypes().getComponent())); actions.add(getEdgeAction(Model.getMetaTypes().getGeneralization())); actions.add(getEdgeAction(Model.getMetaTypes().getAbstraction())); @@ -218,8 +218,10 @@ return false; } - public void encloserChanged(FigNode enclosed, - FigNode oldEncloser, FigNode newEncloser) { + public void encloserChanged( + org.tigris.gef.presentation.FigNode enclosed, + org.tigris.gef.presentation.FigNode oldEncloser, + org.tigris.gef.presentation.FigNode newEncloser) { } @Override @@ -243,7 +245,9 @@ DiagramSettings settings = getDiagramSettings(); if (Model.getFacade().isANode(modelElement)) { - figNode = new FigMNode(modelElement, bounds, settings); + figNode = new FigNode(modelElement, bounds, settings); + } else if (Model.getFacade().isAPort(modelElement)) { + figNode = new FigPort(modelElement, bounds, settings); } else if (Model.getFacade().isAAssociation(modelElement)) { figNode = createNaryAssociationNode(modelElement, bounds, settings); ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2746975 To unsubscribe from this discussion, e-mail: [[email protected]].
