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 2008/03/05 19:00:22 UTC

svn commit: r633951 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry/corelib/components/ main/java/org/apache/tapestry/internal/beaneditor/ test/java/org/apache/tapestry/internal/beaneditor/

Author: hlship
Date: Wed Mar  5 10:00:11 2008
New Revision: 633951

URL: http://svn.apache.org/viewvc?rev=633951&view=rev
Log:
TAPESTRY-1983: Add parameter to Grid component that will add additional columns to the BeanModel

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditor.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Grid.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelUtils.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/beaneditor/BeanModelUtilsTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java?rev=633951&r1=633950&r2=633951&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditForm.java Wed Mar  5 10:00:11 2008
@@ -17,6 +17,7 @@
 import org.apache.tapestry.*;
 import org.apache.tapestry.annotations.*;
 import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.internal.beaneditor.BeanModelUtils;
 import org.apache.tapestry.ioc.annotations.Inject;
 import org.apache.tapestry.services.BeanModelSource;
 import org.apache.tapestry.services.ComponentDefaultProvider;
@@ -125,6 +126,8 @@
 
             _model = _beanModelSource.create(beanType, true, _resources.getContainerResources());
         }
+
+        BeanModelUtils.modify(_model, null, _remove, _reorder);
     }
 
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditor.java?rev=633951&r1=633950&r2=633951&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/BeanEditor.java Wed Mar  5 10:00:11 2008
@@ -133,6 +133,8 @@
             _model = _modelSource.create(type, true, _overrides.getContainerResources());
         }
 
+        BeanModelUtils.modify(_model, null, _remove, _reorder);
+
         // The only problem here is that if the bound property is backed by a persistent field, it
         // is assigned (and stored to the session, and propagated around the cluster) first,
         // before values are assigned.
@@ -152,9 +154,6 @@
             }
         }
 
-        if (_remove != null) BeanModelUtils.remove(_model, _remove);
-
-        if (_reorder != null) BeanModelUtils.reorder(_model, _reorder);
     }
 
     // For testing

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Grid.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Grid.java?rev=633951&r1=633950&r2=633951&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Grid.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Grid.java Wed Mar  5 10:00:11 2008
@@ -14,10 +14,7 @@
 
 package org.apache.tapestry.corelib.components;
 
-import org.apache.tapestry.Binding;
-import org.apache.tapestry.Block;
-import org.apache.tapestry.ComponentAction;
-import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.*;
 import org.apache.tapestry.annotations.*;
 import org.apache.tapestry.beaneditor.BeanModel;
 import org.apache.tapestry.beaneditor.PropertyModel;
@@ -101,12 +98,18 @@
     @Parameter
     private GridSortModel _sortModel;
 
+    /**
+     * A comma-seperated list of property names to be added to the {@link org.apache.tapestry.beaneditor.BeanModel}.
+     * Cells for added columns will be blank unless a cell override is provided.
+     */
+    @Parameter(defaultPrefix = TapestryConstants.LITERAL_BINDING_PREFIX)
+    private String _add;
 
     /**
-     * A comma-separated list of property names to be removed from the {@link BeanModel}. The names are
-     * case-insensitive.
+     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry.beaneditor.BeanModel}.
+     * The names are case-insensitive.
      */
-    @Parameter(defaultPrefix = "literal")
+    @Parameter(defaultPrefix = TapestryConstants.LITERAL_BINDING_PREFIX)
     private String _remove;
 
     /**
@@ -114,7 +117,7 @@
      * names are case insensitive. Any properties not indicated in the list will be appended to the end of the display
      * order.
      */
-    @Parameter(defaultPrefix = "literal")
+    @Parameter(defaultPrefix = TapestryConstants.LITERAL_BINDING_PREFIX)
     private String _reorder;
 
     /**
@@ -306,16 +309,14 @@
 
     void setupDataSource()
     {
-        if (_remove != null) BeanModelUtils.remove(_model, _remove);
-
-        if (_reorder != null) BeanModelUtils.reorder(_model, _reorder);
-
         // If there's no rows, display the empty block placeholder.
 
         int availableRows = _source.getAvailableRows();
 
         if (availableRows == 0) return;
 
+        BeanModelUtils.modify(_model, _add, _remove, _reorder);
+        
         int maxPage = ((availableRows - 1) / _rowsPerPage) + 1;
 
         // This captures when the number of rows has decreased, typically due to deletions.

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelUtils.java?rev=633951&r1=633950&r2=633951&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelUtils.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/beaneditor/BeanModelUtils.java Wed Mar  5 10:00:11 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,6 +21,41 @@
  */
 public final class BeanModelUtils
 {
+
+    /**
+     * Performs standard set of modifications to a {@link org.apache.tapestry.beaneditor.BeanModel}. First new
+     * properties may be added, then properties removed, then properties reordered.
+     *
+     * @param model                to modifiy
+     * @param addPropertyNames     comma seperated list of property names to add, or null
+     * @param removePropertyNames  comma seperated list of property names to remove, or null
+     * @param reorderPropertyNames comma seperated list of property names to reorder, or null
+     */
+    public static void modify(BeanModel model, String addPropertyNames, String removePropertyNames,
+                              String reorderPropertyNames)
+    {
+        if (addPropertyNames != null) add(model, addPropertyNames);
+
+        if (removePropertyNames != null) remove(model, removePropertyNames);
+
+        if (reorderPropertyNames != null) reorder(model, reorderPropertyNames);
+    }
+
+    /**
+     * Adds empty properties to the bean model.  New properties are added with a <em>null</em> {@link
+     * org.apache.tapestry.PropertyConduit}.
+     *
+     * @param model         to be modified
+     * @param propertyNames comma-separated list of property names
+     */
+    public static void add(BeanModel model, String propertyNames)
+    {
+        for (String name : split(propertyNames))
+        {
+            model.add(name, null);
+        }
+    }
+
     /**
      * Removes properties from the bean model.
      *

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/beaneditor/BeanModelUtilsTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/beaneditor/BeanModelUtilsTest.java?rev=633951&r1=633950&r2=633951&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/beaneditor/BeanModelUtilsTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/beaneditor/BeanModelUtilsTest.java Wed Mar  5 10:00:11 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
 package org.apache.tapestry.internal.beaneditor;
 
 import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.beaneditor.PropertyModel;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
@@ -30,17 +31,17 @@
     private Object[] build(String propertyNames, String... expected)
     {
         return new Object[]
-                {propertyNames, expected};
+                { propertyNames, expected };
     }
 
     @DataProvider(name = "split_inputs")
     public Object[][] split_inputs()
     {
         return new Object[][]
-                {build("fred", "fred"), build("fred,barney", "fred", "barney"),
-                 build(" fred, barney, wilma, betty ", "fred", "barney", "wilma", "betty"),
-                 new Object[]
-                         {"   ", new String[0]}};
+                { build("fred", "fred"), build("fred,barney", "fred", "barney"),
+                        build(" fred, barney, wilma, betty ", "fred", "barney", "wilma", "betty"),
+                        new Object[]
+                                { "   ", new String[0] } };
     }
 
     @Test
@@ -53,6 +54,8 @@
         replay();
 
         BeanModelUtils.remove(model, "fred,barney");
+
+        verify();
     }
 
     @Test
@@ -65,5 +68,57 @@
         replay();
 
         BeanModelUtils.reorder(model, "fred,barney");
+
+        verify();
+    }
+
+    @Test
+    public void add()
+    {
+        BeanModel model = mockBeanModel();
+        PropertyModel fred = mockPropertyModel();
+        PropertyModel barney = mockPropertyModel();
+
+        expect(model.add("fred", null)).andReturn(fred);
+        expect(model.add("barney", null)).andReturn(barney);
+
+        replay();
+
+        BeanModelUtils.add(model, "fred,barney");
+
+        verify();
+    }
+
+    @Test
+    public void modify_no_work()
+    {
+        BeanModel model = mockBeanModel();
+
+        replay();
+
+        BeanModelUtils.modify(model, null, null, null);
+
+        verify();
+    }
+
+    @Test
+    public void modify_full()
+    {
+        BeanModel model = mockBeanModel();
+        PropertyModel fred = mockPropertyModel();
+        PropertyModel barney = mockPropertyModel();
+
+        expect(model.add("fred", null)).andReturn(fred);
+        expect(model.add("barney", null)).andReturn(barney);
+
+        expect(model.remove("pebbles", "bambam")).andReturn(model);
+
+        expect(model.reorder("wilma", "betty")).andReturn(model);
+
+        replay();
+
+        BeanModelUtils.modify(model, "fred,barney", "pebbles,bambam", "wilma,betty");
+
+        verify();
     }
 }