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