svn commit: r18274 - branches/BRANCH_0_30_x: . src/argouml-app src/argouml-app/tests/org/argouml/profile src/argouml-core-model-mdr/src/org/argouml/model/mdr src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: linus
Date: 2010-04-17 06:17:19-0700
New Revision: 18274

Added:
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/IconIdentifiable.java
      - copied unchanged from r18216, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/IconIdentifiable.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/Named.java
      - copied unchanged from r18216, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/Named.java
Removed:
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCompositeStateSubvertexList.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCompositeStateSubvertexListModel.java
Modified:
   branches/BRANCH_0_30_x/   (props changed)
   branches/BRANCH_0_30_x/src/argouml-app/   (props changed)
   branches/BRANCH_0_30_x/src/argouml-app/tests/org/argouml/profile/   (props changed)
   branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java
   branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManager.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
   branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java

Log:
Merging rev 18216 from trunk for Issue 6048 and 6053.

Modified: branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java	2010-04-17 06:17:19-0700
@@ -3824,6 +3824,9 @@
             if (handle instanceof ParameterDirectionKindEnum) {
                 return handle.toString().replaceAll("pdk_", "");
             }
+            if (handle instanceof PseudostateKind) {
+                return handle.toString().replaceAll("pk_", "");
+            }
             if (handle instanceof ModelElement) {
                 ModelElement me = (ModelElement) handle;
                 return me.getName();

Modified: branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java	2010-04-17 06:17:19-0700
@@ -583,7 +583,8 @@
         
         // specifies valid elements for an ActionState to contain
         validContainmentMap.put(CompositeState.class, 
-                new Class<?>[] { 
+                new Class<?>[] {
+                    Pseudostate.class, SynchState.class, StubState.class, CompositeState.class, SimpleState.class, FinalState.class, SubmachineState.class,
                     CallAction.class, CreateAction.class, DestroyAction.class, ReturnAction.class, SendAction.class, TerminateAction.class, UninterpretedAction.class, ActionSequence.class
                 });
         
@@ -864,6 +865,20 @@
             }
         } else if (elementType == metaTypes.getSignal()) {
             element = Model.getStateMachinesFactory().buildSignalEvent(container);
+        } else if (elementType == metaTypes.getPseudostate() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildPseudoState(container);
+        } else if (elementType == metaTypes.getSynchState() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildSynchState(container);
+        } else if (elementType == metaTypes.getStubState() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildStubState(container);
+        } else if (elementType == metaTypes.getCompositeState() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildCompositeState(container);
+        } else if (elementType == metaTypes.getSimpleState() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildSimpleState(container);
+        } else if (elementType == metaTypes.getFinalState() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildFinalState(container);
+        } else if (elementType == metaTypes.getSubmachineState() && container instanceof CompositeState) {
+            element = Model.getStateMachinesFactory().buildSubmachineState(container);
         } else {
             // build all other elements using existing buildNode
             element = buildNode(elementType);

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/meta/panels.xml	2010-04-17 06:17:19-0700
@@ -2899,8 +2899,7 @@
     <list name="incoming" type="Transition" />
     <list name="internalTransition" type="Transition" label="label.internal-transitions" />
 	<separator />
-    <list name="subvertex" type="StateVertex" />
-    
+    <list name="subvertex" type="org.omg.uml.behavioralelements.statemachines.SynchState,org.omg.uml.behavioralelements.statemachines.StubState,org.omg.uml.behavioralelements.statemachines.CompositeState,org.omg.uml.behavioralelements.statemachines.SimpleState,org.omg.uml.behavioralelements.statemachines.FinalState,org.omg.uml.behavioralelements.statemachines.SubmachineState" />
     <debug />
     <attribute name="visibility" type="VisibilityKind" />
     <attribute name="modifiers">
@@ -3078,7 +3077,7 @@
     <list name="incoming" type="Transition" />
     <list name="internalTransition" type="Transition" label="label.internal-transitions" />    
     <separator />    
-    <list name="subvertex" type="StateVertex" />    
+    <list name="subvertex" type="org.omg.uml.behavioralelements.statemachines.SynchState,org.omg.uml.behavioralelements.statemachines.StubState,org.omg.uml.behavioralelements.statemachines.CompositeState,org.omg.uml.behavioralelements.statemachines.SimpleState,org.omg.uml.behavioralelements.statemachines.FinalState,org.omg.uml.behavioralelements.statemachines.SubmachineState" />
     
     <debug />
     <attribute name="visibility" type="VisibilityKind" />
@@ -3620,7 +3619,7 @@
     <attribute name="doActivity" type="Action" />
     <attribute name="stateMachine" type="StateMachine" />
     <list name="classifierInState" type="State" label="label.classifier-in-state" />
-    <list name="subvertex" type="StateVertex" />
+    <list name="subvertex" type="org.omg.uml.behavioralelements.statemachines.SynchState,org.omg.uml.behavioralelements.statemachines.StubState,org.omg.uml.behavioralelements.statemachines.CompositeState,org.omg.uml.behavioralelements.statemachines.SimpleState,org.omg.uml.behavioralelements.statemachines.FinalState,org.omg.uml.behavioralelements.statemachines.SubmachineState" />
     <attribute name="submachine" type="StateMachine" />
     <separator />
     <attribute name="dynamicArguments" type="ArgListsExpression" />

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManager.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManager.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManager.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManager.java	2010-04-17 06:17:19-0700
@@ -13,8 +13,11 @@
 
 package org.argouml.core.propertypanels.model;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.swing.Action;
@@ -58,6 +61,8 @@
     
     public abstract Command getAddCommand(String propertyName, Object umlElement);
     
+    public abstract List<Command> getAdditionalCommands(String propertyName, Object umlElement);
+    
     /** This forces component to fully rebuild when items are added and removed
      *  Used for pragmatic purposes but not advised long term we should remove this in time
      */
@@ -99,15 +104,18 @@
     protected abstract class ListGetterSetter extends OptionGetterSetter {
         abstract boolean isValidElement(Object modelElement, String type);
         abstract Object getMetaType();
-        Action getAddAction(Object modelElement) {
-        	return null;
-        }
-        Action getRemoveAction(Object modelElement) {
-        	return null;
-        }
         boolean isFullBuildOnly() {
         	return false;
         }
+        /**
+         * Returns additional commands that cannot be deduced from the panel
+         * xml or other means. This is currently only used by
+         * SubvertexGetterSetter and should be removed as soon as we have some
+         * configurable way to replace.
+         * @param modelElement TODO
+         */
+        public List<Command> getAdditionalCommands(Object modelElement) {
+        	return Collections.emptyList();
+        }
     }
-    
 }
\ No newline at end of file

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java	2010-04-17 06:17:19-0700
@@ -20,14 +20,19 @@
 import java.util.List;
 import java.util.StringTokenizer;
 
+import javax.swing.Icon;
 import javax.swing.JOptionPane;
 
 import org.apache.log4j.Logger;
+import org.argouml.application.helpers.ResourceLoaderWrapper;
+import org.argouml.core.propertypanels.meta.IconIdentifiable;
+import org.argouml.core.propertypanels.meta.Named;
 import org.argouml.i18n.Translator;
 import org.argouml.kernel.Command;
 import org.argouml.kernel.NonUndoableCommand;
 import org.argouml.kernel.ProjectManager;
 import org.argouml.model.Model;
+import org.argouml.ui.targetmanager.TargetManager;
 import org.argouml.uml.ui.UMLAddDialog;
 import org.argouml.util.ArgoFrame;
 
@@ -90,6 +95,7 @@
         addGetterSetter("deferrableEvent", new DeferrableEventGetterSetter());
         addGetterSetter("entry", new EntryActionGetterSetter());
         addGetterSetter("action", new ActionGetterSetter());
+        addGetterSetter("subvertex", new SubvertexGetterSetter());
         
         // UML2 only
         addGetterSetter("ownedOperation", new FeatureGetterSetter());
@@ -196,6 +202,15 @@
 	}
 
 	@Override
+	public List<Command> getAdditionalCommands(String propertyName, Object umlElement) {
+        BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+        if (bgs instanceof ListGetterSetter) {
+            return ((ListGetterSetter) bgs).getAdditionalCommands(umlElement);
+        }
+		return null;
+	}
+
+	@Override
 	public Command getRemoveCommand(String propertyName, Object umlElement, Object objectToRemove) {
         BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
         if (bgs instanceof Removeable) {
@@ -1084,6 +1099,114 @@
             return Model.getMetaTypes().getAction();
         }
     }
+
+    private class SubvertexGetterSetter extends ListGetterSetter {
+        
+        public Collection getOptions(Object modelElement, String type) {
+            return Model.getFacade().getSubvertices(modelElement);
+        }
+      
+        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 Model.getMetaTypes().getState();
+        }
+        
+        /**
+         * Returns additional commands that cannot be deduced from the panel
+         * xml or other means. This is currently only used by
+         * SubvertexGetterSetter and should be removed as soon as we have some
+         * configurable way to replace.
+         */
+        public List<Command> getAdditionalCommands(Object modelElement) {
+        	final List<Command> commands = new ArrayList<Command>(6);
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getFork()));
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getJoin()));
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getChoice()));
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getDeepHistory()));
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getShallowHistory()));
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getInitial()));
+        	commands.add(new NewPseudoStateCommand(
+        			modelElement, Model.getPseudostateKind().getJunction()));
+        	return commands;
+        }
+        
+        private class NewPseudoStateCommand extends NonUndoableCommand implements IconIdentifiable, Named {
+
+        	private final String label;
+        	private final Object kind;
+        	private final Icon icon;
+        	private final Object target;
+        	
+        	/**
+        	 * A Command to create a new pseudostate inside some target model
+        	 * element.
+        	 * @param target the target model element the pseudo state should
+        	 * belong to
+        	 * @param kind the required kind of pseudostate
+        	 */
+        	NewPseudoStateCommand(Object target, Object kind) {
+        		this.target = target;
+        		this.kind = kind;
+                if (kind == Model.getPseudostateKind().getFork()) {
+                    label = Translator.localize("label.pseudostate.fork");
+                } else if (kind == Model.getPseudostateKind().getJoin()) {
+                    label = Translator.localize("label.pseudostate.join");
+                } else if (kind == Model.getPseudostateKind().getChoice()) {
+                	label = Translator.localize("label.pseudostate.choice");
+                } else if (kind == Model.getPseudostateKind().getDeepHistory()) {
+                	label = Translator.localize("label.pseudostate.deephistory");
+                } else if (kind == Model.getPseudostateKind().getShallowHistory()) {
+                	label = Translator.localize("label.pseudostate.shallowhistory");
+                } else if (kind == Model.getPseudostateKind().getInitial()) {
+                	label = Translator.localize("label.pseudostate.initial");
+                } else if (kind == Model.getPseudostateKind().getJunction()) {
+                	label = Translator.localize("label.pseudostate.junction");
+                } else {
+                	throw new IllegalArgumentException(
+                			kind + " is not a known PseudostateKind");
+                }
+                icon = ResourceLoaderWrapper.lookupIcon(
+                		Model.getFacade().getName(kind));
+            }
+        	
+			@Override
+			public Object execute() {
+                final Object ps =
+                    Model.getStateMachinesFactory().buildPseudoState(target);
+                if (kind != null) {
+                    Model.getCoreHelper().setKind(ps, kind);
+                }                	
+                TargetManager.getInstance().setTarget(ps);
+				return null;
+			}
+        	
+			public Icon getIcon() {
+				return icon;
+			}
+        	
+			public String getName() {
+				return label;
+			}
+        }
+    }
     
     private class TemplateParameterGetterSetter extends ListGetterSetter {
         

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ListFactory.java	2010-04-17 06:17:19-0700
@@ -40,7 +40,6 @@
 
 import javax.swing.DefaultListModel;
 import javax.swing.JComponent;
-import javax.swing.JList;
 
 import org.argouml.core.propertypanels.model.GetterSetterManager;
 
@@ -130,10 +129,6 @@
             model = new UMLAssociationEndSpecificationListModel(modelElement);
         } else if ("submachineState".equals(propName)) {
             model = new UMLStateMachineSubmachineStateListModel(modelElement);
-        } else if ("subvertex".equals(propName)) {
-            model = new UMLCompositeStateSubvertexListModel(modelElement);
-            JList l = new UMLCompositeStateSubvertexList((UMLModelElementListModel) model);
-            list = new OldScrollList(l);
         } else if ("supplier".equals(propName)) {
             model = new UMLDependencySupplierListModel(modelElement);
         } else if ("supplierDependency".equals(propName)) {

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RowSelector.java	2010-04-17 06:17:19-0700
@@ -74,6 +74,8 @@
 
 import org.apache.log4j.Logger;
 import org.argouml.application.helpers.ResourceLoaderWrapper;
+import org.argouml.core.propertypanels.meta.IconIdentifiable;
+import org.argouml.core.propertypanels.meta.Named;
 import org.argouml.i18n.Translator;
 import org.argouml.kernel.Command;
 import org.argouml.kernel.Project;
@@ -252,6 +254,7 @@
         List metaTypes = null;
         final Action addAction;
         List<Action> newActions = null;
+        List<Command> additionalCommands = null;
         
         if (model instanceof UMLModelElementListModel) {
             // Temporary until SimpleListModel is used for all
@@ -265,6 +268,7 @@
             target = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getUmlElement();
             metaType = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getMetaType();
             metaTypes = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getMetaTypes();
+            additionalCommands = ((org.argouml.core.propertypanels.ui.SimpleListModel) model).getAdditionalCommands();
             scroll = new ScrollListImpl(model, 1);
             readonly = Model.getModelManagementHelper().isReadOnly(target);
         } else {
@@ -343,6 +347,16 @@
                     actions.addAll(newActions);
                 }
                 
+                if (additionalCommands != null && !additionalCommands.isEmpty()) {
+                	for (Command cmd : additionalCommands) {
+                		if (cmd instanceof IconIdentifiable && cmd instanceof Named) {
+                            actions.add(new CommandAction(cmd, ((Named)cmd).getName(), ((IconIdentifiable)cmd).getIcon()));
+                		} else {
+                            actions.add(new CommandAction(cmd));
+                		}
+                	}
+                }
+                
                 if (!actions.isEmpty()) {
                     PopupToolBoxButton tb = new PopupToolBoxButton(actions.get(0), actions.size(), 1, true);
                     for (Action action : actions) {
@@ -386,6 +400,16 @@
                     }
                 }
 
+                if (additionalCommands != null && !additionalCommands.isEmpty()) {
+                	for (Command cmd : additionalCommands) {
+                		if (cmd instanceof IconIdentifiable && cmd instanceof Named) {
+                            actions.add(new CommandAction(cmd, ((Named)cmd).getName(), ((IconIdentifiable)cmd).getIcon()));
+                		} else {
+                            actions.add(new CommandAction(cmd));
+                		}
+                	}
+                }
+                
                 if (Model.getUmlHelper().isMovable(metaType)) {
                     moveUpAction = new MoveUpAction();
                     moveDownAction = new MoveDownAction();
@@ -948,4 +972,26 @@
 			}
 		}
     }
+    
+    private static class CommandAction extends UndoableAction {
+
+    	private final Command command;
+    	
+    	public CommandAction(Command cmd) {
+    		super("", ResourceLoaderWrapper.lookupIcon("Remove"));
+    		this.command = cmd;
+    	}
+    	
+    	public CommandAction(Command cmd, String name, Icon icon) {
+    		super(name, icon);
+    		
+    		this.command = cmd;
+    	}
+    	
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			super.actionPerformed(e);
+			command.execute();
+		}
+    }
 }

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SimpleListModel.java	2010-04-17 06:17:19-0700
@@ -117,6 +117,10 @@
     	return getterSetterManager.getAddCommand(propertyName, umlElement);
     }
     
+    public List<Command> getAdditionalCommands() {
+    	return getterSetterManager.getAdditionalCommands(propertyName, umlElement);
+    }
+    
     /*
      * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
      */

Modified: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java?view=diff&pathrev=18274&r1=18273&r2=18274
==============================================================================
--- branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java	(original)
+++ branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java	2010-04-17 06:17:19-0700
@@ -49,6 +49,7 @@
 import javax.swing.JToolBar;
 import javax.swing.border.TitledBorder;
 
+import org.apache.log4j.Logger;
 import org.argouml.application.helpers.ResourceLoaderWrapper;
 import org.argouml.core.propertypanels.meta.CheckBoxMeta;
 import org.argouml.core.propertypanels.meta.PanelMeta;
@@ -65,6 +66,8 @@
  * Creates the XML Property panels
  */
 class SwingUIFactory {
+	
+	private static final Logger LOG = Logger.getLogger(SwingUIFactory.class);
     
     public SwingUIFactory() {
         
@@ -79,31 +82,38 @@
     public void createGUI (
             final Object target,
             final JPanel panel) throws Exception {
-        PanelMeta data = 
-            XMLPropPanelFactory.getInstance().getPropertyPanelsData(
-                    Model.getMetaTypes().getName(target));
-        
-        createLabel(target, panel);
-        
-        for (PropertyMeta prop : data.getProperties()) {
-            if ("text".equals(prop.getControlType())) {
-                buildTextboxPanel(panel, target, prop);
-            } else if ("combo".equals(prop.getControlType())) {
-                buildComboPanel(panel, target, prop);                
-            } else if ("checkgroup".equals(prop.getControlType())) {
-                buildCheckGroup(panel, target, prop);
-            } else if ("optionbox".equals(prop.getControlType())) {
-                buildOptionBox(panel, target, prop);
-            } else if ("singlerow".equals(prop.getControlType())) {
-                buildSingleRow(panel, target, prop);
-            } else if ("list".equals(prop.getControlType())) {                    
-                buildList(panel, target, prop);
-            } else if ("textarea".equals(prop.getControlType())) {
-                buildTextArea(panel, target, prop);
-            } else if ("separator".equals(prop.getControlType())) {
-                panel.add(LabelledLayout.getSeparator());
+            PanelMeta data = 
+                XMLPropPanelFactory.getInstance().getPropertyPanelsData(
+                        Model.getMetaTypes().getName(target));
+            
+            createLabel(target, panel);
+            
+            for (PropertyMeta prop : data.getProperties()) {
+            	try {
+                if ("text".equals(prop.getControlType())) {
+                    buildTextboxPanel(panel, target, prop);
+                } else if ("combo".equals(prop.getControlType())) {
+                    buildComboPanel(panel, target, prop);                
+                } else if ("checkgroup".equals(prop.getControlType())) {
+                    buildCheckGroup(panel, target, prop);
+                } else if ("optionbox".equals(prop.getControlType())) {
+                    buildOptionBox(panel, target, prop);
+                } else if ("singlerow".equals(prop.getControlType())) {
+                    buildSingleRow(panel, target, prop);
+                } else if ("list".equals(prop.getControlType())) {                    
+                    buildList(panel, target, prop);
+                } else if ("textarea".equals(prop.getControlType())) {
+                    buildTextArea(panel, target, prop);
+                } else if ("separator".equals(prop.getControlType())) {
+                    panel.add(LabelledLayout.getSeparator());
+                }
+            	} catch (Exception e) {
+            		throw new IllegalStateException(
+            				"Exception caught building control " + prop.getControlType()
+            				+ " for property " + prop.getName() + " on panel for "
+            				+ target, e);
+            	}
             }
-        }
     }
 
     /**
@@ -113,13 +123,24 @@
      */
     private void createLabel (Object target, JPanel panel) {
         final String metaTypeName = Model.getMetaTypes().getName(target);
-        ToolBarFactory tbf = new ToolBarFactory(new Object[0]);
+        final ToolBarFactory tbf = new ToolBarFactory(new Object[0]);
         tbf.setRollover(true);
-        JToolBar tb = tbf.createToolBar();
-        tb.add(new JLabel(metaTypeName, ResourceLoaderWrapper.lookupIconResource(metaTypeName), JLabel.LEFT));
+        final JToolBar tb = tbf.createToolBar();
+        final String label;
+        
+        if (Model.getFacade().isAPseudostate(target)) {
+        	// TODO: We need some way of driving this from panel xml rather
+        	// than hard coded test
+        	Object pseudostateKind = Model.getFacade().getKind(target);
+        	label = Model.getFacade().getName(pseudostateKind);
+        } else {
+            label = metaTypeName;
+        }
+    	tb.add(new JLabel(label, ResourceLoaderWrapper.lookupIconResource(label), JLabel.LEFT));
         if (!Model.getModelManagementHelper().isReadOnly(target)) {
             tb.add(new NavigateUpAction(target));
             
+            // TODO: This should not be hard coded but should be driven from the panel xml
             if (Model.getFacade().isAAttribute(target)
                 || Model.getFacade().isAOperation(target)
                 || Model.getFacade().isAReception(target)

Removed: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCompositeStateSubvertexList.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCompositeStateSubvertexList.java?view=markup&pathrev=18273

Removed: branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCompositeStateSubvertexListModel.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/BRANCH_0_30_x/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCompositeStateSubvertexListModel.java?view=markup&pathrev=18273

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

To unsubscribe from this discussion, e-mail: [[email protected]].
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.