Author: bobtarling
Date: 2010-04-27 07:35:02-0700
New Revision: 18338

Modified:
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java

Log:
Issue 5777: Present toolbuttons instead of popup for baseClass in stereotype

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java?view=diff&pathrev=18338&r1=18337&r2=18338
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
     (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
     2010-04-27 07:35:02-0700
@@ -17,7 +17,10 @@
 import java.util.Arrays;
 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 java.util.StringTokenizer;
 
 import javax.swing.Icon;
@@ -102,6 +105,7 @@
         addGetterSetter("subvertex", new SubvertexGetterSetter());
         addGetterSetter("internalTransition", new 
InternalTransitionGetterSetter());
         addGetterSetter("classifier", new ClassifierGetterSetter());
+        addGetterSetter("baseClass", new BaseClassGetterSetter());
         
         // UML2 only
         addGetterSetter("ownedOperation", new FeatureGetterSetter());
@@ -1802,76 +1806,212 @@
         }
 
         public Command getAddCommand(Object modelElement) {
-       return new AddCommand(modelElement);
-    }
-    
-    public Command getRemoveCommand(Object modelElement, Object 
objectToRemove) {
-       return new RemoveCommand(modelElement, objectToRemove);
-    }
+            return new AddCommand(modelElement);
+        }
     
-    private class AddCommand extends AddModelElementCommand {
-
-        /**
-         * Constructor for ActionAddPackageImport.
-         */
-        public AddCommand(Object target) {
-            super(target);
+        public Command getRemoveCommand(Object modelElement, Object 
objectToRemove) {
+           return new RemoveCommand(modelElement, objectToRemove);
         }
+    
+        private class AddCommand extends AddModelElementCommand {
 
-        protected List getChoices() {
-            List list = new ArrayList();
-            
-            // Get all classifiers in our model
-            // TODO: We need the property panels to have some reference to the
-            // project they belong to instead of using deprecated functionality
-            Project p = ProjectManager.getManager().getCurrentProject();
-            Object model = p.getRoot();
-            list.addAll(Model.getModelManagementHelper()
-                    .getAllModelElementsOfKindWithModel(model, 
Model.getMetaTypes().getClassifier()));
-            
-            // Get all classifiers in all top level packages of all profiles
-            for (Profile profile : p.getProfileConfiguration().getProfiles()) {
-               try {
-                   for (Object topPackage : profile.getProfilePackages()) {
-                           list.addAll(Model.getModelManagementHelper()
-                                   
.getAllModelElementsOfKindWithModel(topPackage,
-                                           
Model.getMetaTypes().getClassifier()));
-                   }
-               } catch (ProfileException e) {
-                   // TODO: We need to rethrow this as some other exception
-                   // type but that is too much change for the moment.
-                   LOG.error("Exception", e);
-               }
+            /**
+             * Constructor for ActionAddPackageImport.
+             */
+            public AddCommand(Object target) {
+                super(target);
+            }
+    
+            protected List getChoices() {
+                List list = new ArrayList();
+                
+                // Get all classifiers in our model
+                // TODO: We need the property panels to have some reference to 
the
+                // project they belong to instead of using deprecated 
functionality
+                Project p = ProjectManager.getManager().getCurrentProject();
+                Object model = p.getRoot();
+                list.addAll(Model.getModelManagementHelper()
+                        .getAllModelElementsOfKindWithModel(model, 
Model.getMetaTypes().getClassifier()));
+                
+                // Get all classifiers in all top level packages of all 
profiles
+                for (Profile profile : 
p.getProfileConfiguration().getProfiles()) {
+               try {
+                   for (Object topPackage : profile.getProfilePackages()) {
+                           list.addAll(Model.getModelManagementHelper()
+                                   
.getAllModelElementsOfKindWithModel(topPackage,
+                                           
Model.getMetaTypes().getClassifier()));
+                   }
+               } catch (ProfileException e) {
+                   // TODO: We need to rethrow this as some other exception
+                   // type but that is too much change for the moment.
+                   LOG.error("Exception", e);
+               }
+                }
+                return list;
+            }
+    
+            protected List getSelected() {
+                List list = new ArrayList();
+                list.addAll(Model.getFacade().getClassifiers(getTarget()));
+                return list;
+            }
+    
+    
+            protected String getDialogTitle() {
+                return Translator.localize("dialog.title.add-specifications");
+            }
+    
+    
+            @Override
+            protected void doIt(Collection selected) {
+                   Model.getCommonBehaviorHelper().setClassifiers(getTarget(), 
selected);
             }
-            return list;
         }
-
-        protected List getSelected() {
-            List list = new ArrayList();
-            list.addAll(Model.getFacade().getClassifiers(getTarget()));
+    
+        private class RemoveCommand
+           extends NonUndoableCommand {
+       
+            private final Object target;
+            private final Object objectToRemove;
+       
+           /**
+            * Constructor for ActionRemovePackageImport.
+            */
+           public RemoveCommand(final Object target, final Object 
objectToRemove) {
+               this.target = target;
+               this.objectToRemove = objectToRemove;
+           }
+           
+           /*
+            * @see 
java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+            */
+           public Object execute() {
+               Model.getCommonBehaviorHelper()
+                   .removeClassifier(target, objectToRemove);
+               return null;
+           }
+       }
+    }
+    
+    private class BaseClassGetterSetter extends ListGetterSetter implements 
Addable, Removeable {
+        
+        public Collection getOptions(Object modelElement, String type) {
+            LinkedList<String> list = new LinkedList<String>(
+                    Model.getFacade().getBaseClasses(modelElement));
+            Collections.sort(list);
             return list;
         }
+      
+        public Object get(Object modelElement, String type) {
+            // not needed
+            return null;
+        }
+      
+        public void set(Object element, Object x) {
+            // not needed
+        }
 
+        public boolean isValidElement(Object element, String type) {
+            return getOptions(element, type).contains(element);
+        }
+        
+        public Object getMetaType() {
+            return Class.class;
+        }
 
-        protected String getDialogTitle() {
-            return Translator.localize("dialog.title.add-specifications");
+        public Command getAddCommand(Object modelElement) {
+            return new AddCommand(modelElement);
         }
+    
+        public Command getRemoveCommand(Object modelElement, Object 
objectToRemove) {
+           return new RemoveCommand(modelElement, objectToRemove);
+        }
+    
+        private class AddCommand extends AddModelElementCommand {
 
+            final private List<String> metaClasses;
+            
+            /**
+             * Constructor for ActionAddPackageImport.
+             */
+            public AddCommand(Object target) {
+                super(target);
+                metaClasses = 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.
+             */
+            private List<String> initMetaClasses() {
+                Collection<String> tmpMetaClasses = 
+                    Model.getCoreHelper().getAllMetatypeNames();
+                List<String> metaClasses;
+                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);
+                }
+                
+                return metaClasses;
+            }
+            
+            protected List getChoices() {
+               return Collections.unmodifiableList(metaClasses);
+            }
+    
+            protected List getSelected() {
+                LinkedList<String> list = new LinkedList<String>(
+                        Model.getFacade().getBaseClasses(getTarget()));
+                Collections.sort(list);
+                return list;
+            }
+    
+    
+            protected String getDialogTitle() {
+                return Translator.localize("dialog.title.add-baseclasses");
+            }
+    
+    
+            @Override
+            protected void doIt(Collection selected) {
+                Object stereo = getTarget();
+                Set<Object> oldSet = new HashSet<Object>(getSelected());
+                Set toBeRemoved = new HashSet<Object>(oldSet);
 
-        @Override
-        protected void doIt(Collection selected) {
-                   Model.getCommonBehaviorHelper().setClassifiers(getTarget(), 
selected);
+                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);
+                }
+            }
         }
-    }
     
-    private class RemoveCommand
+        private class RemoveCommand
            extends NonUndoableCommand {
        
-       private final Object target;
-       private final Object objectToRemove;
+            private final Object target;
+            private final Object objectToRemove;
        
            /**
-            * Constructor for ActionRemovePackageImport.
+            * Constructor for RemoveCommand.
             */
            public RemoveCommand(final Object target, final Object 
objectToRemove) {
                this.target = target;
@@ -1882,8 +2022,7 @@
             * @see 
java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
             */
            public Object execute() {
-               Model.getCommonBehaviorHelper()
-                   .removeClassifier(target, objectToRemove);
+                Model.getExtensionMechanismsHelper().removeBaseClass(target, 
objectToRemove);
                return null;
            }
        }

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java?view=diff&pathrev=18338&r1=18337&r2=18338
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
    (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
    2010-04-27 07:35:02-0700
@@ -71,8 +71,6 @@
             model = new 
UMLClassifierRoleAvailableFeaturesListModel(modelElement);
         } else if ("base".equals(propName)) {
             model = new UMLClassifierRoleBaseListModel(modelElement);
-        } else if ("baseClass".equals(propName)) {
-            model = new UMLStereotypeBaseClassListModel(modelElement);
         } else if ("classifierInState".equals(propName)) {
             model = new UMLOFSStateListModel(modelElement);
         } else if ("client".equals(propName)) {

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java?view=diff&pathrev=18338&r1=18337&r2=18338
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
        (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
        2010-04-27 07:35:02-0700
@@ -27,6 +27,7 @@
 import org.argouml.core.propertypanels.model.GetterSetterManager;
 import org.argouml.kernel.Command;
 import org.argouml.model.AddAssociationEvent;
+import org.argouml.model.AttributeChangeEvent;
 import org.argouml.model.InvalidElementException;
 import org.argouml.model.Model;
 import org.argouml.model.RemoveAssociationEvent;
@@ -170,6 +171,15 @@
                    }  
                };
                SwingUtilities.invokeLater(doWorkRunnable);
+        } else if (e.getPropertyName().equals("baseClass")
+               && e.getPropertyName().equals(propertyName)
+               && e instanceof AttributeChangeEvent) {
+            // TODO: We have some quirk that the a baseClass addition or
+            // removal from a steroetype comes back as an AttributeChangeEvent
+            // rather than an AssociationChangeEvent. This needs further
+            // investigation to see if this can be made consistent.
+                   removeAllElements();
+            build();
         } else {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("We are listening for too much here. An event we 
don't need " + e);

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2597004

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to