You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/02/15 19:12:37 UTC
svn commit: r508060 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/beaneditor/
main/java/org/apache/tapestry/internal/
main/java/org/apache/tapestry/internal/beaneditor/
test/java/org/apache/tapestry/internal/services/
Author: hlship
Date: Thu Feb 15 10:12:36 2007
New Revision: 508060
URL: http://svn.apache.org/viewvc?view=rev&rev=508060
Log:
Extend BeanModel with an alternate form of add() that accepts a property conduit (that can be null for placeholder properties), and a remove() method for getting rid of unwanted properties.
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java?view=diff&rev=508060&r1=508059&r2=508060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanModel.java Thu Feb 15 10:12:36 2007
@@ -16,6 +16,7 @@
import java.util.List;
+import org.apache.tapestry.PropertyConduit;
import org.apache.tapestry.services.BeanModelSource;
/**
@@ -57,4 +58,28 @@
* if the property already exists
*/
PropertyModel add(String propertyName);
+
+ /**
+ * Adds a new property to the model, returning its mutable model for further refinement.
+ *
+ * @param propertyName
+ * name of property to add
+ * @param conduit
+ * the conduit used to read or update the property; this may be null for a synthetic
+ * or placeholder property
+ * @return the model for the property
+ * @throws RuntimeException
+ * if the property already exists
+ */
+ PropertyModel add(String propertyName, PropertyConduit conduit);
+
+ /**
+ * Removes the named properties from the model, if present. It is not considered an error to
+ * remove a property that does not exist.
+ *
+ * @param propertyName
+ * the names of properties to be removed (case insensitive)
+ * @return the model for futher modifications
+ */
+ BeanModel remove(String... propertyName);
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java?view=diff&rev=508060&r1=508059&r2=508060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryUtils.java Thu Feb 15 10:12:36 2007
@@ -206,6 +206,9 @@
public static int defaultOrder(PropertyConduit conduit)
{
+ if (conduit == null)
+ return 0;
+
Order order = conduit.getAnnotation(Order.class);
return order == null ? 0 : order.value();
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java?view=diff&rev=508060&r1=508059&r2=508060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelImpl.java Thu Feb 15 10:12:36 2007
@@ -17,6 +17,7 @@
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -65,8 +66,12 @@
PropertyConduit conduit = createConduit(propertyName);
- PropertyModel propertyModel = new PropertyModelImpl(this, propertyName, conduit,
- _messages);
+ return add(propertyName, conduit);
+ }
+
+ public PropertyModel add(String propertyName, PropertyConduit conduit)
+ {
+ PropertyModel propertyModel = new PropertyModelImpl(this, propertyName, conduit, _messages);
_properties.put(propertyName, propertyModel);
@@ -118,4 +123,12 @@
return result;
}
+
+ public BeanModel remove(String... propertyNames)
+ {
+ _properties.keySet().removeAll(Arrays.asList(propertyNames));
+
+ return this;
+ }
+
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java?view=diff&rev=508060&r1=508059&r2=508060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/PropertyModelImpl.java Thu Feb 15 10:12:36 2007
@@ -55,8 +55,8 @@
// Primitive types need to be converted to wrapper types before checking to see
// if they are sortable.
-
- Class wrapperType = ClassFabUtils.getWrapperType(conduit.getPropertyType());
+
+ Class wrapperType = ClassFabUtils.getWrapperType(getPropertyType());
_sortable = Comparable.class.isAssignableFrom(wrapperType);
}
@@ -68,7 +68,7 @@
public Class getPropertyType()
{
- return _conduit.getPropertyType();
+ return _conduit == null ? Object.class : _conduit.getPropertyType();
}
public PropertyConduit getConduit()
@@ -132,6 +132,7 @@
public PropertyModel sortable(boolean sortable)
{
_sortable = sortable;
+
return this;
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java?view=diff&rev=508060&r1=508059&r2=508060
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BeanModelSourceImplTest.java Thu Feb 15 10:12:36 2007
@@ -353,4 +353,68 @@
verify();
}
+
+ @Test
+ public void add_synthetic_property()
+ {
+ ComponentResources resources = newComponentResources();
+ Messages messages = newMessages();
+
+ train_getMessages(resources, messages);
+ stub_contains(messages, false);
+
+ replay();
+
+ BeanModel model = _source.create(SimpleBean.class, true, resources);
+
+ PropertyModel property = model.add("placeholder", null);
+
+ assertFalse(property.isSortable());
+ assertSame(property.getPropertyType(), Object.class);
+ assertEquals(property.getLabel(), "Placeholder");
+ assertEquals(property.getOrder(), 0);
+
+ verify();
+ }
+
+ @Test
+ public void remove_property()
+ {
+ ComponentResources resources = newComponentResources();
+ Messages messages = newMessages();
+
+ train_getMessages(resources, messages);
+ stub_contains(messages, false);
+
+ replay();
+
+ BeanModel model = _source.create(SimpleBean.class, true, resources);
+
+ assertSame(model.remove("age"), model);
+
+ assertEquals(model.getPropertyNames(), Arrays.asList("firstName", "lastName"));
+
+ verify();
+ }
+
+ @Test
+ public void remove_unknown_property_is_noop()
+ {
+ ComponentResources resources = newComponentResources();
+ Messages messages = newMessages();
+
+ train_getMessages(resources, messages);
+ stub_contains(messages, false);
+
+ replay();
+
+ BeanModel model = _source.create(SimpleBean.class, true, resources);
+
+ assertSame(model.remove("frobozz"), model);
+
+ assertEquals(model.getPropertyNames(), Arrays.asList("firstName", "lastName", "age"));
+
+ verify();
+
+ }
}