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]].

Reply via email to