Author: euluis
Date: 2008-10-28 17:09:57-0700
New Revision: 15950
Modified:
trunk/src/argouml-app/src/org/argouml/i18n/misc.properties
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java
trunk/src/argouml-core-diagrams-sequence2/ArgoUML Sequence2.launch
trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java
trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java
Log:
merging /gsoc2008/feature1_5138_bszanto -r 15140:15494 into trunk
Modified: trunk/src/argouml-app/src/org/argouml/i18n/misc.properties
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/i18n/misc.properties?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/i18n/misc.properties&p2=trunk/src/argouml-app/src/org/argouml/i18n/misc.properties&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/i18n/misc.properties (original)
+++ trunk/src/argouml-app/src/org/argouml/i18n/misc.properties 2008-10-28 17:09:57-0700
@@ -100,6 +100,7 @@
misc.link.stimuli = Link->Stimuli
misc.message.action = Message->Action
misc.message.click-on-diagram-to-add = Click on diagram to add {0}
+misc.message.click-on-diagram-to-add-as-cr = Click on diagram to add a new Classifier Role with {0} as base
misc.methods-of-class = Methods of Class
misc.model = Model
misc.model-element.behavior = ModelElement->Behavior
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/ActivityDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -27,8 +27,10 @@
import java.util.Map;
-import org.argouml.model.Model;
+import org.argouml.kernel.ProjectManager;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.state.ui.StateDiagramRenderer;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigNode;
@@ -73,18 +75,16 @@
Map styleAttributes) {
FigNode figNode = null;
-
- if (Model.getFacade().isAPartition(node)) {
- figNode = new FigPartition(gm, node);
- } else if (Model.getFacade().isACallState(node)) {
- figNode = new FigCallState(gm, node);
- } else if (Model.getFacade().isAObjectFlowState(node)) {
- figNode = new FigObjectFlowState(gm, node);
- } else if (Model.getFacade().isASubactivityState(node)) {
- figNode = new FigSubactivityState(gm, node);
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ figNode = ((UMLDiagram) diag).drop(node, null);
} else {
figNode = super.getFigNodeFor(gm, lay, node, styleAttributes);
- if (figNode == null) return null;
+ if (figNode == null) {
+ return null;
+ }
}
lay.add(figNode);
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java 2008-10-28 17:09:57-0700
@@ -24,6 +24,7 @@
package org.argouml.uml.diagram.activity.ui;
+import java.awt.Point;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.util.ArrayList;
@@ -36,6 +37,7 @@
import javax.swing.Action;
+import org.apache.log4j.Logger;
import org.argouml.i18n.Translator;
import org.argouml.model.ActivityGraphsHelper;
import org.argouml.model.DeleteInstanceEvent;
@@ -78,6 +80,12 @@
public class UMLActivityDiagram extends UMLDiagram {
/**
+ * Logger.
+ */
+ private static final Logger LOG =
+ Logger.getLogger(UMLActivityDiagram.class);
+
+ /**
* The UID.
*/
private static final long serialVersionUID = 6223128918989919230L;
@@ -172,9 +180,9 @@
setup(context, o);
}
} else {
- Object namespace = Model.getFacade().getNamespace(o);
- if (namespace != null) {
- setup(namespace, o);
+ Object namespace4Diagram = Model.getFacade().getNamespace(o);
+ if (namespace4Diagram != null) {
+ setup(namespace4Diagram, o);
} else {
throw new IllegalStateException("Cannot find context "
+ "nor namespace while initializing activity diagram");
@@ -744,5 +752,49 @@
private boolean isStateInPartition(Object state, Object partition) {
return Model.getFacade().getContents(partition).contains(state);
}
+
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isAPartition(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isACallState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAObjectFlowState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isASubactivityState(objectToAccept)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+ GraphModel gm = getGraphModel();
+
+ if (Model.getFacade().isAPartition(droppedObject)) {
+ figNode = new FigPartition(gm, droppedObject);
+ } else if (Model.getFacade().isACallState(droppedObject)) {
+ figNode = new FigCallState(gm, droppedObject);
+ } else if (Model.getFacade().isAObjectFlowState(droppedObject)) {
+ figNode = new FigObjectFlowState(gm, droppedObject);
+ } else if (Model.getFacade().isASubactivityState(droppedObject)) {
+ figNode = new FigSubactivityState(gm, droppedObject);
+ }
+
+ if (figNode != null) {
+ // if location is null here the position of the new figNode is set
+ // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
+ if (location != null) {
+ figNode.setLocation(location.x, location.y);
+ }
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + figNode);
+ }
+
+ return figNode;
+ }
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/CollabDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -27,14 +27,15 @@
import java.util.Map;
import org.apache.log4j.Logger;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
import org.argouml.uml.CommentEdge;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.UmlDiagramRenderer;
-import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
import org.argouml.uml.diagram.ui.FigDependency;
import org.argouml.uml.diagram.ui.FigGeneralization;
-import org.argouml.uml.diagram.ui.FigMessage;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigEdge;
@@ -82,14 +83,12 @@
Object node, Map styleAttributes) {
FigNode figNode = null;
-
- if (Model.getFacade().isAClassifierRole(node)) {
- figNode = new FigClassifierRole(gm, lay, node);
- } else if (Model.getFacade().isAMessage(node)) {
- figNode = new FigMessage(gm, lay, node);
- } else if (Model.getFacade().isAComment(node)) {
- figNode = new FigComment(gm, node);
- } else {
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ figNode = ((UMLDiagram) diag).drop(node, null);
+ } else {
LOG.debug("TODO: CollabDiagramRenderer getFigNodeFor");
return null;
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java 2008-10-28 17:09:57-0700
@@ -24,6 +24,7 @@
package org.argouml.uml.diagram.collaboration.ui;
+import java.awt.Point;
import java.beans.PropertyVetoException;
import java.util.Collection;
import java.util.HashSet;
@@ -35,6 +36,7 @@
import org.argouml.i18n.Translator;
import org.argouml.model.Model;
import org.argouml.uml.diagram.collaboration.CollabDiagramGraphModel;
+import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.ui.ActionAddAssociationRole;
import org.argouml.uml.diagram.ui.ActionAddMessage;
import org.argouml.uml.diagram.ui.ActionSetMode;
@@ -42,10 +44,13 @@
import org.argouml.uml.diagram.ui.RadioAction;
import org.argouml.uml.diagram.ui.UMLDiagram;
import org.argouml.util.ToolBarUtility;
+import org.tigris.gef.base.Editor;
+import org.tigris.gef.base.Globals;
import org.tigris.gef.base.Layer;
import org.tigris.gef.base.LayerPerspective;
import org.tigris.gef.base.LayerPerspectiveMutable;
import org.tigris.gef.base.ModeCreatePolyEdge;
+import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.Fig;
import org.tigris.gef.presentation.FigNode;
@@ -424,6 +429,109 @@
FigNode oldEncloser, FigNode newEncloser) {
// Do nothing.
}
+
+ /**
+ * A sequence diagram can accept all classifiers. It will add them as a new
+ * Classifier Role with that classifier as a base. All other accepted figs
+ * are added as is.
+ * @param objectToAccept
+ * @return true if the diagram can accept the object, else false
+ * @see org.argouml.uml.diagram.ui.UMLDiagram#doesAccept(java.lang.Object)
+ */
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isAClassifierRole(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAMessage(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComment(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAClassifierRole(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAClassifier(objectToAccept)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Creates a new Classifier Role with a specified base.
+ * @param base
+ * @return The new CR
+ */
+ private Object makeNewCR(Object base) {
+ Object node = null;
+ Editor ce = Globals.curEditor();
+ GraphModel gm = ce.getGraphModel();
+ if (gm instanceof CollabDiagramGraphModel) {
+ Object collaboration =
+ ((CollabDiagramGraphModel) gm).getHomeModel();
+ node =
+ Model.getCollaborationsFactory().buildClassifierRole(
+ collaboration);
+ }
+ Model.getCollaborationsHelper().addBase(node, base);
+
+ return node;
+ }
+
+ /**
+ * Creates the Fig for the CR. Y position will be adjusted to match other
+ * the other CRs.
+ * @param classifierRole
+ * @param location The position where to put the new fig.
+ * @return
+ */
+ private FigClassifierRole makeNewFigCR(Object classifierRole,
+ Point location) {
+
+ FigClassifierRole newCR = new FigClassifierRole(getGraphModel(),
+ getLayer(), classifierRole);
+
+ getGraphModel().getNodes().add(newCR.getOwner());
+
+ newCR.setY(location.y);
+ newCR.setX(location.x);
+ return newCR;
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+ GraphModel gm = getGraphModel();
+ Layer lay = Globals.curEditor().getLayerManager().getActiveLayer();
+
+ if (Model.getFacade().isAClassifierRole(droppedObject)) {
+ figNode = new FigClassifierRole(gm, lay, droppedObject);
+ } else if (Model.getFacade().isAMessage(droppedObject)) {
+ figNode = new FigMessage(gm, lay, droppedObject);
+ } else if (Model.getFacade().isAComment(droppedObject)) {
+ figNode = new FigComment(gm, droppedObject);
+ } else if (Model.getFacade().isAClassifierRole(droppedObject)) {
+ figNode = makeNewFigCR(droppedObject, location);
+ } else if (Model.getFacade().isAClassifier(droppedObject)){
+ figNode = makeNewFigCR(makeNewCR(droppedObject), location);
+ }
+ if (figNode != null) {
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + droppedObject);
+ }
+ return figNode;
+ }
+
+ @Override
+ public String getInstructions(Object droppedObject) {
+ if (Model.getFacade().isAClassifierRole(droppedObject)) {
+ return super.getInstructions(droppedObject);
+ } else if (Model.getFacade().isAClassifier(droppedObject)) {
+ return Translator.localize(
+ "misc.message.click-on-diagram-to-add-as-cr",
+ new Object[] {Model.getFacade().toString(droppedObject)});
+ }
+ return super.getInstructions(droppedObject);
+ }
/**
* The UID.
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/DeploymentDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -28,20 +28,19 @@
import java.util.Map;
import org.apache.log4j.Logger;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
import org.argouml.uml.CommentEdge;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.UmlDiagramRenderer;
-import org.argouml.uml.diagram.static_structure.ui.FigClass;
-import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
-import org.argouml.uml.diagram.static_structure.ui.FigInterface;
import org.argouml.uml.diagram.static_structure.ui.FigLink;
import org.argouml.uml.diagram.ui.FigAssociation;
import org.argouml.uml.diagram.ui.FigAssociationClass;
import org.argouml.uml.diagram.ui.FigAssociationEnd;
import org.argouml.uml.diagram.ui.FigDependency;
import org.argouml.uml.diagram.ui.FigGeneralization;
-import org.argouml.uml.diagram.ui.FigNodeAssociation;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigEdge;
@@ -74,29 +73,15 @@
FigNode figNode = null;
- if (Model.getFacade().isANode(node)) {
- figNode = new FigMNode(gm, node);
- } else if (Model.getFacade().isAAssociation(node)) {
- figNode = new FigNodeAssociation(gm, node);
- } else if (Model.getFacade().isANodeInstance(node)) {
- figNode = new FigNodeInstance(gm, node);
- } else if (Model.getFacade().isAComponent(node)) {
- figNode = new FigComponent(gm, node);
- } else if (Model.getFacade().isAComponentInstance(node)) {
- figNode = new FigComponentInstance(gm, node);
- } else if (Model.getFacade().isAClass(node)) {
- figNode = new FigClass(gm, node);
- } else if (Model.getFacade().isAInterface(node)) {
- figNode = new FigInterface(gm, node);
- } else if (Model.getFacade().isAObject(node)) {
- figNode = new FigObject(gm, node);
- } else if (Model.getFacade().isAComment(node)) {
- figNode = new FigComment(gm, node);
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ figNode = ((UMLDiagram) diag).drop(node, null);
} else {
LOG.debug("TODO: DeploymentDiagramRenderer getFigNodeFor");
return null;
}
-
lay.add(figNode);
return figNode;
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java 2008-10-28 17:09:57-0700
@@ -24,6 +24,7 @@
package org.argouml.uml.diagram.deployment.ui;
+import java.awt.Point;
import java.beans.PropertyVetoException;
import java.util.ArrayList;
import java.util.Collection;
@@ -36,14 +37,19 @@
import org.argouml.model.Model;
import org.argouml.ui.CmdCreateNode;
import org.argouml.uml.diagram.deployment.DeploymentDiagramGraphModel;
+import org.argouml.uml.diagram.static_structure.ui.FigClass;
+import org.argouml.uml.diagram.static_structure.ui.FigComment;
+import org.argouml.uml.diagram.static_structure.ui.FigInterface;
import org.argouml.uml.diagram.ui.ActionSetAddAssociationMode;
import org.argouml.uml.diagram.ui.ActionSetMode;
+import org.argouml.uml.diagram.ui.FigNodeAssociation;
import org.argouml.uml.diagram.ui.RadioAction;
import org.argouml.uml.diagram.ui.UMLDiagram;
import org.argouml.util.ToolBarUtility;
import org.tigris.gef.base.LayerPerspective;
import org.tigris.gef.base.LayerPerspectiveMutable;
import org.tigris.gef.base.ModeCreatePolyEdge;
+import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigNode;
/**
@@ -519,5 +525,69 @@
}
}
}
+
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isANode(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAAssociation(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isANodeInstance(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComponent(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComponentInstance(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAClass(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAInterface(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAObject(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComment(objectToAccept)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+ GraphModel gm = getGraphModel();
+
+ if (Model.getFacade().isANode(droppedObject)) {
+ figNode = new FigMNode(gm, droppedObject);
+ } else if (Model.getFacade().isAAssociation(droppedObject)) {
+ figNode = new FigNodeAssociation(gm, droppedObject);
+ } else if (Model.getFacade().isANodeInstance(droppedObject)) {
+ figNode = new FigNodeInstance(gm, droppedObject);
+ } else if (Model.getFacade().isAComponent(droppedObject)) {
+ figNode = new FigComponent(gm, droppedObject);
+ } else if (Model.getFacade().isAComponentInstance(droppedObject)) {
+ figNode = new FigComponentInstance(gm, droppedObject);
+ } else if (Model.getFacade().isAClass(droppedObject)) {
+ figNode = new FigClass(gm, droppedObject);
+ } else if (Model.getFacade().isAInterface(droppedObject)) {
+ figNode = new FigInterface(gm, droppedObject);
+ } else if (Model.getFacade().isAObject(droppedObject)) {
+ figNode = new FigObject(gm, droppedObject);
+ } else if (Model.getFacade().isAComment(droppedObject)) {
+ figNode = new FigComment(gm, droppedObject);
+ }
+
+ if (figNode != null) {
+ // if location is null here the position of the new figNode is set
+ // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
+ if (location != null) {
+ figNode.setLocation(location.x, location.y);
+ }
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + figNode);
+ }
+
+ return figNode;
+ }
}
\ No newline at end of file
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/StateDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -27,12 +27,13 @@
import java.util.Map;
import org.apache.log4j.Logger;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
import org.argouml.uml.CommentEdge;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.UmlDiagramRenderer;
-import org.argouml.uml.diagram.activity.ui.FigActionState;
-import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigEdge;
@@ -80,55 +81,12 @@
Map styleAttributes) {
FigNode figNode = null;
-
- if (Model.getFacade().isAActionState(node)) {
- figNode = new FigActionState(gm, node);
- } else if (Model.getFacade().isAFinalState(node)) {
- figNode = new FigFinalState(gm, node);
- } else if (Model.getFacade().isAStubState(node)) {
- figNode = new FigStubState(gm, node);
- } else if (Model.getFacade().isASubmachineState(node)) {
- figNode = new FigSubmachineState(gm, node);
- } else if (Model.getFacade().isACompositeState(node)) {
- figNode = new FigCompositeState(gm, node);
- } else if (Model.getFacade().isASynchState(node)) {
- figNode = new FigSynchState(gm, node);
- } else if (Model.getFacade().isAState(node)) {
- figNode = new FigSimpleState(gm, node);
- } else if (Model.getFacade().isAComment(node)) {
- figNode = new FigComment(gm, node);
- } else if (Model.getFacade().isAPseudostate(node)) {
- Object pState = node;
- Object kind = Model.getFacade().getKind(pState);
- if (kind == null) {
- LOG.warn("found a null type pseudostate");
- return null;
- }
- if (kind.equals(Model.getPseudostateKind().getInitial())) {
- figNode = new FigInitialState(gm, node);
- } else if (kind.equals(
- Model.getPseudostateKind().getChoice())) {
- figNode = new FigBranchState(gm, node);
- } else if (kind.equals(
- Model.getPseudostateKind().getJunction())) {
- figNode = new FigJunctionState(gm, node);
- } else if (kind.equals(
- Model.getPseudostateKind().getFork())) {
- figNode = new FigForkState(gm, node);
- } else if (kind.equals(
- Model.getPseudostateKind().getJoin())) {
- figNode = new FigJoinState(gm, node);
- } else if (kind.equals(
- Model.getPseudostateKind().getShallowHistory())) {
- figNode = new FigShallowHistoryState(gm, node);
- } else if (kind.equals(
- Model.getPseudostateKind().getDeepHistory())) {
- figNode = new FigDeepHistoryState(gm, node);
- } else {
- LOG.warn("found a type not known");
- }
- }
- if (figNode == null) {
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ figNode = ((UMLDiagram) diag).drop(node, null);
+ } else {
LOG.debug("TODO: StateDiagramRenderer getFigNodeFor");
return null;
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java 2008-10-28 17:09:57-0700
@@ -24,6 +24,7 @@
package org.argouml.uml.diagram.state.ui;
+import java.awt.Point;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.util.Collection;
@@ -37,7 +38,9 @@
import org.argouml.model.Model;
import org.argouml.ui.CmdCreateNode;
import org.argouml.uml.diagram.UMLMutableGraphSupport;
+import org.argouml.uml.diagram.activity.ui.FigActionState;
import org.argouml.uml.diagram.state.StateDiagramGraphModel;
+import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.ui.ActionSetMode;
import org.argouml.uml.diagram.ui.RadioAction;
import org.argouml.uml.diagram.ui.UMLDiagram;
@@ -54,6 +57,7 @@
import org.tigris.gef.base.LayerPerspective;
import org.tigris.gef.base.LayerPerspectiveMutable;
import org.tigris.gef.base.ModeCreatePolyEdge;
+import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigNode;
@@ -727,4 +731,95 @@
// Do nothing.
}
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isAActionState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAFinalState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAStubState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isASubmachineState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isACompositeState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isASynchState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAState(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComment(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAPseudostate(objectToAccept)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+ GraphModel gm = getGraphModel();
+
+ if (Model.getFacade().isAActionState(droppedObject)) {
+ figNode = new FigActionState(gm, droppedObject);
+ } else if (Model.getFacade().isAFinalState(droppedObject)) {
+ figNode = new FigFinalState(gm, droppedObject);
+ } else if (Model.getFacade().isAStubState(droppedObject)) {
+ figNode = new FigStubState(gm, droppedObject);
+ } else if (Model.getFacade().isASubmachineState(droppedObject)) {
+ figNode = new FigSubmachineState(gm, droppedObject);
+ } else if (Model.getFacade().isACompositeState(droppedObject)) {
+ figNode = new FigCompositeState(gm, droppedObject);
+ } else if (Model.getFacade().isASynchState(droppedObject)) {
+ figNode = new FigSynchState(gm, droppedObject);
+ } else if (Model.getFacade().isAState(droppedObject)) {
+ figNode = new FigSimpleState(gm, droppedObject);
+ } else if (Model.getFacade().isAComment(droppedObject)) {
+ figNode = new FigComment(gm, droppedObject);
+ } else if (Model.getFacade().isAPseudostate(droppedObject)) {
+ Object pState = droppedObject;
+ Object kind = Model.getFacade().getKind(pState);
+ if (kind == null) {
+ LOG.warn("found a null type pseudostate");
+ return null;
+ }
+ if (kind.equals(Model.getPseudostateKind().getInitial())) {
+ figNode = new FigInitialState(gm, droppedObject);
+ } else if (kind.equals(
+ Model.getPseudostateKind().getChoice())) {
+ figNode = new FigBranchState(gm, droppedObject);
+ } else if (kind.equals(
+ Model.getPseudostateKind().getJunction())) {
+ figNode = new FigJunctionState(gm, droppedObject);
+ } else if (kind.equals(
+ Model.getPseudostateKind().getFork())) {
+ figNode = new FigForkState(gm, droppedObject);
+ } else if (kind.equals(
+ Model.getPseudostateKind().getJoin())) {
+ figNode = new FigJoinState(gm, droppedObject);
+ } else if (kind.equals(
+ Model.getPseudostateKind().getShallowHistory())) {
+ figNode = new FigShallowHistoryState(gm, droppedObject);
+ } else if (kind.equals(
+ Model.getPseudostateKind().getDeepHistory())) {
+ figNode = new FigDeepHistoryState(gm, droppedObject);
+ } else {
+ LOG.warn("found a type not known");
+ }
+ }
+
+ if (figNode != null) {
+ // if location is null here the position of the new figNode is set
+ // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
+ if (location != null) {
+ figNode.setLocation(location.x, location.y);
+ }
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + figNode);
+ }
+
+ return figNode;
+ }
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/ClassDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -29,29 +29,24 @@
import java.util.Map;
import org.apache.log4j.Logger;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.CoreFactory;
import org.argouml.model.Model;
import org.argouml.uml.CommentEdge;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.GraphChangeAdapter;
import org.argouml.uml.diagram.UmlDiagramRenderer;
-import org.argouml.uml.diagram.deployment.ui.FigComponent;
-import org.argouml.uml.diagram.deployment.ui.FigComponentInstance;
-import org.argouml.uml.diagram.deployment.ui.FigMNode;
-import org.argouml.uml.diagram.deployment.ui.FigNodeInstance;
-import org.argouml.uml.diagram.deployment.ui.FigObject;
import org.argouml.uml.diagram.ui.FigAssociation;
import org.argouml.uml.diagram.ui.FigAssociationClass;
import org.argouml.uml.diagram.ui.FigAssociationEnd;
import org.argouml.uml.diagram.ui.FigDependency;
import org.argouml.uml.diagram.ui.FigEdgeModelElement;
import org.argouml.uml.diagram.ui.FigGeneralization;
-import org.argouml.uml.diagram.ui.FigNodeAssociation;
import org.argouml.uml.diagram.ui.FigNodeModelElement;
import org.argouml.uml.diagram.ui.FigPermission;
import org.argouml.uml.diagram.ui.FigRealization;
import org.argouml.uml.diagram.ui.FigUsage;
-import org.argouml.uml.diagram.use_case.ui.FigActor;
-import org.argouml.uml.diagram.use_case.ui.FigUseCase;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigEdge;
@@ -114,44 +109,13 @@
if (node == null) {
throw new IllegalArgumentException("A node must be supplied");
}
- if (Model.getFacade().isAClass(node)) {
- figNode = new FigClass(gm, node);
- } else if (Model.getFacade().isAInterface(node)) {
- figNode = new FigInterface(gm, node);
- } else if (Model.getFacade().isAModel(node)) {
- figNode = new FigModel(gm, node);
- } else if (Model.getFacade().isASubsystem(node)) {
- figNode = new FigSubsystem(gm, node);
- } else if (Model.getFacade().isAPackage(node)) {
- figNode = new FigPackage(gm, node);
- } else if (Model.getFacade().isAComment(node)) {
- figNode = new FigComment(gm, node);
- } else if (Model.getFacade().isAAssociation(node)) {
- figNode = new FigNodeAssociation(gm, node);
- } else if (Model.getFacade().isAEnumeration(node)) {
- figNode = new FigEnumeration(gm, node);
- } else if (Model.getFacade().isADataType(node)) {
- figNode = new FigDataType(gm, node);
- } else if (Model.getFacade().isAStereotype(node)) {
- figNode = new FigStereotypeDeclaration(gm, node);
- } else if (Model.getFacade().isAException(node)) {
- figNode = new FigException(gm, node);
- } else if (Model.getFacade().isASignal(node)) {
- figNode = new FigSignal(gm, node);
- } else if (Model.getFacade().isAActor(node)) {
- figNode = new FigActor(gm, node);
- } else if (Model.getFacade().isAUseCase(node)) {
- figNode = new FigUseCase(gm, node);
- } else if (Model.getFacade().isAObject(node)) {
- figNode = new FigObject(gm, node);
- } else if (Model.getFacade().isANodeInstance(node)) {
- figNode = new FigNodeInstance(gm, node);
- } else if (Model.getFacade().isAComponentInstance(node)) {
- figNode = new FigComponentInstance(gm, node);
- } else if (Model.getFacade().isANode(node)) {
- figNode = new FigMNode(gm, node);
- } else if (Model.getFacade().isAComponent(node)) {
- figNode = new FigComponent(gm, node);
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ figNode = (FigNodeModelElement)
+ ((UMLDiagram) diag).drop(node, null);
+
} else {
LOG.error("TODO: ClassDiagramRenderer getFigNodeFor " + node);
throw new IllegalArgumentException(
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java 2008-10-28 17:09:57-0700
@@ -24,6 +24,7 @@
package org.argouml.uml.diagram.static_structure.ui;
+import java.awt.Point;
import java.beans.PropertyVetoException;
import java.util.Collection;
@@ -32,16 +33,25 @@
import org.apache.log4j.Logger;
import org.argouml.i18n.Translator;
import org.argouml.model.Model;
+import org.argouml.uml.diagram.deployment.ui.FigComponent;
+import org.argouml.uml.diagram.deployment.ui.FigComponentInstance;
+import org.argouml.uml.diagram.deployment.ui.FigMNode;
+import org.argouml.uml.diagram.deployment.ui.FigNodeInstance;
+import org.argouml.uml.diagram.deployment.ui.FigObject;
import org.argouml.uml.diagram.static_structure.ClassDiagramGraphModel;
+import org.argouml.uml.diagram.ui.FigNodeAssociation;
import org.argouml.uml.diagram.ui.ModeCreateDependency;
import org.argouml.uml.diagram.ui.ModeCreatePermission;
import org.argouml.uml.diagram.ui.ModeCreateUsage;
import org.argouml.uml.diagram.ui.UMLDiagram;
+import org.argouml.uml.diagram.use_case.ui.FigActor;
+import org.argouml.uml.diagram.use_case.ui.FigUseCase;
import org.argouml.uml.ui.foundation.core.ActionAddAttribute;
import org.argouml.uml.ui.foundation.core.ActionAddOperation;
import org.argouml.util.ToolBarUtility;
import org.tigris.gef.base.LayerPerspective;
import org.tigris.gef.base.LayerPerspectiveMutable;
+import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigNode;
/**
@@ -601,4 +611,108 @@
// Do nothing.
}
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isAClass(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAInterface(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAModel(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isASubsystem(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAPackage(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComment(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAAssociation(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAEnumeration(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isADataType(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAStereotype(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAException(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isASignal(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAActor(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAUseCase(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAObject(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isANodeInstance(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComponentInstance(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isANode(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComponent(objectToAccept)) {
+ return true;
+ }
+ return false;
+
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+ GraphModel gm = getGraphModel();
+
+ if (Model.getFacade().isAClass(droppedObject)) {
+ figNode = new FigClass(gm, droppedObject);
+ } else if (Model.getFacade().isAInterface(droppedObject)) {
+ figNode = new FigInterface(gm, droppedObject);
+ } else if (Model.getFacade().isAModel(droppedObject)) {
+ figNode = new FigModel(gm, droppedObject);
+ } else if (Model.getFacade().isASubsystem(droppedObject)) {
+ figNode = new FigSubsystem(gm, droppedObject);
+ } else if (Model.getFacade().isAPackage(droppedObject)) {
+ figNode = new FigPackage(gm, droppedObject);
+ } else if (Model.getFacade().isAComment(droppedObject)) {
+ figNode = new FigComment(gm, droppedObject);
+ } else if (Model.getFacade().isAAssociation(droppedObject)) {
+ figNode = new FigNodeAssociation(gm, droppedObject);
+ } else if (Model.getFacade().isAEnumeration(droppedObject)) {
+ figNode = new FigEnumeration(gm, droppedObject);
+ } else if (Model.getFacade().isADataType(droppedObject)) {
+ figNode = new FigDataType(gm, droppedObject);
+ } else if (Model.getFacade().isAStereotype(droppedObject)) {
+ figNode = new FigStereotypeDeclaration(gm, droppedObject);
+ } else if (Model.getFacade().isAException(droppedObject)) {
+ figNode = new FigException(gm, droppedObject);
+ } else if (Model.getFacade().isASignal(droppedObject)) {
+ figNode = new FigSignal(gm, droppedObject);
+ } else if (Model.getFacade().isAActor(droppedObject)) {
+ figNode = new FigActor(gm, droppedObject);
+ } else if (Model.getFacade().isAUseCase(droppedObject)) {
+ figNode = new FigUseCase(gm, droppedObject);
+ } else if (Model.getFacade().isAObject(droppedObject)) {
+ figNode = new FigObject(gm, droppedObject);
+ } else if (Model.getFacade().isANodeInstance(droppedObject)) {
+ figNode = new FigNodeInstance(gm, droppedObject);
+ } else if (Model.getFacade().isAComponentInstance(droppedObject)) {
+ figNode = new FigComponentInstance(gm, droppedObject);
+ } else if (Model.getFacade().isANode(droppedObject)) {
+ figNode = new FigMNode(gm, droppedObject);
+ } else if (Model.getFacade().isAComponent(droppedObject)) {
+ figNode = new FigComponent(gm, droppedObject);
+ }
+
+ if (figNode != null) {
+ // if location is null here the position of the new figNode is set
+ // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
+ if (location != null) {
+ figNode.setLocation(location.x, location.y);
+ }
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + figNode);
+ }
+ return figNode;
+ }
+
} /* end class UMLClassDiagram */
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNode.java 2008-10-28 17:09:57-0700
@@ -73,6 +73,12 @@
if (dia == null) {
return false;
}
+
+ if (dia instanceof UMLDiagram
+ && ((UMLDiagram) dia).doesAccept(object)) {
+ return true;
+ }
+
MutableGraphModel gm = (MutableGraphModel) dia.getGraphModel();
return gm.canAddNode(target);
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAddExistingNodes.java 2008-10-28 17:09:57-0700
@@ -115,7 +115,10 @@
Collection oldTargets = TargetManager.getInstance().getTargets();
int count = 0;
for (Object me : modelElements) {
- if (Model.getFacade().isANaryAssociation(me)) {
+ if (diagram instanceof UMLDiagram
+ && ((UMLDiagram) diagram).doesAccept(me)) {
+ ((UMLDiagram) diagram).drop(me, location);
+ } else if (Model.getFacade().isANaryAssociation(me)) {
AddExistingNodeCommand cmd =
new AddExistingNodeCommand(me, location,
count++);
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/AddExistingNodeCommand.java 2008-10-28 17:09:57-0700
@@ -114,18 +114,30 @@
}
String instructions = null;
+ ModePlace placeMode = null;
if (object != null) {
- instructions =
- Translator.localize(
- "misc.message.click-on-diagram-to-add",
- new Object[] {
- Model.getFacade().toString(object),
- });
+ ArgoDiagram activeDiagram = ProjectManager.getManager().
+ getCurrentProject().getActiveDiagram();
+
+ if (activeDiagram instanceof UMLDiagram &&
+ ((UMLDiagram) activeDiagram).doesAccept(object)) {
+ instructions = ((UMLDiagram) activeDiagram).
+ getInstructions(object);
+ placeMode = ((UMLDiagram) activeDiagram).
+ getModePlace(this, instructions);
+ placeMode.setAddRelatedEdges(true);
+ } else {
+ // TODO: work here !
+ instructions =
+ Translator.localize(
+ "misc.message.click-on-diagram-to-add",
+ new Object[] {Model.getFacade().toString(object),});
+ placeMode = new ModePlace(this, instructions);
+ placeMode.setAddRelatedEdges(true);
+ }
Globals.showStatus(instructions);
}
- ModePlace placeMode = new ModePlace(this, instructions);
- placeMode.setAddRelatedEdges(true);
-
+
if (location == null) {
Globals.mode(placeMode, false);
} else {
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/DnDJGraph.java 2008-10-28 17:09:57-0700
@@ -34,16 +34,21 @@
import java.awt.dnd.DropTargetListener;
import java.io.IOException;
import java.util.Collection;
+import java.util.Iterator;
import org.apache.log4j.Logger;
import org.argouml.kernel.ProjectManager;
import org.argouml.ui.TransferableModelElements;
import org.argouml.uml.diagram.ArgoDiagram;
+import org.argouml.uml.diagram.use_case.ui.UMLUseCaseDiagram;
import org.tigris.gef.base.Diagram;
import org.tigris.gef.base.Editor;
+import org.tigris.gef.base.Globals;
+import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.ConnectionConstrainer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.graph.presentation.JGraph;
+import org.tigris.gef.presentation.FigNode;
/**
* This is a JGraph with Drag and Drop capabilities.
@@ -134,6 +139,13 @@
*/
public void dragOver(DropTargetDragEvent dtde) {
try {
+ ArgoDiagram dia = ProjectManager.getManager().
+ getCurrentProject().getActiveDiagram();
+ if (dia instanceof UMLDiagram
+ /*&& ((UMLDiagram) dia).doesAccept(dtde.getSource())*/) {
+ dtde.acceptDrag(dtde.getDropAction());
+ return;
+ }
if (dtde.isDataFlavorSupported(
TransferableModelElements.UML_COLLECTION_FLAVOR)) {
dtde.acceptDrag(dtde.getDropAction());
@@ -176,16 +188,33 @@
dropTargetDropEvent.acceptDrop(dropTargetDropEvent.getDropAction());
//get the model elements that are being transfered.
- Collection modelElements;
+ Collection modelElements;
try {
ArgoDiagram diagram = ProjectManager.getManager()
.getCurrentProject().getActiveDiagram();
modelElements =
(Collection) tr.getTransferData(
TransferableModelElements.UML_COLLECTION_FLAVOR);
+
+ Iterator i = modelElements.iterator();
+ while (i.hasNext()) {
+ FigNode figNode = ((UMLDiagram )diagram).drop(i.next(),
+ dropTargetDropEvent.getLocation());
+
+// if (diagram instanceof UMLUseCaseDiagram) {
+ GraphModel gm = diagram.getGraphModel();
+ if (!gm.getNodes().contains(figNode.getOwner())) {
+ gm.getNodes().add(figNode.getOwner());
+ }
+
+ Globals.curEditor().getLayerManager().getActiveLayer()
+ .add(figNode);
+// }
+
+ }
- ActionAddExistingNodes.addNodes(modelElements,
- dropTargetDropEvent.getLocation(), diagram);
+// ActionAddExistingNodes.addNodes(modelElements,
+// dropTargetDropEvent.getLocation(), diagram);
dropTargetDropEvent.getDropTargetContext().dropComplete(true);
} catch (UnsupportedFlavorException e) {
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java 2008-10-28 17:09:57-0700
@@ -25,6 +25,7 @@
package org.argouml.uml.diagram.ui;
import java.awt.Component;
+import java.awt.Point;
import java.beans.PropertyVetoException;
import javax.swing.Action;
@@ -51,7 +52,10 @@
import org.argouml.util.ToolBarUtility;
import org.tigris.gef.base.ModeBroom;
import org.tigris.gef.base.ModeCreatePolyEdge;
+import org.tigris.gef.base.ModePlace;
import org.tigris.gef.base.ModeSelect;
+import org.tigris.gef.graph.GraphFactory;
+import org.tigris.gef.presentation.FigNode;
import org.tigris.toolbar.ToolBarFactory;
import org.tigris.toolbar.ToolBarManager;
import org.tigris.toolbar.toolbutton.ToolButton;
@@ -561,7 +565,53 @@
}
/**
- * The UID.
+ * Method to test it the diagram can accept a certain object.
+ * This should be overriden by any diagram that wants to accept a certain
+ * type of object. All other diagrams should not bother since the default
+ * answer is false, ie. don't accept the object.
+ * @param objectToAccept The object which acceptability will be checked.
+ * @return True if it can accept it, false otherwise.
+ */
+ public boolean doesAccept(
+ @SuppressWarnings("unused") Object objectToAccept) {
+ return false;
+ }
+
+ /**
+ * Handles elements dropped over.
+ * @param droppedObject The dropped object.
+ * @param location The location in the diagram where the object is dropped.
+ * @return The object that has been added to the diagram.
+ */
+ @SuppressWarnings("unused")
+ public FigNode drop(Object droppedObject, Point location) {
+ return null;
+ }
+
+ /**
+ * Gets the instructions to be displayed on the status bar.
+ * @param droppedObject The object for which instructions will be given.
+ * @return The instructions.
+ */
+ public String getInstructions(Object droppedObject) {
+ return Translator.localize("misc.message.click-on-diagram-to-add",
+ new Object[] {Model.getFacade().toString(droppedObject), });
+ }
+
+ /**
+ * Creates a diagram specific @see org.tigris.gef.base.ModePlace that
+ * allows the diagram to place an accepted type of object
+ * [ @see #doesAccept(Object) ] as it should. This is required 1. since a
+ * diagram may receive an object that can't be placed as is, but needs some
+ * transformation and 2. diagrams in modules should be independent from the
+ * main app, and should use their own implementation of ModePlace if it's
+ * required.
+ * @param gf TODO
+ * @param instructions
+ * @return The created ModePlace.
*/
- static final long serialVersionUID = -401219134410459387L;
+ public ModePlace getModePlace(GraphFactory gf, String instructions) {
+ return new ModePlace(gf, instructions);
+ }
+
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java 2008-10-28 17:09:57-0700
@@ -24,6 +24,7 @@
package org.argouml.uml.diagram.use_case.ui;
+import java.awt.Point;
import java.beans.PropertyVetoException;
import java.util.Collection;
import java.util.HashSet;
@@ -34,6 +35,8 @@
import org.argouml.i18n.Translator;
import org.argouml.model.Model;
import org.argouml.ui.CmdCreateNode;
+import org.argouml.uml.diagram.static_structure.ui.FigComment;
+import org.argouml.uml.diagram.static_structure.ui.FigPackage;
import org.argouml.uml.diagram.ui.ActionAddExtensionPoint;
import org.argouml.uml.diagram.ui.ActionSetAddAssociationMode;
import org.argouml.uml.diagram.ui.ActionSetMode;
@@ -44,6 +47,7 @@
import org.tigris.gef.base.LayerPerspective;
import org.tigris.gef.base.LayerPerspectiveMutable;
import org.tigris.gef.base.ModeCreatePolyEdge;
+import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigNode;
/**
@@ -463,5 +467,47 @@
FigNode oldEncloser, FigNode newEncloser) {
// Do nothing.
}
+
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isAActor(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAUseCase(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAComment(objectToAccept)) {
+ return true;
+ } else if (Model.getFacade().isAPackage(objectToAccept)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+ GraphModel gm = getGraphModel();
+
+ if (Model.getFacade().isAActor(droppedObject)) {
+ figNode = new FigActor(gm, droppedObject);
+ } else if (Model.getFacade().isAUseCase(droppedObject)) {
+ figNode = new FigUseCase(gm, droppedObject);
+ } else if (Model.getFacade().isAComment(droppedObject)) {
+ figNode = new FigComment(gm, droppedObject);
+ } else if (Model.getFacade().isAPackage(droppedObject)) {
+ figNode = new FigPackage(gm, droppedObject);
+ }
+ if (figNode != null) {
+ // if location is null here the position of the new figNode is set
+ // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
+ if (location != null) {
+ figNode.setLocation(location.x, location.y);
+ }
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + figNode);
+ }
+ return figNode;
+ }
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UseCaseDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -27,18 +27,19 @@
import java.util.Map;
import org.apache.log4j.Logger;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
import org.argouml.uml.CommentEdge;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.GraphChangeAdapter;
import org.argouml.uml.diagram.UmlDiagramRenderer;
-import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
-import org.argouml.uml.diagram.static_structure.ui.FigPackage;
import org.argouml.uml.diagram.ui.FigAssociation;
import org.argouml.uml.diagram.ui.FigDependency;
import org.argouml.uml.diagram.ui.FigEdgeModelElement;
import org.argouml.uml.diagram.ui.FigGeneralization;
import org.argouml.uml.diagram.ui.FigNodeModelElement;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigEdge;
@@ -100,21 +101,19 @@
// Create a new version of the relevant fig
- if (Model.getFacade().isAActor(node)) {
- figNode = new FigActor(gm, node);
- } else if (Model.getFacade().isAUseCase(node)) {
- figNode = new FigUseCase(gm, node);
- } else if (Model.getFacade().isAComment(node)) {
- figNode = new FigComment(gm, node);
- } else if (Model.getFacade().isAPackage(node)) {
- figNode = new FigPackage(gm, node);
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ figNode = (FigNodeModelElement) ((UMLDiagram) diag).drop(node, null);
+
} else {
LOG.debug(this.getClass().toString()
+ ": getFigNodeFor(" + gm.toString() + ", "
+ lay.toString() + ", " + node.toString()
+ ") - cannot create this sort of node.");
return null;
- // TODO: Shouldn't we throw an excdeption here?!?!
+ // TODO: Shouldn't we throw an exception here?!?!
}
lay.add(figNode);
Modified: trunk/src/argouml-core-diagrams-sequence2/ArgoUML Sequence2.launch
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/ArgoUML%20Sequence2.launch?view=diff&rev=15950&p1=trunk/src/argouml-core-diagrams-sequence2/ArgoUML%20Sequence2.launch&p2=trunk/src/argouml-core-diagrams-sequence2/ArgoUML%20Sequence2.launch&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-core-diagrams-sequence2/ArgoUML Sequence2.launch (original)
+++ trunk/src/argouml-core-diagrams-sequence2/ArgoUML Sequence2.launch 2008-10-28 17:09:57-0700
@@ -39,5 +39,5 @@
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.argouml.application.Main"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="argouml-app"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512M -ea -Dargouml.modules=org.argouml.uml.diagram.sequence2.module.SequenceDiagramModule"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512M -ea -Dargouml.modules=org.argouml.uml.diagram.sequence2.module.SequenceDiagramModule -Dlog4j.configuration=org/argouml/resource/full_console.lcf"/>
</launchConfiguration>
Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java?view=diff&rev=15950&p1=trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java&p2=trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java (original)
+++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/SequenceDiagramRenderer.java 2008-10-28 17:09:57-0700
@@ -27,11 +27,14 @@
import java.util.Map;
import org.apache.log4j.Logger;
+import org.argouml.kernel.ProjectManager;
import org.argouml.model.Model;
import org.argouml.uml.CommentEdge;
+import org.argouml.uml.diagram.ArgoDiagram;
import org.argouml.uml.diagram.UmlDiagramRenderer;
import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.static_structure.ui.FigEdgeNote;
+import org.argouml.uml.diagram.ui.UMLDiagram;
import org.tigris.gef.base.Layer;
import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.presentation.FigEdge;
@@ -57,18 +60,18 @@
public FigNode getFigNodeFor(GraphModel gm, Layer lay, Object node,
Map styleAttributes) {
FigNode result = null;
- if (Model.getFacade().isAClassifierRole(node)) {
- result = new FigClassifierRole(node);
- } else if (Model.getFacade().isAComment(node)) {
- result = new FigComment(gm, node);
+ ArgoDiagram diag = ProjectManager.getManager().getCurrentProject()
+ .getActiveDiagram();
+ if (diag instanceof UMLDiagram
+ && ((UMLDiagram) diag).doesAccept(node)) {
+ result = ((UMLDiagram) diag).drop(node, null);
+ } else {
+ return null;
}
- LOG.debug("SequenceDiagramRenderer getFigNodeFor " + result);
lay.add(result);
- return result;
+ return result;
}
-
-
/*
* @see org.tigris.gef.graph.GraphEdgeRenderer#getFigEdgeFor(
* org.tigris.gef.graph.GraphModel, org.tigris.gef.base.Layer,
Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java?view=diff&rev=15950&p1=trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java&p2=trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java&r1=15949&r2=15950
==============================================================================
--- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java (original)
+++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/uml/diagram/sequence2/ui/UMLSequenceDiagram.java 2008-10-28 17:09:57-0700
@@ -24,8 +24,10 @@
package org.argouml.uml.diagram.sequence2.ui;
+import java.awt.Point;
import java.beans.PropertyVetoException;
import java.util.Collection;
+import java.util.List;
import org.apache.log4j.Logger;
import org.argouml.i18n.Translator;
@@ -33,12 +35,19 @@
import org.argouml.model.Model;
import org.argouml.uml.diagram.sequence2.ActionSetAddMessageMode;
import org.argouml.uml.diagram.sequence2.SequenceDiagramGraphModel;
+import org.argouml.uml.diagram.static_structure.ui.FigComment;
import org.argouml.uml.diagram.ui.ActionSetMode;
import org.argouml.uml.diagram.ui.RadioAction;
import org.argouml.uml.diagram.ui.UMLDiagram;
+import org.tigris.gef.base.Editor;
+import org.tigris.gef.base.Globals;
import org.tigris.gef.base.LayerPerspective;
import org.tigris.gef.base.LayerPerspectiveMutable;
+import org.tigris.gef.base.ModePlace;
+import org.tigris.gef.graph.GraphFactory;
+import org.tigris.gef.graph.GraphModel;
import org.tigris.gef.graph.MutableGraphModel;
+import org.tigris.gef.presentation.Fig;
import org.tigris.gef.presentation.FigNode;
/**
@@ -76,6 +85,7 @@
LOG.debug("Created sequence diagram");
}
+
/**
* Creates a new UmlSequenceDiagram with a collaboration.
* @param collaboration The collaboration
@@ -172,4 +182,116 @@
damage();
return true;
}
+
+ /**
+ * A sequence diagram can accept all classifiers. It will add them as a new
+ * Classifier Role with that classifier as a base.
+ * @param objectToAccept
+ * @return
+ * @see org.argouml.uml.diagram.ui.UMLDiagram#doesAccept(java.lang.Object)
+ */
+ @Override
+ public boolean doesAccept(Object objectToAccept) {
+ if (Model.getFacade().isAClassifier(objectToAccept)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Creates a new Classifier Role with a specified base.
+ * @param base
+ * @return The new CR
+ */
+ private Object makeNewCR(Object base) {
+ Object node = null;
+ Editor ce = Globals.curEditor();
+ GraphModel gm = ce.getGraphModel();
+ if (gm instanceof SequenceDiagramGraphModel) {
+ Object collaboration =
+ ((SequenceDiagramGraphModel) gm).getCollaboration();
+ node =
+ Model.getCollaborationsFactory().buildClassifierRole(
+ collaboration);
+ }
+ Model.getCollaborationsHelper().addBase(node, base);
+
+ return node;
+ }
+
+ /**
+ * Creates the Fig for the CR. Y position will be adjusted to match other
+ * the other CRs.
+ * @param classifierRole
+ * @param location The position where to put the new fig.
+ * @return
+ */
+ private FigClassifierRole makeNewFigCR(Object classifierRole,
+ Point location) {
+
+ FigClassifierRole newCR = new FigClassifierRole(classifierRole);
+
+ getGraphModel().getNodes().add(newCR.getOwner());
+
+ // Y position of the new CR should match existing CRs Y position
+ List nodes = getLayer().getContentsNoEdges();
+ int i = 0;
+ boolean figClassifierRoleFound = false;
+ Fig fig = null;
+ while (i < nodes.size() && !figClassifierRoleFound) {
+ fig = (Fig) nodes.get(i);
+ if (nodes.get(i) instanceof Fig) {
+ if (fig != newCR && fig instanceof FigClassifierRole) {
+ newCR.setY(((Fig) fig).getY());
+ newCR.setHeight(((Fig) fig).getHeight());
+ figClassifierRoleFound = true;
+ }
+ }
+ i++;
+ }
+ if (location != null) {
+ if (newCR.getY() == 0) {
+ newCR.setY(location.y);
+ }
+ newCR.setX(location.x);
+ }
+ return newCR;
+ }
+
+ @Override
+ public FigNode drop(Object droppedObject, Point location) {
+ FigNode figNode = null;
+
+ if (Model.getFacade().isAComment(droppedObject)) {
+ figNode = new FigComment(getGraphModel(), droppedObject);
+ } else if (Model.getFacade().isAClassifierRole(droppedObject)) {
+ figNode = makeNewFigCR(droppedObject, location);
+ } else if (Model.getFacade().isAClassifier(droppedObject)){
+ figNode = makeNewFigCR(makeNewCR(droppedObject), location);
+ }
+ if (figNode != null) {
+ LOG.debug("Dropped object " + droppedObject + " converted to "
+ + figNode);
+ } else {
+ LOG.debug("Dropped object NOT added " + droppedObject);
+ }
+ return figNode;
+ }
+
+ @Override
+ public String getInstructions(Object droppedObject) {
+ if (Model.getFacade().isAClassifierRole(droppedObject)) {
+ return super.getInstructions(droppedObject);
+ } else if (Model.getFacade().isAClassifier(droppedObject)) {
+ return Translator.localize(
+ "misc.message.click-on-diagram-to-add-as-cr",
+ new Object[] {Model.getFacade().toString(droppedObject)});
+ }
+ return super.getInstructions(droppedObject);
+ }
+
+ @Override
+ public ModePlace getModePlace(GraphFactory gf, String instructions) {
+ return new ModePlaceClassifierRole(gf, instructions);
+ }
}
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.