svn commit: r17693 - trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui
Bob Tarling <[email protected]>
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: bobtarling
Date: 2009-12-21 02:56:15-0800
New Revision: 17693
Added:
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManager.java
- copied, changed from r17689, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManagerImpl.java
- copied, changed from r17689, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java
Removed:
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java
Modified:
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java
Log:
New implementation of RadioButtonPanel
Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java?view=diff&pathrev=17693&r1=17692&r2=17693
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/CheckBox.java 2009-12-21 02:56:15-0800
@@ -1,4 +1,15 @@
-// $Id: Checkbox.java 15920 2008-10-14 18:03:33Z bobtarling $
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 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:
+ * Bob Tarling - Original implementation
+ *******************************************************************************
+ */
package org.argouml.core.propertypanels.ui;
@@ -36,7 +47,7 @@
*/
private final Action action;
- private final GetterSetter getterSetter;
+ private final GetterSetterManager getterSetter;
/**
* Constructor for UMLCheckBox.
@@ -51,7 +62,7 @@
final String text,
final Object modelElement,
final String propertyName,
- final GetterSetter getterSetter) {
+ final GetterSetterManager getterSetter) {
super(text);
this.getterSetter = getterSetter;
@@ -111,7 +122,7 @@
*/
private static final long serialVersionUID = -2708077474004286682L;
- private final GetterSetter getterSetter;
+ private final GetterSetterManager getterSetter;
private final String propertyName;
private Object modelElement;
@@ -119,7 +130,7 @@
* Constructor for ActionSetElementOwnershipSpecification.
*/
protected SetAction(
- final GetterSetter getterSetter,
+ final GetterSetterManager getterSetter,
final Object modelElement,
final String propertyName) {
super(Translator.localize("Set"), null);
Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java?view=markup&pathrev=17692
Removed: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java?view=markup&pathrev=17692
Copied: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManager.java (from r17689, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java)
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManager.java?view=diff&pathrev=17693&r1=17689&r2=17693
==============================================================================
--- /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetter.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManager.java 2009-12-21 02:56:15-0800
@@ -1,15 +1,30 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 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:
+ * Bob Tarling - Post GSOC improvements
+ *******************************************************************************
+ */
+
package org.argouml.core.propertypanels.ui;
import java.util.HashMap;
import java.util.Map;
-abstract class GetterSetter {
+import org.argouml.model.Model;
+
+abstract class GetterSetterManager {
/**
* The list of boolean property getter/setters
*/
- protected final Map<String, BooleanGetterSetter> getterSetterByPropertyName =
- new HashMap<String, BooleanGetterSetter>();
+ protected final Map<String, BaseGetterSetter> getterSetterByPropertyName =
+ new HashMap<String, BaseGetterSetter>();
/**
* Set a UML property by property name
@@ -26,20 +41,34 @@
* @param propertyName the property name
*/
abstract Object get(Object handle, String propertyName);
+
+ abstract String[] getOptions(String propertyName);
boolean contains(String propertyName) {
return getterSetterByPropertyName.containsKey(propertyName);
}
- static GetterSetter getGetterSetter() {
- return new GetterSetterImpl();
+ static GetterSetterManager getGetterSetter() {
+ return new GetterSetterManagerImpl();
}
- protected abstract class BooleanGetterSetter {
+ protected abstract class BaseGetterSetter {
- abstract String getPropertyName();
- abstract Boolean get(Object modelElement);
- abstract void set(Object modelElement, Boolean value);
+// abstract String getPropertyName();
+ abstract Object get(Object modelElement);
+ abstract void set(Object modelElement, Object value);
}
+ protected abstract class RadioGetterSetter extends BaseGetterSetter {
+
+ private String[] options;
+
+ protected void setOptions(final String[] options) {
+ this.options = options;
+ }
+
+ protected String[] getOptions() {
+ return options;
+ }
+ }
}
\ No newline at end of file
Copied: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManagerImpl.java (from r17689, /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java)
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManagerImpl.java?view=diff&pathrev=17693&r1=17689&r2=17693
==============================================================================
--- /trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterImpl.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/GetterSetterManagerImpl.java 2009-12-21 02:56:15-0800
@@ -1,32 +1,66 @@
-// $Id: PopupMenuNewEvent.java 15918 2008-10-14 06:40:41Z mvw $
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 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:
+ * Bob Tarling - Original implementation
+ *******************************************************************************
+ */
package org.argouml.core.propertypanels.ui;
import org.argouml.model.Model;
/**
- * Property getters and setters
+ * Property getters and setters for UML1.4
* @author Bob Tarling
*/
-class GetterSetterImpl extends GetterSetter {
+class GetterSetterManagerImpl extends GetterSetterManager {
- public GetterSetterImpl() {
- addGetterSetter(new AbstractGetterSetter());
- addGetterSetter(new LeafGetterSetter());
- addGetterSetter(new RootGetterSetter());
- addGetterSetter(new ActiveGetterSetter());
- addGetterSetter(new OwnerScopeGetterSetter());
- addGetterSetter(new TargetScopeGetterSetter());
- addGetterSetter(new QueryGetterSetter());
- addGetterSetter(new NavigableGetterSetter());
- addGetterSetter(new AsynchronousGetterSetter());
- addGetterSetter(new SynchGetterSetter());
- addGetterSetter(new OrderingGetterSetter());
+ /**
+ * The constructor
+ */
+ public GetterSetterManagerImpl() {
+ build();
+ }
+
+ /**
+ * Create all the getter/setters for this implementation
+ */
+ private void build() {
+ addGetterSetter("isAbstract", new AbstractGetterSetter());
+ addGetterSetter("isLeaf", new LeafGetterSetter());
+ addGetterSetter("isRoot", new RootGetterSetter());
+ addGetterSetter("isActive", new ActiveGetterSetter());
+ addGetterSetter("ownerScope", new OwnerScopeGetterSetter());
+ addGetterSetter("targetScope", new TargetScopeGetterSetter());
+ addGetterSetter("isQuery", new QueryGetterSetter());
+ addGetterSetter("isNavigable", new NavigableGetterSetter());
+ addGetterSetter("isSynchronous", new AsynchronousGetterSetter());
+ addGetterSetter("isSynch", new SynchGetterSetter());
+ addGetterSetter("ordering", new OrderingGetterSetter());
+ addGetterSetter("navigable", new NavigableGetterSetter());
+ addGetterSetter("derived", new DerivedGetterSetter());
+ addGetterSetter("visibility", new VisibilityGetterSetter());
+ addGetterSetter("aggregation", new AggregationGetterSetter());
+ addGetterSetter("kind", new ParameterDirectionGetterSetter());
+ addGetterSetter("changeability", new ChangeabilityGetterSetter());
+ addGetterSetter("concurrency", new ConcurrencyGetterSetter());
}
- private void addGetterSetter(BooleanGetterSetter bgs) {
- getterSetterByPropertyName.put(bgs.getPropertyName(), bgs);
+ /**
+ * Helper method for adding a new getter/setter
+ * @param propertyName
+ * @param bgs
+ */
+ private void addGetterSetter(String propertyName, BaseGetterSetter bgs) {
+ getterSetterByPropertyName.put(propertyName, bgs);
}
+
/**
* Set a UML property by property name
* @param handle the element to which a property must be set
@@ -34,9 +68,9 @@
* @param propertyName the property name
*/
public void set(Object handle, Object value, String propertyName) {
- BooleanGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+ BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
if (bgs != null) {
- bgs.set(handle, (Boolean) value);
+ bgs.set(handle, value);
}
}
@@ -47,7 +81,7 @@
* @param propertyName the property name
*/
public Object get(Object handle, String propertyName) {
- BooleanGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+ BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
if (bgs != null) {
return bgs.get(handle);
}
@@ -55,136 +89,116 @@
return null;
}
- private class AbstractGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isAbstract";
+ public String[] getOptions(String propertyName) {
+ BaseGetterSetter bgs = getterSetterByPropertyName.get(propertyName);
+ if (bgs instanceof RadioGetterSetter) {
+ return ((RadioGetterSetter) bgs).getOptions();
}
- public Boolean get(Object modelElement) {
+
+ return null;
+ }
+
+ /**
+ * The getter/setter for the Absrtact property
+ * @author Bob Tarling
+ */
+ private class AbstractGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isAbstract(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setAbstract(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setAbstract(modelElement, (Boolean) value);
}
}
- private class LeafGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isLeaf";
- }
- public Boolean get(Object modelElement) {
+ private class LeafGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isLeaf(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setLeaf(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setLeaf(modelElement, (Boolean) value);
}
}
- private class RootGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isRoot";
- }
- public Boolean get(Object modelElement) {
+ private class RootGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isRoot(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setRoot(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setRoot(modelElement, (Boolean) value);
}
}
- private class ActiveGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isActive";
- }
- public Boolean get(Object modelElement) {
+ private class ActiveGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isActive(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setActive(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setActive(modelElement, (Boolean) value);
}
}
- private class OwnerScopeGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "ownerScope";
- }
- public Boolean get(Object modelElement) {
+ private class OwnerScopeGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isStatic(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setStatic(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setStatic(modelElement, (Boolean) value);
}
}
- private class TargetScopeGetterSetter extends BooleanGetterSetter {
+ private class TargetScopeGetterSetter extends BaseGetterSetter {
// Have we handled UML2 here?
- public String getPropertyName() {
- return "targetScope";
- }
- public Boolean get(Object modelElement) {
+ public Object get(Object modelElement) {
return Model.getFacade().isStatic(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setStatic(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setStatic(modelElement, (Boolean) value);
}
}
- private class QueryGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isQuery";
- }
- public Boolean get(Object modelElement) {
+ private class QueryGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isQuery(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setQuery(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setQuery(modelElement, (Boolean) value);
}
}
- private class NavigableGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "navigable";
- }
- public Boolean get(Object modelElement) {
+ private class NavigableGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isNavigable(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCoreHelper().setNavigable(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCoreHelper().setNavigable(modelElement, (Boolean) value);
}
}
- private class AsynchronousGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isSynchronous";
- }
- public Boolean get(Object modelElement) {
+ private class AsynchronousGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isAsynchronous(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getCommonBehaviorHelper().setAsynchronous(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getCommonBehaviorHelper().setAsynchronous(modelElement, (Boolean) value);
}
}
- private class SynchGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "isSynch";
- }
- public Boolean get(Object modelElement) {
+ private class SynchGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().isSynch(modelElement);
}
- public void set(Object modelElement, Boolean value) {
- Model.getActivityGraphsHelper().setSynch(modelElement, value);
+ public void set(Object modelElement, Object value) {
+ Model.getActivityGraphsHelper().setSynch(modelElement, (Boolean) value);
}
}
- private class OrderingGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "ordering";
- }
- public Boolean get(Object modelElement) {
+ private class OrderingGetterSetter extends BaseGetterSetter {
+ public Object get(Object modelElement) {
return Model.getFacade().getOrdering(modelElement) ==
Model.getOrderingKind().getOrdered();
}
- public void set(Object modelElement, Boolean value) {
+ public void set(Object modelElement, Object value) {
if ((Boolean) value) {
Model.getCoreHelper().setOrdering(modelElement,
Model.getOrderingKind().getOrdered());
@@ -195,24 +209,28 @@
}
}
- private class DerivedGetterSetter extends BooleanGetterSetter {
- public String getPropertyName() {
- return "derived";
- }
- public Boolean get(Object modelElement) {
- Object tv = Model.getFacade().getTaggedValue(modelElement, getPropertyName());
+ private class DerivedGetterSetter extends BaseGetterSetter {
+
+ /**
+ * Derived is not a true UML property but is in fact a pseudo property
+ * stored in a tag named "derived"
+ */
+ private static final String TagName = "derived";
+
+ public Object get(Object modelElement) {
+ Object tv = Model.getFacade().getTaggedValue(modelElement, TagName);
if (tv != null) {
String tag = Model.getFacade().getValueOfTag(tv);
return ("true".equals(tag));
}
return false;
}
- public void set(Object modelElement, Boolean value) {
- Object taggedValue = Model.getFacade().getTaggedValue(modelElement, (String) getPropertyName());
+ public void set(Object modelElement, Object value) {
+ Object taggedValue = Model.getFacade().getTaggedValue(modelElement, TagName);
if (taggedValue == null) {
taggedValue =
Model.getExtensionMechanismsFactory().buildTaggedValue(
- (String) getPropertyName(), "");
+ TagName, "");
Model.getExtensionMechanismsHelper().addTaggedValue(
modelElement, taggedValue);
}
@@ -223,4 +241,281 @@
}
}
}
+
+
+ public class VisibilityGetterSetter extends RadioGetterSetter {
+
+ /**
+ * Identifier for public visibility.
+ */
+ public static final String PUBLIC = "public";
+
+ /**
+ * Identifier for protected visibility.
+ */
+ public static final String PROTECTED = "protected";
+
+ /**
+ * Identifier for private visibility.
+ */
+ public static final String PRIVATE = "private";
+
+ /**
+ * Identifier for package visibility.
+ */
+ public static final String PACKAGE = "package";
+
+ public VisibilityGetterSetter() {
+ setOptions(new String[] {PUBLIC, PACKAGE, PROTECTED, PRIVATE});
+ }
+
+ public Object get(Object modelElement) {
+ Object kind = Model.getFacade().getVisibility(modelElement);
+ if (kind == null) {
+ return null;
+ } else if (kind.equals(Model.getVisibilityKind().getPublic())) {
+ return PUBLIC;
+ } else if (kind.equals(Model.getVisibilityKind().getPackage())) {
+ return PACKAGE;
+ } else if (kind.equals(Model.getVisibilityKind().getProtected())) {
+ return PROTECTED;
+ } else if (kind.equals(Model.getVisibilityKind().getPrivate())) {
+ return PRIVATE;
+ } else {
+ return PUBLIC;
+ }
+ }
+
+ public void set(Object modelElement, Object value) {
+ Object kind = null;
+ if (value.equals(PUBLIC)) {
+ kind = Model.getVisibilityKind().getPublic();
+ } else if (value.equals(PROTECTED)) {
+ kind = Model.getVisibilityKind().getProtected();
+ } else if (value.equals(PACKAGE)) {
+ kind = Model.getVisibilityKind().getPackage();
+ } else {
+ kind = Model.getVisibilityKind().getPrivate();
+ }
+ Model.getCoreHelper().setVisibility(modelElement, kind);
+ }
+ }
+
+
+ private class AggregationGetterSetter extends RadioGetterSetter {
+
+ /**
+ * Identifier for aggregate aggregation kind.
+ */
+ public static final String AGGREGATE = "aggregate";
+
+ /**
+ * Identifier for composite aggregation kind.
+ */
+ public static final String COMPOSITE = "composite";
+
+ /**
+ * Identifier for no aggregation kind.
+ */
+ public static final String NONE = "none";
+
+ public AggregationGetterSetter() {
+ setOptions(new String[] {AGGREGATE, COMPOSITE, NONE});
+ }
+
+ public Object get(Object modelElement) {
+ Object kind = Model.getFacade().getAggregation(modelElement);
+ if (kind == null) {
+ return null;
+ } else if (kind.equals(Model.getAggregationKind().getNone())) {
+ return NONE;
+ } else if (kind.equals(Model.getAggregationKind().getAggregate())) {
+ return AGGREGATE;
+ } else if (kind.equals(Model.getAggregationKind().getComposite())) {
+ return COMPOSITE;
+ } else {
+ return NONE;
+ }
+ }
+
+ public void set(Object modelElement, Object value) {
+ Object kind = null;
+
+ if (value.equals(AGGREGATE)) {
+ kind = Model.getAggregationKind().getAggregate();
+ } else if (value.equals(COMPOSITE)) {
+ kind = Model.getAggregationKind().getComposite();
+ } else {
+ kind = Model.getAggregationKind().getNone();
+ }
+ Model.getCoreHelper().setAggregation(modelElement, kind);
+
+ }
+ }
+
+ private class ParameterDirectionGetterSetter extends RadioGetterSetter {
+
+ /**
+ * Identifier for an "in" parameter.
+ */
+ public static final String IN = "in";
+
+ /**
+ * Identifier for an "out" parameter.
+ */
+ public static final String OUT = "out";
+
+ /**
+ * Identifier for an "in/out" parameter.
+ */
+ public static final String INOUT = "inout";
+
+ /**
+ * Identifier for a "return" parameter.
+ */
+ public static final String RETURN = "return";
+
+ public ParameterDirectionGetterSetter() {
+ setOptions(new String[] {
+ IN,
+ OUT,
+ INOUT,
+ RETURN});
+ }
+
+ public Object get(Object modelElement) {
+ Object kind = Model.getFacade().getKind(modelElement);
+ if (kind == null) {
+ return null;
+ } else if (kind.equals(Model.getDirectionKind().getInParameter())) {
+ return IN;
+ } else if (kind.equals(Model.getDirectionKind().getInOutParameter())) {
+ return INOUT;
+ } else if (kind.equals(Model.getDirectionKind().getOutParameter())) {
+ return OUT;
+ } else {
+ return RETURN;
+ }
+ }
+
+ public void set(Object modelElement, Object value) {
+ Object kind = null;
+ if (value == null) {
+ kind = null;
+ } else if (value.equals(IN)) {
+ kind = Model.getDirectionKind().getInParameter();
+ } else if (value.equals(OUT)) {
+ kind = Model.getDirectionKind().getOutParameter();
+ } else if (value.equals(INOUT)) {
+ kind = Model.getDirectionKind().getInOutParameter();
+ } else if (value.equals(RETURN)) {
+ kind = Model.getDirectionKind().getReturnParameter();
+ }
+ Model.getCoreHelper().setKind(modelElement, kind);
+
+ }
+ }
+
+
+ private class ConcurrencyGetterSetter extends RadioGetterSetter {
+
+ /**
+ * Identifier for sequential concurrency.
+ */
+ public static final String SEQUENTIAL= "sequential";
+
+ /**
+ * Identifier for guarded concurrency.
+ */
+ public static final String GUARDED = "guarded";
+
+ /**
+ * Identifier for concurrent concurrency.
+ */
+ public static final String CONCURRENT = "concurrent";
+
+ public ConcurrencyGetterSetter() {
+ setOptions(new String[] {
+ SEQUENTIAL,
+ GUARDED,
+ CONCURRENT});
+ }
+
+ public Object get(Object modelElement) {
+ Object kind = Model.getFacade().getConcurrency(modelElement);
+ if (kind == null) {
+ return null;
+ } else if (kind.equals(Model.getConcurrencyKind().getSequential())) {
+ return SEQUENTIAL;
+ } else if (kind.equals(Model.getConcurrencyKind().getGuarded())) {
+ return GUARDED;
+ } else if (kind.equals(Model.getConcurrencyKind().getConcurrent())) {
+ return CONCURRENT;
+ } else {
+ return SEQUENTIAL;
+ }
+ }
+
+ public void set(Object modelElement, Object value) {
+ Object kind = null;
+ if (value.equals(SEQUENTIAL)) {
+ kind = Model.getConcurrencyKind().getSequential();
+ } else if (value.equals(GUARDED)) {
+ kind = Model.getConcurrencyKind().getGuarded();
+ } else {
+ kind = Model.getConcurrencyKind().getConcurrent();
+ }
+ Model.getCoreHelper().setConcurrency(modelElement, kind);
+ }
+ }
+
+
+ private class ChangeabilityGetterSetter extends RadioGetterSetter {
+
+ /**
+ * Identifier for addonly changeability.
+ * TODO: Note this should not be ni UML2 version
+ */
+ public static final String ADDONLY = "addonly";
+
+ /**
+ * CHANGEABLE_COMMAND determines a changeability kind.
+ */
+ public static final String CHANGEABLE = "changeable";
+
+ /**
+ * FROZEN_COMMAND determines a changeability kind.
+ */
+ public static final String FROZEN = "frozen";
+
+ public ChangeabilityGetterSetter() {
+ setOptions(new String[] {ADDONLY, CHANGEABLE, FROZEN});
+ }
+
+ public Object get(Object modelElement) {
+ Object kind = Model.getFacade().getChangeability(modelElement);
+ if (kind == null) {
+ return null;
+ } else if (kind.equals(Model.getChangeableKind().getAddOnly())) {
+ return ADDONLY;
+ } else if (kind.equals(Model.getChangeableKind().getChangeable())) {
+ return CHANGEABLE;
+ } else if (kind.equals(Model.getChangeableKind().getFrozen())) {
+ return FROZEN;
+ } else {
+ return CHANGEABLE;
+ }
+ }
+
+ public void set(Object modelElement, Object value) {
+ if (value.equals(CHANGEABLE)) {
+ Model.getCoreHelper().setReadOnly(modelElement, false);
+ } else if (value.equals(ADDONLY)) {
+ Model.getCoreHelper().setChangeability(
+ modelElement, Model.getChangeableKind().getAddOnly());
+ } else {
+ Model.getCoreHelper().setReadOnly(modelElement, true);
+ }
+ }
+ }
}
Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java?view=markup&pathrev=17693
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/RadioButtonPanel.java 2009-12-21 02:56:15-0800
@@ -0,0 +1,219 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 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:
+ * Bob Tarling - Original implementation
+ *******************************************************************************
+ */
+
+package org.argouml.core.propertypanels.ui;
+
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Enumeration;
+
+import javax.swing.AbstractButton;
+import javax.swing.Action;
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.border.TitledBorder;
+
+import org.argouml.model.Model;
+import org.argouml.i18n.Translator;
+import org.argouml.ui.LookAndFeelMgr;
+import org.argouml.ui.UndoableAction;
+import org.tigris.swidgets.FlexiGridLayout;
+
+/**
+ * A collection of radio buttons representing the state of some UML property
+ * on a UML element.
+ * @author Bob Tarling
+ */
+public class RadioButtonPanel extends JPanel
+ implements PropertyChangeListener {
+
+ /**
+ * The class uid
+ */
+ private static final long serialVersionUID = -3786246432442765208L;
+
+ /**
+ * The UML element this panel represents
+ */
+ private final Object umlElement;
+
+ /**
+ * The UML property this panel represents
+ */
+ private final String propertyName;
+
+ /**
+ * The group of buttons
+ */
+ private final ButtonGroup buttonGroup = new ButtonGroup();
+
+ /**
+ * The getter/setter facade for accessing the model subsystem
+ */
+ private final GetterSetterManager getterSetterManager;
+
+ /**
+ * Constructor for RadioButtonPanel.
+ * @param umlElement the UML element this radio panel represents and is
+ * listening to
+ * @param propertyName the property name of the UML element this radio
+ * panel represents and is listening to
+ * @param horizontal determines the orientation
+ * @param getterSetterManager the manager for getting and setting model
+ * element values
+ */
+ public RadioButtonPanel(
+ final Object umlElement,
+ final String propertyName,
+ final boolean horizontal,
+ final GetterSetterManager getterSetterManager) {
+ super(true);
+ setDoubleBuffered(true);
+
+ final String[] options = getterSetterManager.getOptions(propertyName);
+
+ setLayout(horizontal
+ ? new GridLayout()
+ : new FlexiGridLayout(0, options.length));
+
+ this.propertyName = propertyName;
+ this.getterSetterManager = getterSetterManager;
+ this.umlElement = umlElement;
+
+ final Font font = LookAndFeelMgr.getInstance().getStandardFont();
+ final String label = Translator.localize("label." + propertyName);
+ if (label != null) {
+ TitledBorder border = new TitledBorder(label);
+ border.setTitleFont(font);
+ setBorder(border);
+ }
+
+ Action action = new SetAction(getterSetterManager, umlElement, propertyName);
+
+ buttonGroup.add(new JRadioButton());
+
+ for (String option : options) {
+ final String optionLabel =
+ Translator.localize("label." + propertyName + "-" + option);
+ final JRadioButton button = new JRadioButton(optionLabel);
+ button.addActionListener(action);
+ button.setActionCommand(option);
+ button.setFont(font);
+ button.setName(option);
+ buttonGroup.add(button);
+ add(button);
+ }
+
+ build();
+
+ Model.getPump().addModelEventListener(
+ this, umlElement, propertyName);
+ }
+
+ /**
+ * Remove listeners when this component is removed
+ */
+ public void removeNotify() {
+ Model.getPump().addModelEventListener(
+ this, umlElement, propertyName);
+
+ final Enumeration<AbstractButton> en =
+ buttonGroup.getElements();
+ en.nextElement();
+ while (en.hasMoreElements()) {
+ JRadioButton b = (JRadioButton) en.nextElement();
+ b.removeActionListener(b.getAction());
+ }
+ }
+
+ private GetterSetterManager getGetterSetter() {
+ return getterSetterManager;
+ }
+
+ public void setEnabled(boolean enabled) {
+ for (final Component component : getComponents()) {
+ component.setEnabled(enabled);
+ }
+ }
+
+ /*
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+ */
+ public void propertyChange(PropertyChangeEvent e) {
+ if (e.getPropertyName().equals(propertyName)) {
+ build();
+ }
+ }
+
+ private void build() {
+ final String value =
+ (String) getGetterSetter().get(umlElement, propertyName);
+ final Enumeration<AbstractButton> en =
+ buttonGroup.getElements();
+ if (value == null) {
+ en.nextElement().setSelected(true);
+ return;
+ }
+ while (en.hasMoreElements()) {
+ AbstractButton b = en.nextElement();
+ if (value.equals(b.getActionCommand())) {
+ b.setSelected(true);
+ break;
+ }
+ }
+ }
+
+ /**
+ * This action sets the Visibility of a ModelElement.
+ * Next to a ModelElement, this also works for an
+ * ElementResidence and ElementImport.
+ *
+ * @author [email protected]
+ * @since Jan 4, 2003
+ */
+ private static class SetAction extends UndoableAction {
+
+ private final GetterSetterManager getterSetter;
+ private final String propertyName;
+ private Object modelElement;
+
+ /**
+ * Constructor for ActionSetElementOwnershipSpecification.
+ */
+ protected SetAction(
+ final GetterSetterManager getterSetter,
+ final Object modelElement,
+ final String propertyName) {
+ this.modelElement = modelElement;
+ this.getterSetter = getterSetter;
+ this.propertyName = propertyName;
+ }
+
+ /*
+ * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+ */
+ public void actionPerformed(ActionEvent e) {
+ super.actionPerformed(e);
+ JRadioButton source = (JRadioButton) e.getSource();
+ getterSetter.set(
+ modelElement,
+ source.getActionCommand(),
+ propertyName);
+ }
+ }
+}
Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java?view=diff&pathrev=17693&r1=17692&r2=17693
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java (original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java 2009-12-21 02:56:15-0800
@@ -1,3 +1,16 @@
+/* $Id$
+ *******************************************************************************
+ * Copyright (c) 2009 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:
+ * Bob Tarling - Post GSOC improvements
+ *******************************************************************************
+ */
+
// $Id$
// Copyright (c) 2008 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
@@ -38,13 +51,6 @@
import org.argouml.i18n.Translator;
import org.argouml.model.Model;
import org.argouml.uml.ui.UMLComboBoxNavigator;
-import org.argouml.uml.ui.UMLRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLAssociationEndAggregationRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLAssociationEndChangeabilityRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLModelElementVisibilityRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLOperationConcurrencyRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLParameterDirectionKindRadioButtonPanel;
-import org.argouml.uml.ui.foundation.core.UMLStructuralFeatureChangeabilityRadioButtonPanel;
import org.tigris.swidgets.GridLayout2;
/**
@@ -201,52 +207,16 @@
private void buildOptionBox(JPanel panel, Object target,
PropertyMeta prop) {
- UMLRadioButtonPanel control = null;
-
- if ("visibility".equals(prop.getName())) {
- UMLRadioButtonPanel visibilityPanel =
- new UMLModelElementVisibilityRadioButtonPanel(
- Translator.localize("label.visibility"),
- true);
- visibilityPanel.setTarget(target);
- control = visibilityPanel;
- } else if ("changeability".equals(prop.getName())) {
- UMLRadioButtonPanel cPanel = null;
- if (Model.getFacade().isAAssociationEnd(target)) {
- cPanel =
- new UMLAssociationEndChangeabilityRadioButtonPanel(
- "label.changeability", true);
- } else {
- cPanel =
- new UMLStructuralFeatureChangeabilityRadioButtonPanel(
- Translator.localize("label.changeability"),
- true);
- }
- cPanel.setTarget(target);
- control = cPanel;
+ final String propertyName = prop.getName();
- } else if ("concurrency".equals(prop.getName())) {
- UMLRadioButtonPanel cPanel =
- new UMLOperationConcurrencyRadioButtonPanel(
- Translator.localize("label.concurrency"), true);
- cPanel.setTarget(target);
- control = cPanel;
-
- } else if ("kind".equals(prop.getName())) {
- UMLRadioButtonPanel cPanel =
- new UMLParameterDirectionKindRadioButtonPanel(
- Translator.localize("label.parameter.kind"), true);
- cPanel.setTarget(target);
- control = cPanel;
- } else if ("aggregation".equals(prop.getName())) {
- UMLRadioButtonPanel cPanel =
- new UMLAssociationEndAggregationRadioButtonPanel(
- "label.aggregation", true);
- cPanel.setTarget(target);
- control = cPanel;
- }
-
- if (control != null) {
+ final GetterSetterManager getterSetter = GetterSetterManager.getGetterSetter();
+
+ if (getterSetter.contains(propertyName)) {
+ JPanel control = new RadioButtonPanel(
+ target,
+ propertyName,
+ true,
+ getterSetter);
addControl(panel, null, control);
}
}
@@ -278,7 +248,7 @@
final String propertyName = prop.getName();
- final GetterSetter getterSetter = GetterSetter.getGetterSetter();
+ final GetterSetterManager getterSetter = GetterSetterManager.getGetterSetter();
String label;
if (propertyName.startsWith("is")) {
@@ -288,39 +258,8 @@
}
label = Translator.localize(label);
- CheckBox checkbox = null;
- if ("derived".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isAbstract".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isLeaf".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isRoot".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isActive".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("ownerScope".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("targetScope".equals(propertyName)) {
- // TODO: An alternative property name will need to be inserted for
- // UML 2.x
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isQuery".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isNavigable".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("ordering".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isAsynchronous".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("isSynch".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- } else if ("derived".equals(propertyName)) {
- checkbox = new CheckBox(label, target, propertyName, getterSetter);
- }
-
- if (checkbox != null) {
- panel.add(checkbox);
+ if (getterSetter.contains(propertyName)) {
+ panel.add(new CheckBox(label, target, propertyName, getterSetter));
}
}
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2431940
To unsubscribe from this discussion, e-mail: [[email protected]].