svn commit: r18851 - trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2010-11-20 08:49:59-0800
New Revision: 18851

Added:
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java
Removed:
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityNode.java
Modified:
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java

Log:
Change the display of FigNodes to be managed by state rather than inheritance

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,54 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.argouml.uml.diagram.ui.FigSingleLineText;
+import org.argouml.uml.diagram.ui.FigStereotypesGroup;
+import org.tigris.gef.base.CreateNodeAction;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigRRect;
+
+abstract class BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+    private Fig bigPort;
+    private Fig stereotypeFig;
+    private Fig nameFig;
+    
+    public BaseDisplayState(int x, int y, int w, int h, Color lineColor,
+            Color fillColor, Object modelElement, DiagramSettings settings) {
+        stereotypeFig = new FigStereotypesGroup(modelElement, new Rectangle(0, 0, 0, 0), settings);
+        nameFig = new FigSingleLineText(modelElement, new Rectangle(0, 0, 0, 0), settings, true);
+        bigPort = createBigPort(x, y, w, h, lineColor, fillColor);
+    }
+    
+    public Fig getStereotypeDisplay() {
+        return stereotypeFig;
+    }
+
+    public Fig getNameDisplay() {
+        return nameFig;
+    }
+
+    abstract Dimension getMinimumSize();
+    abstract Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor);
+    
+    Fig getBigPort() {
+        return bigPort;
+    }
+}

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,63 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Polygon;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigPoly;
+
+public class ConcavePentagonDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+    private static final int PADDING = 8;
+    
+    public ConcavePentagonDisplayState(int x, int y, int w, int h, Color lineColor,
+            Color fillColor, Object modelElement, DiagramSettings settings) {
+        super(x, y, w, h, lineColor, fillColor, modelElement, settings);
+        createBigPort(x, y, w, h, lineColor, fillColor);
+    }
+
+    @Override
+    public Dimension getMinimumSize() {
+        final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+        final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+        int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+        /* The stereoDim has height=2, even if it is empty, 
+         * hence the -2 below: */
+        final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+        w = Math.max(w, h + 44); // the width needs to be > the height
+        return new Dimension(w, h);
+    }
+    
+    protected Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+        final FigPoly polyFig = new FigPoly();
+        final int[] xs = new int[6];
+        final int[] ys = new int[6];
+        
+        xs[0] = x;              ys[0] = y;
+        xs[1] = x + w;      ys[1] = y;
+        xs[2] = x + w;      ys[2] = y + h;
+        xs[3] = x;              ys[3] = y + h;
+        xs[4] = x + h / 2; ys[4] = y + h / 2;
+        xs[5] = x;              ys[5] = y;
+        final Polygon p = new Polygon(xs, ys, 6);
+        polyFig.setPolygon(p);
+        
+        return polyFig;
+    }
+}

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,74 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import org.argouml.uml.diagram.DiagramSettings;
+
+class DiagramElementBuilder {
+
+    private static final int WIDTH = 90;
+    private static final int HEIGHT = 25;
+    
+    static void buildDiagramElement(
+            final FigBaseNode fig, String style, Object owner, DiagramSettings settings) {
+        if (style.equals("compartmentbox")) {
+            
+        } else if (style.equals("rect")) {
+            fig.setDisplayState(
+                    new RectDisplayState(
+                            fig.getX(), 
+                            fig.getX(), 
+                            WIDTH, 
+                            HEIGHT, 
+                            fig.getLineColor(), 
+                            fig.getFillColor(),
+                            owner,
+                            settings));
+        } else if (style.equals("rrect")) {
+            fig.setDisplayState(
+                    new RRectDisplayState(
+                            fig.getX(), 
+                            fig.getX(), 
+                            WIDTH, 
+                            HEIGHT, 
+                            fig.getLineColor(), 
+                            fig.getFillColor(),
+                            owner,
+                            settings));
+        } else if (style.equals("pentagon")) {
+            fig.setDisplayState(
+                    new PentagonDisplayState(
+                            fig.getX(), 
+                            fig.getX(), 
+                            WIDTH, 
+                            HEIGHT, 
+                            fig.getLineColor(), 
+                            fig.getFillColor(),
+                            owner,
+                            settings));
+        } else if (style.equals("concave-pentagon")) {
+            fig.setDisplayState(
+                    new ConcavePentagonDisplayState(
+                            fig.getX(), 
+                            fig.getX(), 
+                            WIDTH, 
+                            HEIGHT, 
+                            fig.getLineColor(), 
+                            fig.getFillColor(),
+                            owner,
+                            settings));
+        }
+    }
+
+}

Removed: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityNode.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityNode.java?view=markup&pathrev=18850

Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java?view=diff&pathrev=18851&r1=18850&r2=18851
==============================================================================
--- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java	(original)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java	2010-11-20 08:49:59-0800
@@ -13,6 +13,7 @@
 
 package org.argouml.activity2.diagram;
 
+import java.awt.Dimension;
 import java.awt.Rectangle;
 
 import org.argouml.uml.diagram.DiagramSettings;
@@ -25,6 +26,8 @@
  */
 class FigBaseNode extends FigNodeModelElement {
 
+    private BaseDisplayState displayState;
+    
     /**
      * Constructor a new FigBaseNode
      * 
@@ -37,4 +40,18 @@
         super(owner, bounds, settings);
         addFig(getBigPort());
     }
+    
+    void setDisplayState(BaseDisplayState displayState) {
+        this.displayState = displayState;
+        if (getBigPort() != null) {
+            removeFig(getBigPort());
+        }
+        setBigPort(displayState.getBigPort());
+        addFig(displayState.getBigPort());
+    }
+    
+    @Override
+    public Dimension getMinimumSize() {
+        return displayState.getMinimumSize();
+    }
 }

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,21 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import org.tigris.gef.presentation.Fig;
+
+interface NameDisplayer {
+
+    Fig getStereotypeDisplay();
+}

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,61 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Polygon;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigPoly;
+
+public class PentagonDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+    private static final int PADDING = 8;
+    
+    public PentagonDisplayState(int x, int y, int w, int h, Color lineColor,
+            Color fillColor, Object modelElement, DiagramSettings settings) {
+        super(x, y, w, h, lineColor, fillColor, modelElement, settings);
+        createBigPort(x, y, w, h, lineColor, fillColor);
+    }
+
+    @Override
+    public Dimension getMinimumSize() {
+        final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+        final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+        int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+        /* The stereoDim has height=2, even if it is empty, 
+         * hence the -2 below: */
+        final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+        w = Math.max(w, h + 44); // the width needs to be > the height
+        return new Dimension(w, h);
+    }
+    
+    protected Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+        final FigPoly polyFig = new FigPoly();
+        final int[] xs = new int[6];
+        final int[] ys = new int[6];
+        xs[0] = x;             ys[0] = y;
+        xs[1] = x + w - h / 2; ys[1] = y;
+        xs[2] = x + w;         ys[2] = y + h / 2;
+        xs[3] = x + w - h / 2; ys[3] = y + h;
+        xs[4] = x;             ys[4] = y + h;
+        xs[5] = x;             ys[5] = y;
+        final Polygon p = new Polygon(xs, ys, 6);
+        polyFig.setPolygon(p);
+        
+        return polyFig;
+    }
+}

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,49 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigRRect;
+
+public class RRectDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+    private static final int PADDING = 8;
+    
+    public RRectDisplayState(int x, int y, int w, int h, Color lineColor,
+            Color fillColor, Object modelElement, DiagramSettings settings) {
+        super(x, y, w, h, lineColor, fillColor, modelElement, settings);
+        createBigPort(x, y, w, h, lineColor, fillColor);
+    }
+
+    @Override
+    public Dimension getMinimumSize() {
+        final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+        final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+        int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+        /* The stereoDim has height=2, even if it is empty, 
+         * hence the -2 below: */
+        final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+        w = Math.max(w, h + 44); // the width needs to be > the height
+        return new Dimension(w, h);
+    }
+    
+    Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+        return new FigRRect(x, y, w, h, lineColor, fillColor);
+    }
+}

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,49 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigRect;
+
+public class RectDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+    private static final int PADDING = 8;
+    
+    public RectDisplayState(int x, int y, int w, int h, Color lineColor,
+            Color fillColor, Object modelElement, DiagramSettings settings) {
+        super(x, y, w, h, lineColor,
+                fillColor, modelElement, settings);
+        createBigPort(x, y, w, h, lineColor, fillColor);
+    }
+
+    @Override
+    public Dimension getMinimumSize() {
+        final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+        final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+        int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+        /* The stereoDim has height=2, even if it is empty, 
+         * hence the -2 below: */
+        final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+        w = Math.max(w, h + 44); // the width needs to be > the height
+        return new Dimension(w, h);
+    }
+    
+    Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+        return new FigRect(x, y, w, h, lineColor, fillColor);
+    }
+}

Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java	2010-11-20 08:49:59-0800
@@ -0,0 +1,20 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 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.activity2.diagram;
+
+import org.tigris.gef.presentation.Fig;
+
+interface StereotypeDisplayer {
+
+    Fig getStereotypeDisplay();
+}

Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java?view=diff&pathrev=18851&r1=18850&r2=18851
==============================================================================
--- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java	(original)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java	2010-11-20 08:49:59-0800
@@ -105,7 +105,18 @@
         DiagramSettings settings = getDiagramSettings();
         
         if (Model.getFacade().isAActivityNode(modelElement)) {
-            figNode = new FigActivityNode(modelElement, bounds, settings);
+            figNode = new FigBaseNode(modelElement, bounds, settings);
+            final String style;
+            if (Model.getFacade().isAObjectNode(modelElement)) {
+                style="rect";
+            } else if (Model.getFacade().isASendSignalAction(modelElement)) {
+                style="pentagon";
+            } else if (Model.getFacade().isAAcceptEventAction(modelElement)) {
+                style="concave-pentagon";
+            } else {
+                style="rrect";
+            }
+            DiagramElementBuilder.buildDiagramElement((FigBaseNode) figNode, style, modelElement, settings);
         } else if (Model.getFacade().isAComment(modelElement)) {
             figNode = new FigComment(modelElement, bounds, settings);
         }

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2683894

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.