Author: bobtarling Date: 2009-12-19 04:26:35-0800 New Revision: 17684 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddOFSState.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddPartitionContent.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddReceptionSignal.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddSignalsToSignalEvent.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddStereotypeBaseClass.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionDeleteStereotypeBaseClass.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionNewOFSParameter.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveContextSignal.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSParameter.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSState.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveReceptionSignal.java Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java
Log: Make Actions inner classes of whatever uses them Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddOFSState.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddOFSState.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddPartitionContent.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddPartitionContent.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddReceptionSignal.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddReceptionSignal.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddSignalsToSignalEvent.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddSignalsToSignalEvent.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddStereotypeBaseClass.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionAddStereotypeBaseClass.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionDeleteStereotypeBaseClass.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionDeleteStereotypeBaseClass.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionNewOFSParameter.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionNewOFSParameter.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveContextSignal.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveContextSignal.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSParameter.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSParameter.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSState.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveOFSState.java?view=markup&pathrev=17683 Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveReceptionSignal.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ActionRemoveReceptionSignal.java?view=markup&pathrev=17683 Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLOFSStateListModel.java 2009-12-19 04:26:35-0800 @@ -24,9 +24,15 @@ package org.argouml.core.propertypanels.ui; +import java.awt.event.ActionEvent; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; +import org.argouml.i18n.Translator; import org.argouml.model.Model; +import org.argouml.uml.ui.AbstractActionAddModelElement2; +import org.argouml.uml.ui.AbstractActionRemoveElement; /** * @author mkl @@ -34,6 +40,11 @@ class UMLOFSStateListModel extends UMLModelElementListModel { /** + * The class uid + */ + private static final long serialVersionUID = -9214579555300746872L; + + /** * Constructor for UMLOFSStateListModel. */ public UMLOFSStateListModel(Object modelElement) { @@ -77,4 +88,138 @@ } return false; } + + /** + * @author mkl + */ + private static class ActionAddOFSState extends AbstractActionAddModelElement2 { + private Object choiceClass = Model.getMetaTypes().getState(); + + + /** + * The constructor. + */ + public ActionAddOFSState() { + super(); + setMultiSelect(true); + } + + + protected void doIt(Collection selected) { + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Object type = Model.getFacade().getType(t); + if (Model.getFacade().isAClassifierInState(type)) { + Model.getActivityGraphsHelper().setInStates(type, selected); + } else if (Model.getFacade().isAClassifier(type) + && (selected != null) + && (selected.size() > 0)) { + /* So, we found a Classifier + * that is not a ClassifierInState. + * And at least one state has been selected. + * Well, let's correct that: + */ + Object cis = + Model.getActivityGraphsFactory() + .buildClassifierInState(type, selected); + Model.getCoreHelper().setType(t, cis); + } + } + } + + + protected List getChoices() { + List ret = new ArrayList(); + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Object classifier = getType(t); + if (Model.getFacade().isAClassifier(classifier)) { + ret.addAll(Model.getModelManagementHelper() + .getAllModelElementsOfKindWithModel(classifier, + choiceClass)); + } + removeTopStateFrom(ret); + } + return ret; + } + + + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-state"); + } + + + protected List getSelected() { + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Object type = Model.getFacade().getType(t); + if (Model.getFacade().isAClassifierInState(type)) { + return new ArrayList(Model.getFacade().getInStates(type)); + } + } + return new ArrayList(); + } + + private static Object getType(Object target) { + Object type = Model.getFacade().getType(target); + if (Model.getFacade().isAClassifierInState(type)) { + type = Model.getFacade().getType(type); + } + return type; + } + /** + * Utility function to remove the top states + * from a given collection of states. + * + * @param ret a collection of states + */ + static void removeTopStateFrom(Collection ret) { + Collection tops = new ArrayList(); + for (Object state : ret) { + if (Model.getFacade().isACompositeState(state) + && Model.getFacade().isTop(state)) { + tops.add(state); + } + } + ret.removeAll(tops); + } + } + + /** + * @author mkl + */ + private static class ActionRemoveOFSState extends AbstractActionRemoveElement { + + /** + * The class uid + */ + private static final long serialVersionUID = 4745674604611374936L; + + /** + * Constructor. + */ + public ActionRemoveOFSState() { + super(Translator.localize("menu.popup.remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + super.actionPerformed(e); + Object state = getObjectToRemove(); + if (state != null) { + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Object type = Model.getFacade().getType(t); + if (Model.getFacade().isAClassifierInState(type)) { + Collection states = + new ArrayList( + Model.getFacade().getInStates(type)); + states.remove(state); + Model.getActivityGraphsHelper() + .setInStates(type, states); + } + } + } + } + } } Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLObjectFlowStateParameterListModel.java 2009-12-19 04:26:35-0800 @@ -24,7 +24,16 @@ package org.argouml.core.propertypanels.ui; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.argouml.i18n.Translator; import org.argouml.model.Model; +import org.argouml.uml.ui.AbstractActionAddModelElement2; +import org.argouml.uml.ui.AbstractActionNewModelElement; +import org.argouml.uml.ui.AbstractActionRemoveElement; /** * @author mkl @@ -32,6 +41,11 @@ class UMLObjectFlowStateParameterListModel extends UMLModelElementListModel { /** + * The class uid + */ + private static final long serialVersionUID = -6095531893213309195L; + + /** * Constructor for UMLObjectFlowStateParameterListModel. */ public UMLObjectFlowStateParameterListModel(Object modelElement, String propertyName) { @@ -59,5 +73,123 @@ return Model.getFacade().getParameters(getTarget()).contains( element); } + + /** + * @author mkl + */ + private static class ActionAddOFSParameter extends AbstractActionAddModelElement2 { + private Object choiceClass = Model.getMetaTypes().getParameter(); + + /** + * The constructor. + */ + public ActionAddOFSParameter() { + super(); + setMultiSelect(true); + } + + protected void doIt(Collection selected) { + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Model.getActivityGraphsHelper().setParameters(t, selected); + } + } + + + protected List getChoices() { + List ret = new ArrayList(); + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Object classifier = getType(t); + if (Model.getFacade().isAClassifier(classifier)) { + ret.addAll(Model.getModelManagementHelper() + .getAllModelElementsOfKindWithModel(classifier, + choiceClass)); + } + + // TODO: We may want to restrict the list to parameters which + // conform to the following WFR: +// parameter.type = ofstype +// or (parameter.kind = #in +// and ofstype.allSupertypes->includes(type)) +// or ((parameter.kind = #out or parameter.kind = #return) +// and type.allSupertypes->includes(ofstype)) +// or (parameter.kind = #inout +// and ( ofstype.allSupertypes->includes(type) +// or type.allSupertypes->includes(ofstype)))) + + } + return ret; + } + + + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-state"); + } + + + protected List getSelected() { + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + return new ArrayList(Model.getFacade().getParameters(t)); + } + return new ArrayList(); + } + + private static Object getType(Object target) { + Object type = Model.getFacade().getType(target); + if (Model.getFacade().isAClassifierInState(type)) { + type = Model.getFacade().getType(type); + } + return type; + } + } + + /** + * @author mkl + */ + private static class ActionNewOFSParameter extends AbstractActionNewModelElement { + @Override + public void actionPerformed(ActionEvent e) { + Object target = getTarget(); + if (Model.getFacade().isAObjectFlowState(target)) { + Object type = getType(target); + Object parameter = Model.getCoreFactory().createParameter(); + Model.getCoreHelper().setType(parameter, type); + Model.getActivityGraphsHelper().addParameter(target, parameter); + } + } + private static Object getType(Object target) { + Object type = Model.getFacade().getType(target); + if (Model.getFacade().isAClassifierInState(type)) { + type = Model.getFacade().getType(type); + } + return type; + } + } + + /** + * @author mkl + */ + private static class ActionRemoveOFSParameter extends AbstractActionRemoveElement { + /** + * Constructor. + */ + public ActionRemoveOFSParameter() { + super(Translator.localize("menu.popup.remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + super.actionPerformed(e); + Object param = getObjectToRemove(); + if (param != null) { + Object t = getTarget(); + if (Model.getFacade().isAObjectFlowState(t)) { + Model.getActivityGraphsHelper().removeParameter(t, param); + } + } + } + } } \ No newline at end of file Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLPartitionContentListModel.java 2009-12-19 04:26:35-0800 @@ -24,7 +24,13 @@ package org.argouml.core.propertypanels.ui; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.argouml.i18n.Translator; import org.argouml.model.Model; +import org.argouml.uml.ui.AbstractActionAddModelElement2; /** * @author mkl @@ -49,5 +55,53 @@ Object partition = getTarget(); return Model.getFacade().getContents(partition).contains(element); } - + + /** + * @author mkl + */ + private static class ActionAddPartitionContent extends AbstractActionAddModelElement2 { + + /** + * The class uid + */ + private static final long serialVersionUID = -3371454533555822156L; + + public ActionAddPartitionContent() { + super(); + setMultiSelect(true); + } + + @Override + protected void doIt(Collection selected) { + Object partition = getTarget(); + if (Model.getFacade().isAPartition(partition)) { + Model.getActivityGraphsHelper().setContents( + partition, selected); + } + } + + protected List getChoices() { + List ret = new ArrayList(); + if (Model.getFacade().isAPartition(getTarget())) { + Object partition = getTarget(); + Object ag = Model.getFacade().getActivityGraph(partition); + if (ag != null) { + Object top = Model.getFacade().getTop(ag); + /* There are no composite states, so this will work: */ + ret.addAll(Model.getFacade().getSubvertices(top)); + } + } + return ret; + } + + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-contents"); + } + + protected List getSelected() { + List ret = new ArrayList(); + ret.addAll(Model.getFacade().getContents(getTarget())); + return ret; + } + } } Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalContextListModel.java 2009-12-19 04:26:35-0800 @@ -24,9 +24,16 @@ package org.argouml.core.propertypanels.ui; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.argouml.i18n.Translator; +import org.argouml.kernel.ProjectManager; import org.argouml.model.Model; -import org.argouml.uml.ui.UMLModelElementListModel2; -import org.argouml.uml.ui.behavior.common_behavior.ActionAddContextSignal; +import org.argouml.uml.ui.AbstractActionAddModelElement2; +import org.argouml.uml.ui.AbstractActionRemoveElement; /** * The model for the listbox showing the contexts of a signal. @@ -36,6 +43,11 @@ class UMLSignalContextListModel extends UMLModelElementListModel { /** + * The class uid + */ + private static final long serialVersionUID = 2002737769556890982L; + + /** * The constructor. */ public UMLSignalContextListModel(Object modelElement) { @@ -64,4 +76,75 @@ element); } + /** + * This Action removes a Context from a Signal. + * + * @author Michiel + */ + private static class ActionRemoveContextSignal extends AbstractActionRemoveElement { + + /** + * The serial version. + */ + private static final long serialVersionUID = -3345844954130000669L; + + /** + * Construct an Action which removes a Context from a Signal. + */ + public ActionRemoveContextSignal() { + super(Translator.localize("menu.popup.remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + super.actionPerformed(e); + Object context = getObjectToRemove(); + if (context != null) { + Object signal = getTarget(); + if (Model.getFacade().isASignal(signal)) { + Model.getCommonBehaviorHelper().removeContext(signal, context); + } + } + } + } + + /** + * This action adds a context to a signal. + * + * @author [email protected] + */ + private static class ActionAddContextSignal extends AbstractActionAddModelElement2 { + + /** + * The constructor. + */ + public ActionAddContextSignal() { + super(); + } + + protected List getChoices() { + List ret = new ArrayList(); + Object model = + ProjectManager.getManager().getCurrentProject().getModel(); + if (getTarget() != null) { + ret.addAll(Model.getModelManagementHelper() + .getAllBehavioralFeatures(model)); + } + return ret; + } + + protected List getSelected() { + List ret = new ArrayList(); + ret.addAll(Model.getFacade().getContexts(getTarget())); + return ret; + } + + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-contexts"); + } + + protected void doIt(Collection selected) { + Model.getCommonBehaviorHelper().setContexts(getTarget(), selected); + } + } } Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalEventSignalList.java 2009-12-19 04:26:35-0800 @@ -24,19 +24,33 @@ package org.argouml.core.propertypanels.ui; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.swing.Action; +import javax.swing.Icon; import javax.swing.JPopupMenu; +import org.argouml.application.helpers.ResourceLoaderWrapper; +import org.argouml.i18n.Translator; +import org.argouml.model.Model; +import org.argouml.ui.targetmanager.TargetManager; import org.argouml.uml.ui.AbstractActionAddModelElement2; -import org.argouml.uml.ui.behavior.common_behavior.ActionNewSignal; +import org.argouml.uml.ui.AbstractActionNewModelElement; /** - * * @author MarkusK - * */ class UMLSignalEventSignalList extends UMLMutableLinkedList { /** + * The class uid + */ + private static final long serialVersionUID = -1557658052001738064L; + + /** * Constructor for UMLTransitionTriggerList. * @param dataModel the model */ @@ -49,9 +63,120 @@ */ public JPopupMenu getPopupMenu() { JPopupMenu menu = new JPopupMenu(); - ActionAddSignalsToSignalEvent.SINGLETON.setTarget(getTarget()); - menu.add(ActionAddSignalsToSignalEvent.SINGLETON); + menu.add(new ActionAddSignalsToSignalEvent(getTarget())); menu.add(new ActionNewSignal()); return menu; } + + /** + * Provide a dialog which helps the user to select one event + * out of an existing list, + * which will be used as the trigger of the transition. + * + * @author MarkusK + * + */ + private static class ActionAddSignalsToSignalEvent extends AbstractActionAddModelElement2 { + + /** + * Constructor for ActionAddClassifierRoleBase. + */ + public ActionAddSignalsToSignalEvent(Object target) { + super(); + setMultiSelect(false); + setTarget(target); + } + + + protected List getChoices() { + List vec = new ArrayList(); + + vec.addAll(Model.getModelManagementHelper().getAllModelElementsOfKind( + Model.getFacade().getRoot(getTarget()), + Model.getMetaTypes().getSignal())); + + return vec; + } + + + protected List getSelected() { + List vec = new ArrayList(); + Object signal = Model.getFacade().getSignal(getTarget()); + if (signal != null) { + vec.add(signal); + } + return vec; + } + + + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-signal"); + } + + + @Override + protected void doIt(Collection selected) { + Object event = getTarget(); + if (selected == null || selected.size() == 0) { + Model.getCommonBehaviorHelper().setSignal(event, null); + } else { + Model.getCommonBehaviorHelper().setSignal(event, + selected.iterator().next()); + } + } + + /** + * The UID. + */ + private static final long serialVersionUID = 6890869588365483936L; + } + + /** + * Create a new Signal. + */ + public class ActionNewSignal extends AbstractActionNewModelElement { + + /** + * The class uid + */ + private static final long serialVersionUID = -1905204858078372670L; + + /** + * The constructor. + */ + public ActionNewSignal() { + super("button.new-signal"); + putValue(Action.NAME, Translator.localize("button.new-signal")); + Icon icon = ResourceLoaderWrapper.lookupIcon("SignalSending"); + putValue(Action.SMALL_ICON, icon); + } + + /** + * Creates a new signal and in case of a SignalEvent as target also set the + * Signal for this event.<p> + * {...@inheritdoc} + */ + public void actionPerformed(ActionEvent e) { + Object target = TargetManager.getInstance().getModelTarget(); + if (Model.getFacade().isASignalEvent(target) + || Model.getFacade().isASendAction(target) + || Model.getFacade().isAReception(target) + || Model.getFacade().isABehavioralFeature(target)) { + Object newSig = + Model.getCommonBehaviorFactory().buildSignal(target); + TargetManager.getInstance().setTarget(newSig); + } else { + Object ns = null; + if (Model.getFacade().isANamespace(target)) { + ns = target; + } else { + ns = Model.getFacade().getNamespace(target); + } + Object newElement = Model.getCommonBehaviorFactory().createSignal(); + TargetManager.getInstance().setTarget(newElement); + Model.getCoreHelper().setNamespace(newElement, ns); + } + super.actionPerformed(e); + } + } } Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLSignalReceptionListModel.java 2009-12-19 04:26:35-0800 @@ -24,8 +24,16 @@ package org.argouml.core.propertypanels.ui; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.argouml.i18n.Translator; +import org.argouml.kernel.ProjectManager; import org.argouml.model.Model; -import org.argouml.uml.ui.UMLModelElementListModel2; +import org.argouml.uml.ui.AbstractActionAddModelElement2; +import org.argouml.uml.ui.AbstractActionRemoveElement; /** * The model for the listbox showing the receptions of a signal. @@ -35,6 +43,11 @@ class UMLSignalReceptionListModel extends UMLModelElementListModel { /** + * The class uid + */ + private static final long serialVersionUID = 1045014158284951739L; + + /** * Construct a list model showing the receptions of a signal. */ public UMLSignalReceptionListModel(Object modelElement) { @@ -67,4 +80,86 @@ && Model.getFacade().getReceptions(getTarget()).contains(element); } + /** + * This Action adds a Reception to a Signal. + * + * @author Michiel + */ + private static class ActionAddReceptionSignal extends AbstractActionAddModelElement2 { + + /** + * Construct an Action which adds a Reception to a Signal. + */ + public ActionAddReceptionSignal() { + super(); + } + + + protected List getChoices() { + List ret = new ArrayList(); + Object model = + ProjectManager.getManager().getCurrentProject().getModel(); + if (getTarget() != null) { + ret.addAll(Model.getModelManagementHelper() + .getAllModelElementsOfKind(model, + Model.getMetaTypes().getReception())); + } + return ret; + } + + + protected List getSelected() { + List ret = new ArrayList(); + ret.addAll(Model.getFacade().getReceptions(getTarget())); + return ret; + } + + + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-receptions"); + } + + + @Override + protected void doIt(Collection selected) { + Model.getCommonBehaviorHelper().setReception(getTarget(), selected); + } + + } + + /** + * This Action removes a Reception from a Signal. + * + * @author Michiel + */ + private static class ActionRemoveReceptionSignal extends AbstractActionRemoveElement { + + /** + * The class uid + */ + private static final long serialVersionUID = 8213584329453727152L; + + /** + * Construct an Action which removes a Reception from a Signal. + */ + public ActionRemoveReceptionSignal() { + super(Translator.localize("menu.popup.remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + super.actionPerformed(e); + Object reception = getObjectToRemove(); + if (reception != null) { + Object signal = getTarget(); + if (Model.getFacade().isASignal(signal)) { + // TODO: Should we delete the Reception? A Reception + // without a Signal violates the cardinality of 1 in + // the metamodel - tfm - 20070308 + Model.getCommonBehaviorHelper().removeReception(signal, + reception); + } + } + } + } } Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java?view=diff&pathrev=17684&r1=17683&r2=17684 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLStereotypeBaseClassListModel.java 2009-12-19 04:26:35-0800 @@ -24,11 +24,19 @@ package org.argouml.core.propertypanels.ui; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import org.argouml.i18n.Translator; import org.argouml.model.Model; -import org.argouml.uml.ui.UMLModelElementListModel2; +import org.argouml.uml.ui.AbstractActionAddModelElement2; +import org.argouml.uml.ui.AbstractActionRemoveElement; /** * The list model for the BaseClasses of the stereotype. @@ -67,4 +75,109 @@ } return false; } + + /** + * The Action to add a baseclass to the stereotype. + * + * @author Michiel + */ + private static class ActionAddStereotypeBaseClass extends AbstractActionAddModelElement2 { + + private List<String> metaClasses; + + public ActionAddStereotypeBaseClass() { + super(); + initMetaClasses(); + } + + /** + * Initialize the meta-classes list. <p> + * + * All this code is necessary to be independent of + * model repository implementation, + * i.e. to ensure that we have a + * sorted list of strings. + */ + void initMetaClasses() { + Collection<String> tmpMetaClasses = + Model.getCoreHelper().getAllMetatypeNames(); + if (tmpMetaClasses instanceof List) { + metaClasses = (List<String>) tmpMetaClasses; + } else { + metaClasses = new LinkedList<String>(tmpMetaClasses); + } + try { + Collections.sort(metaClasses); + } catch (UnsupportedOperationException e) { + // We got passed an unmodifiable List. Copy it and sort the result + metaClasses = new LinkedList<String>(tmpMetaClasses); + Collections.sort(metaClasses); + } + } + + @Override + protected List<String> getChoices() { + return Collections.unmodifiableList(metaClasses); + } + + @Override + protected String getDialogTitle() { + return Translator.localize("dialog.title.add-baseclasses"); + } + + @Override + protected List<String> getSelected() { + List<String> result = new ArrayList<String>(); + if (Model.getFacade().isAStereotype(getTarget())) { + Collection<String> bases = + Model.getFacade().getBaseClasses(getTarget()); + result.addAll(bases); + } + return result; + } + + @Override + protected void doIt(Collection selected) { + Object stereo = getTarget(); + Set<Object> oldSet = new HashSet<Object>(getSelected()); + Set toBeRemoved = new HashSet<Object>(oldSet); + + for (Object o : selected) { + if (oldSet.contains(o)) { + toBeRemoved.remove(o); + } else { + Model.getExtensionMechanismsHelper() + .addBaseClass(stereo, o); + } + } + for (Object o : toBeRemoved) { + Model.getExtensionMechanismsHelper().removeBaseClass(stereo, o); + } + } + + } + + /** + * The Action to remove a baseclass from a stereotype. + * + * @author Michiel + */ + private static class ActionDeleteStereotypeBaseClass extends AbstractActionRemoveElement { + + public ActionDeleteStereotypeBaseClass() { + super(Translator.localize("menu.popup.remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + Object baseclass = getObjectToRemove(); + if (baseclass != null) { + Object st = getTarget(); + if (Model.getFacade().isAStereotype(st)) { + Model.getExtensionMechanismsHelper().removeBaseClass(st, + baseclass); + } + } + } + } } \ No newline at end of file ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2431705 To unsubscribe from this discussion, e-mail: [[email protected]].
