svn commit: r19504 - trunk/src/argouml-core-diagrams-deployment2/src/org/argouml/deployment2/diagram

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
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]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.