Author: bobtarling
Date: 2008-04-19 17:00:01-0700
New Revision: 14411
Modified:
trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java
Log:
Scott Roberts patch to create model elements from explorer context http://argouml.tigris.org/issues/show_bug.cgi?id=1009
Modified: trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java?view=diff&rev=14411&p1=trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java&p2=trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java&r1=14410&r2=14411
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java (original)
+++ trunk/src/argouml-app/src/org/argouml/ui/explorer/ExplorerPopup.java 2008-04-19 17:00:01-0700
@@ -60,7 +60,6 @@
import org.argouml.kernel.ProfileConfiguration;
import org.argouml.profile.ProfileException;
import org.argouml.uml.ui.ActionActivityDiagram;
-import org.argouml.uml.ui.ActionAddPackage;
import org.argouml.uml.ui.ActionClassDiagram;
import org.argouml.uml.ui.ActionCollaborationDiagram;
import org.argouml.uml.ui.ActionDeleteModelElements;
@@ -70,6 +69,8 @@
import org.argouml.uml.ui.ActionSetSourcePath;
import org.argouml.uml.ui.ActionStateDiagram;
import org.argouml.uml.ui.ActionUseCaseDiagram;
+import org.argouml.uml.ui.AbstractActionNewModelElement;
+import org.argouml.model.NotImplementedException;
import org.tigris.gef.base.Diagram;
import org.tigris.gef.graph.MutableGraphModel;
@@ -83,6 +84,54 @@
private JMenu createDiagrams =
new JMenu(menuLocalize("menu.popup.create-diagram"));
+
+ private final Logger LOG =
+ Logger.getLogger(ExplorerPopup.class);
+
+ /**
+ * Array of model elements and corresponding il8n tag
+ * that are presented on the Create Model Elements menu.
+ */
+ private static final Object[] MODEL_ELEMENT_MENUITEMS =
+ new Object[] {
+ Model.getMetaTypes().getPackage(),
+ "button.new-package",
+ Model.getMetaTypes().getActor(),
+ "button.new-actor",
+ Model.getMetaTypes().getUseCase(),
+ "button.new-usecase",
+ Model.getMetaTypes().getExtensionPoint(),
+ "button.new-extension-point",
+ Model.getMetaTypes().getUMLClass(),
+ "button.new-class",
+ Model.getMetaTypes().getInterface(),
+ "button.new-interface",
+ Model.getMetaTypes().getAttribute(),
+ "button.new-attribute",
+ Model.getMetaTypes().getOperation(),
+ "button.new-operation",
+ Model.getMetaTypes().getDataType(),
+ "button.new-datatype",
+ Model.getMetaTypes().getEnumeration(),
+ "button.new-enumeration",
+ Model.getMetaTypes().getEnumerationLiteral(),
+ "button.new-enumeration-literal",
+ Model.getMetaTypes().getSignal(),
+ "button.new-signal",
+ Model.getMetaTypes().getException(),
+ "button.new-exception",
+ Model.getMetaTypes().getComponent(),
+ "button.new-component",
+ Model.getMetaTypes().getComponentInstance(),
+ "button.new-componentinstance",
+ Model.getMetaTypes().getNode(),
+ "button.new-node",
+ Model.getMetaTypes().getNodeInstance(),
+ "button.new-nodeinstance",
+ Model.getMetaTypes().getReception(),
+ "button.new-reception",
+ Model.getMetaTypes().getStereotype(),
+ "button.new-stereotype" };
/**
* Creates a new instance of ExplorerPopup.
@@ -109,7 +158,7 @@
if (!Model.getFacade().isAUMLElement(element)
// profile elements are NOT model elements
|| isRelatedToProfiles(currentProject, element)) {
- modelElementsOnly = false;
+ modelElementsOnly = false;
}
}
@@ -239,11 +288,6 @@
if (Model.getFacade().isAOperation(selectedItem)) {
this.add(new ActionRESequenceDiagram());
}
-
- if (packageSelected
- || Model.getFacade().isAModel(selectedItem)) {
- this.add(new ActionAddPackage());
- }
}
if (selectedItem != projectModel) {
@@ -319,26 +363,26 @@
*
*/
private void initMenuCreateModelElements() {
- List targets = TargetManager.getInstance().getTargets();
+ List targets = TargetManager.getInstance().getTargets();
List<JMenuItem> menuItems = new ArrayList<JMenuItem>();
- if (targets.size() >= 2) {
- // Check to see if all targets are classifiers
- // before adding an option to create an association between
- // them all
- boolean classifierRoleFound = false;
- boolean classifierRolesOnly = true;
- for (Iterator it = targets.iterator();
- it.hasNext() && classifierRolesOnly; ) {
- if (Model.getFacade().isAClassifierRole(it.next())) {
- classifierRoleFound = true;
- } else {
- classifierRolesOnly = false;
- }
- }
+ if (targets.size() >= 2) {
+ // Check to see if all targets are classifiers
+ // before adding an option to create an association between
+ // them all
+ boolean classifierRoleFound = false;
+ boolean classifierRolesOnly = true;
+ for (Iterator it = targets.iterator();
+ it.hasNext() && classifierRolesOnly; ) {
+ if (Model.getFacade().isAClassifierRole(it.next())) {
+ classifierRoleFound = true;
+ } else {
+ classifierRolesOnly = false;
+ }
+ }
if (classifierRolesOnly) {
menuItems.add(new JMenuItem(new ActionCreateAssociationRole(
- Model.getMetaTypes().getAssociationRole(),
- targets)));
+ Model.getMetaTypes().getAssociationRole(),
+ targets)));
} else if (!classifierRoleFound) {
boolean classifiersOnly = true;
for (Iterator it = targets.iterator();
@@ -349,71 +393,100 @@
}
if (classifiersOnly) {
menuItems.add(new JMenuItem(new ActionCreateAssociation(
- Model.getMetaTypes().getAssociation(),
- targets)));
+ Model.getMetaTypes().getAssociation(),
+ targets)));
}
}
- }
- if (targets.size() == 2) {
+ }
+ if (targets.size() == 2) {
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getDependency(),
- " " + menuLocalize("menu.popup.depends-on") + " ");
+ menuItems,
+ Model.getMetaTypes().getDependency(),
+ " " + menuLocalize("menu.popup.depends-on") + " ");
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getGeneralization(),
- " " + menuLocalize("menu.popup.generalizes") + " ");
+ menuItems,
+ Model.getMetaTypes().getGeneralization(),
+ " " + menuLocalize("menu.popup.generalizes") + " ");
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getInclude(),
- " " + menuLocalize("menu.popup.includes") + " ");
+ menuItems,
+ Model.getMetaTypes().getInclude(),
+ " " + menuLocalize("menu.popup.includes") + " ");
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getExtend(),
- " " + menuLocalize("menu.popup.extends") + " ");
+ menuItems,
+ Model.getMetaTypes().getExtend(),
+ " " + menuLocalize("menu.popup.extends") + " ");
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getPackageImport(),
- " " + menuLocalize("menu.popup.has-permission-on") + " ");
+ menuItems,
+ Model.getMetaTypes().getPackageImport(),
+ " " + menuLocalize("menu.popup.has-permission-on") + " ");
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getUsage(),
- " " + menuLocalize("menu.popup.uses") + " ");
+ menuItems,
+ Model.getMetaTypes().getUsage(),
+ " " + menuLocalize("menu.popup.uses") + " ");
addCreateModelElementAction(
- menuItems,
- Model.getMetaTypes().getAbstraction(),
- " " + menuLocalize("menu.popup.realizes") + " ");
- }
- if (menuItems.size() == 1) {
- add(menuItems.get(0));
- } else if (menuItems.size() > 1) {
- JMenu menu =
- new JMenu(menuLocalize("menu.popup.create-model-element"));
- add(menu);
- for (Iterator it = menuItems.iterator(); it.hasNext(); ) {
+ menuItems,
+ Model.getMetaTypes().getAbstraction(),
+ " " + menuLocalize("menu.popup.realizes") + " ");
+ } else if (targets.size() == 1) {
+
+ Object target = targets.get(0);
+
+ // iterate through all possible model elements to determine which
+ // are valid to be contained by the selected target
+ for (int iter = 0; iter < MODEL_ELEMENT_MENUITEMS.length;
+ iter += 2) {
+
+ try {
+ // test if this element can be contained by the target
+ if (Model.getUmlFactory().isContainmentValid(
+ MODEL_ELEMENT_MENUITEMS[iter], target))
+ {
+ // this element can be contained add a menu item
+ // that allows the user to take that action
+ menuItems.add(new JMenuItem(
+ new ActionCreateContainedElement(
+ MODEL_ELEMENT_MENUITEMS[iter],
+ target,
+ (String)
+ MODEL_ELEMENT_MENUITEMS[iter + 1]
+ )));
+ }
+ } catch (NotImplementedException e1) {
+
+ }
+ }
+ }
+
+ if (menuItems.size() == 1) {
+ add(menuItems.get(0));
+ } else if (menuItems.size() > 1) {
+ JMenu menu =
+ new JMenu(menuLocalize("menu.popup.create-model-element"));
+ add(menu);
+ for (Iterator it = menuItems.iterator(); it.hasNext(); ) {
menu.add((JMenuItem) it.next());
- }
- }
+ }
+ }
}
private void addCreateModelElementAction(
- Collection<JMenuItem> menuItems,
- Object metaType,
- String relationshipDescr) {
- List targets = TargetManager.getInstance().getTargets();
- Object source = targets.get(0);
- Object dest = targets.get(1);
+ Collection<JMenuItem> menuItems,
+ Object metaType,
+ String relationshipDescr) {
+ List targets = TargetManager.getInstance().getTargets();
+ Object source = targets.get(0);
+ Object dest = targets.get(1);
JMenu subMenu = new JMenu(
- menuLocalize("menu.popup.create") + " "
- + Model.getMetaTypes().getName(metaType));
+ menuLocalize("menu.popup.create") + " "
+ + Model.getMetaTypes().getName(metaType));
buildDirectionalCreateMenuItem(
metaType, dest, source, relationshipDescr, subMenu);
buildDirectionalCreateMenuItem(
metaType, source, dest, relationshipDescr, subMenu);
- if (subMenu.getMenuComponents().length > 0) {
+ if (subMenu.getMenuComponents().length > 0) {
menuItems.add(subMenu);
- }
+ }
}
/**
@@ -428,23 +501,23 @@
* @param menu The menu to which the menu item should be added
*/
private void buildDirectionalCreateMenuItem(
- Object metaType,
- Object source,
- Object dest,
- String relationshipDescr,
- JMenu menu) {
- if (Model.getUmlFactory().isConnectionValid(
- metaType, source, dest, true)) {
- JMenuItem menuItem = new JMenuItem(
- new ActionCreateModelElement(
- metaType,
- source,
- dest,
- relationshipDescr));
+ Object metaType,
+ Object source,
+ Object dest,
+ String relationshipDescr,
+ JMenu menu) {
+ if (Model.getUmlFactory().isConnectionValid(
+ metaType, source, dest, true)) {
+ JMenuItem menuItem = new JMenuItem(
+ new ActionCreateModelElement(
+ metaType,
+ source,
+ dest,
+ relationshipDescr));
if (menuItem != null) {
menu.add(menuItem);
}
- }
+ }
}
@@ -549,46 +622,46 @@
* @author Bob Tarling
*/
private class ActionCreateModelElement extends AbstractAction {
-
- private Object metaType;
- private Object source;
- private Object dest;
-
- private final Logger LOG =
- Logger.getLogger(ActionCreateModelElement.class);
-
- public ActionCreateModelElement(
- Object theMetaType,
- Object theSource,
- Object theDestination,
- String relationshipDescr) {
- super(MessageFormat.format(
- relationshipDescr,
+
+ private Object metaType;
+ private Object source;
+ private Object dest;
+
+ private final Logger LOG =
+ Logger.getLogger(ActionCreateModelElement.class);
+
+ public ActionCreateModelElement(
+ Object theMetaType,
+ Object theSource,
+ Object theDestination,
+ String relationshipDescr) {
+ super(MessageFormat.format(
+ relationshipDescr,
new Object[] {
DisplayTextTree.getModelElementDisplayName(theSource),
DisplayTextTree.getModelElementDisplayName(
theDestination)}));
- this.metaType = theMetaType;
- this.source = theSource;
- this.dest = theDestination;
- }
+ this.metaType = theMetaType;
+ this.source = theSource;
+ this.dest = theDestination;
+ }
- public void actionPerformed(ActionEvent e) {
- Object rootModel =
+ public void actionPerformed(ActionEvent e) {
+ Object rootModel =
ProjectManager.getManager().getCurrentProject().getModel();
try {
- Model.getUmlFactory().buildConnection(
- metaType,
- source,
- null,
- dest,
- null,
- null,
- rootModel);
- } catch (IllegalModelElementConnectionException e1) {
- LOG.error("Exception", e1);
- }
- }
+ Model.getUmlFactory().buildConnection(
+ metaType,
+ source,
+ null,
+ dest,
+ null,
+ null,
+ rootModel);
+ } catch (IllegalModelElementConnectionException e1) {
+ LOG.error("Exception", e1);
+ }
+ }
}
/**
@@ -597,46 +670,46 @@
* @author Bob Tarling
*/
private class ActionCreateAssociation extends AbstractAction {
-
- private Object metaType;
- private List classifiers;
-
- private final Logger LOG =
- Logger.getLogger(ActionCreateModelElement.class);
-
- public ActionCreateAssociation(
- Object theMetaType,
- List classifiersList) {
- super(menuLocalize("menu.popup.create") + " "
- + Model.getMetaTypes().getName(theMetaType));
- this.metaType = theMetaType;
- this.classifiers = classifiersList;
- }
+
+ private Object metaType;
+ private List classifiers;
+
+ private final Logger LOG =
+ Logger.getLogger(ActionCreateModelElement.class);
+
+ public ActionCreateAssociation(
+ Object theMetaType,
+ List classifiersList) {
+ super(menuLocalize("menu.popup.create") + " "
+ + Model.getMetaTypes().getName(theMetaType));
+ this.metaType = theMetaType;
+ this.classifiers = classifiersList;
+ }
- public void actionPerformed(ActionEvent e) {
+ public void actionPerformed(ActionEvent e) {
try {
- Object newElement = Model.getUmlFactory().buildConnection(
- metaType,
- classifiers.get(0),
- null,
- classifiers.get(1),
- null,
- null,
- null);
- for (int i = 2; i < classifiers.size(); ++i) {
+ Object newElement = Model.getUmlFactory().buildConnection(
+ metaType,
+ classifiers.get(0),
+ null,
+ classifiers.get(1),
+ null,
+ null,
+ null);
+ for (int i = 2; i < classifiers.size(); ++i) {
Model.getUmlFactory().buildConnection(
- Model.getMetaTypes().getAssociationEnd(),
- newElement,
- null,
- classifiers.get(i),
- null,
- null,
- null);
- }
- } catch (IllegalModelElementConnectionException e1) {
- LOG.error("Exception", e1);
- }
- }
+ Model.getMetaTypes().getAssociationEnd(),
+ newElement,
+ null,
+ classifiers.get(i),
+ null,
+ null,
+ null);
+ }
+ } catch (IllegalModelElementConnectionException e1) {
+ LOG.error("Exception", e1);
+ }
+ }
}
@@ -687,6 +760,43 @@
}
}
}
+
+ /**
+ * An action to create a model element to be contained by the
+ * target model element.
+ *
+ * @author Scott Roberts
+ */
+ private class ActionCreateContainedElement
+ extends AbstractActionNewModelElement {
+
+ private Object metaType;
+
+ /**
+ * Construct the action.
+ *
+ * @param theMetaType the element to be created
+ * @param target the container that will own the new element
+ * @param menuDescr the description for the menu item label.
+ */
+ public ActionCreateContainedElement(
+ Object theMetaType,
+ Object target,
+ String menuDescr) {
+ super(menuDescr);
+
+ metaType = theMetaType;
+
+ setTarget(target);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ Object newElement = Model.getUmlFactory().buildNode(metaType,
+ getTarget());
+
+ TargetManager.getInstance().setTarget(newElement);
+ }
+ }
private boolean isRelatedToProfiles(Project currentProject,
Object selectedItem) {
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.