Author: bobtarling Date: 2011-02-16 14:29:14-0800 New Revision: 19037 Modified: trunk/src/argouml-app/src/org/argouml/uml/ui/TabStereotype.java
Log: Issue 6190 fix: Commit on behalf of Laurent Braud (elbedd) Modified: trunk/src/argouml-app/src/org/argouml/uml/ui/TabStereotype.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/TabStereotype.java?view=diff&pathrev=19037&r1=19036&r2=19037 ============================================================================== --- trunk/src/argouml-app/src/org/argouml/uml/ui/TabStereotype.java (original) +++ trunk/src/argouml-app/src/org/argouml/uml/ui/TabStereotype.java 2011-02-16 14:29:14-0800 @@ -1,13 +1,14 @@ /* $Id$ ***************************************************************************** - * Copyright (c) 2009 Contributors - see below + * Copyright (c) 2009-2011 Contributors - see below * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * mvw + * Michiel ven der Wulp + * Laurent Braud ***************************************************************************** * * Some portions of this file was previously release using the BSD License: @@ -43,7 +44,10 @@ import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import javax.swing.BorderFactory; import javax.swing.Box; @@ -60,7 +64,10 @@ import org.argouml.configuration.Configuration; import org.argouml.i18n.Translator; import org.argouml.kernel.ProjectManager; +import org.argouml.model.AddAssociationEvent; +import org.argouml.model.AttributeChangeEvent; import org.argouml.model.Model; +import org.argouml.model.RemoveAssociationEvent; import org.argouml.swingext.SpacerPanel; import org.argouml.swingext.UpArrowIcon; import org.argouml.ui.TabModelTarget; @@ -283,6 +290,107 @@ addAll(s); } } + + + /** + * @param e + * @return + * @see org.argouml.uml.ui.UMLStereotypeListModel#isValidEvent(java.beans.PropertyChangeEvent) + * @since 20110215 + */ + private boolean isValidEventRemove(PropertyChangeEvent e) { + boolean valid = false; + if (!(getChangedElement(e) instanceof Collection)) { + + if ((e.getNewValue() != null && e.getOldValue() == null) + || isValidElement(getChangedElement(e))) { + valid = true; // we tried to remove a value + } + } else { + Collection col = (Collection) getChangedElement(e); + Iterator it = col.iterator(); + if (!col.isEmpty()) { + valid = true; + while (it.hasNext()) { + Object o = it.next(); + if (!isValidElement(o)) { + valid = false; + break; + } + } + } else { + if (e.getOldValue() instanceof Collection + && !((Collection) e.getOldValue()).isEmpty()) { + valid = true; + } + } + } + return valid; + } + + /** + * Must be different from the extends class because + * when we add a sterotype=> remove from available + * remove a stereotype=> add to available + * Called twices: with a AttributeChangeEvent, and with AddAssociationEvent or RemoveAssociationEvent + * + * @param e + * + * @see org.argouml.uml.ui.UMLStereotypeListModel#propertyChange(PropertyChangeEvent) + * @since 20110215 + */ + public void propertyChange(PropertyChangeEvent e) { + if (e instanceof AttributeChangeEvent) { + // ignored this event + } else if (e instanceof AddAssociationEvent) { + //Remove the element from Available List + boolean valid = false; + if (!(getChangedElement(e) instanceof Collection)) { + valid = contains(getChangedElement(e)); + } else { + Collection col = (Collection) getChangedElement(e); + Iterator it = col.iterator(); + valid = true; + while (it.hasNext()) { + Object o = it.next(); + if (!contains(o)) { + valid = false; + break; + } + } + } + if (valid) { + Object o = getChangedElement(e); + if (o instanceof Collection) { + Iterator it = ((Collection) o).iterator(); + while (it.hasNext()) { + Object o3 = it.next(); + removeElement(o3); + } + } else { + removeElement(o); + } + } + + + + } else if (e instanceof RemoveAssociationEvent) { + if (isValidEventRemove(e)) { + Object o = getChangedElement(e); + if (o instanceof Collection) { + ArrayList tempList = new ArrayList((Collection) o); + Iterator it = tempList.iterator(); + while (it.hasNext()) { + Object o2 = it.next(); + addElement(o2); + } + } else { + addElement(o); + } + } + + } + } /* * @see org.argouml.uml.ui.UMLModelElementListModel2#isValidElement(Object) ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2704881 To unsubscribe from this discussion, e-mail: [[email protected]].
