Author: bobtarling Date: 2009-12-10 15:57:12-0800 New Revision: 17632 Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLAssociationRoleBaseComboBoxModel.java
Log: Complete the association role panel Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLAssociationRoleBaseComboBoxModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLAssociationRoleBaseComboBoxModel.java?view=markup&pathrev=17632 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLAssociationRoleBaseComboBoxModel.java 2009-12-10 15:57:12-0800 @@ -0,0 +1,137 @@ +// $Id: UMLAssociationRoleBaseComboBoxModel.java 13324 2007-08-14 02:35:33Z tfmorris $ +// Copyright (c) 1996-2006 The Regents of the University of California. All +// Rights Reserved. Permission to use, copy, modify, and distribute this +// software and its documentation without fee, and without a written +// agreement is hereby granted, provided that the above copyright notice +// and this paragraph appear in all copies. This software program and +// documentation are copyrighted by The Regents of the University of +// California. The software program and documentation are supplied "AS +// IS", without any accompanying services from The Regents. The Regents +// does not warrant that the operation of the program will be +// uninterrupted or error-free. The end-user understands that the program +// was developed for research purposes and is advised not to rely +// exclusively on the program for any reason. IN NO EVENT SHALL THE +// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF +// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE +// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF +// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, +// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +package org.argouml.core.propertypanels.ui; + +import java.util.ArrayList; +import java.util.Collection; + +import org.argouml.model.Model; +import org.argouml.uml.ui.UMLComboBoxModel2; + +/** + * The combo box model for the base of an association-role. + * The base is clearable, since the UML standard indicates multiplicity 0..1. + * + * @since Oct 4, 2002 + * @author jaap.branderho...@xs4all.nl + */ +public class UMLAssociationRoleBaseComboBoxModel extends UMLComboBoxModel2 { + + private Collection others = new ArrayList(); + + /** + * Constructor for UMLAssociationRoleBaseComboBoxModel. + */ + public UMLAssociationRoleBaseComboBoxModel() { + super("base", true); + } + + /* + * @see org.argouml.uml.ui.UMLComboBoxModel2#buildModelList() + */ + @Override + protected void buildModelList() { + removeAllElements(); + Object ar = getTarget(); + Object base = Model.getFacade().getBase(ar); + if (Model.getFacade().isAAssociationRole(ar)) { + setElements( + Model.getCollaborationsHelper().getAllPossibleBases(ar)); + } + if (base != null) { + addElement(base); + } + } + + /* + * @see org.argouml.uml.ui.UMLComboBoxModel2#getSelectedModelElement() + */ + @Override + protected Object getSelectedModelElement() { + Object ar = getTarget(); + if (Model.getFacade().isAAssociationRole(ar)) { + Object base = Model.getFacade().getBase(ar); + if (base != null) { + return base; + } + } + return null; + } + + /* + * @see org.argouml.uml.ui.UMLComboBoxModel2#isValidElement(Object) + */ + @Override + protected boolean isValidElement(Object element) { + Object ar = getTarget(); + if (Model.getFacade().isAAssociationRole(ar)) { + Object base = Model.getFacade().getBase(ar); + if (element == base) { + return true; + } + Collection b = + Model.getCollaborationsHelper().getAllPossibleBases(ar); + return b.contains(element); + } + return false; + } + + /* + * TODO: Prove that this works. + * The TestUMLAssociationRoleBaseComboBoxModel does not cut it. + * + * @see org.argouml.uml.ui.UMLComboBoxModel2#addOtherModelEventListeners(java.lang.Object) + */ + @Override + protected void addOtherModelEventListeners(Object newTarget) { + super.addOtherModelEventListeners(newTarget); + Collection connections = Model.getFacade().getConnections(newTarget); + Collection types = new ArrayList(); + for (Object conn : connections) { + types.add(Model.getFacade().getType(conn)); + } + for (Object classifierRole : types) { + others.addAll(Model.getFacade().getBases(classifierRole)); + } + for (Object classifier : others) { + Model.getPump().addModelEventListener(this, + classifier, "feature"); + } + } + + /* + * @see org.argouml.uml.ui.UMLComboBoxModel2#removeOtherModelEventListeners(java.lang.Object) + */ + @Override + protected void removeOtherModelEventListeners(Object oldTarget) { + super.removeOtherModelEventListeners(oldTarget); + for (Object classifier : others) { + Model.getPump().removeModelEventListener(this, + classifier, "feature"); + } + others.clear(); + } + +} ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2429628 To unsubscribe from this discussion, e-mail: [commits-unsubscr...@argouml.tigris.org].