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();
+
+    }
 }