Author: hlship
Date: Tue Mar 6 16:23:00 2007
New Revision: 515392
URL: http://svn.apache.org/viewvc?view=rev&rev=515392
Log:
TAPESTRY-1292: Allow lists to be used as select models
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryInternalUtils.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryInternalUtils.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryInternalUtils.java?view=diff&rev=515392&r1=515391&r2=515392
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryInternalUtils.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryInternalUtils.java
Tue Mar 6 16:23:00 2007
@@ -240,6 +240,53 @@
}
/**
+ * Converts an object to an [EMAIL PROTECTED] OptionModel}.
+ *
+ * @param input
+ * @return
+ */
+ public static OptionModel toOptionModel(Object input)
+ {
+ String value = (input != null ? String.valueOf(input) : "");
+
+ return new OptionModelImpl(value, false, value);
+ }
+
+ /**
+ * Processes a list input into a series of objects compatible with
+ * [EMAIL PROTECTED] #toOptionModel(Object)}.
+ *
+ * @param input
+ * list of elements
+ * @return list of option models
+ */
+ public static <E> List<OptionModel> toOptionModels(List<E> input)
+ {
+ Defense.notNull(input, "input");
+
+ List<OptionModel> result = newList();
+
+ for (E element : input)
+ result.add(toOptionModel(element));
+
+ return result;
+ }
+
+ /**
+ * Wraps the result of [EMAIL PROTECTED] #toOptionModels(List)} as a
[EMAIL PROTECTED] SelectModel} (with no option
+ * groups).
+ *
+ * @param input
+ * @return
+ */
+ public static <E> SelectModel toSelectModel(List<E> input)
+ {
+ List<OptionModel> options = toOptionModels(input);
+
+ return new SelectModelImpl(null, options);
+ }
+
+ /**
* Parses a key/value pair where the key and the value are seperated by an
equals sign. The key
* and value are trimmed of leading and trailing whitespace, and returned
as a [EMAIL PROTECTED] KeyValue}.
*
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=515392&r1=515391&r2=515392
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
Tue Mar 6 16:23:00 2007
@@ -1252,6 +1252,7 @@
* <li>List to [EMAIL PROTECTED] GridDataSource}
* <li>null to [EMAIL PROTECTED] GridDataSource}
* <li>String to [EMAIL PROTECTED] GridPagerPosition}
+ * <li>List to [EMAIL PROTECTED] SelectModel}
* </ul>
*/
@Contribute("tapestry.ioc.TypeCoercer")
@@ -1296,6 +1297,15 @@
String.class,
GridPagerPosition.class,
new
StringToEnumCoercion<GridPagerPosition>(GridPagerPosition.class));
+
+ add(configuration, List.class, SelectModel.class, new Coercion<List,
SelectModel>()
+ {
+ @SuppressWarnings("unchecked")
+ public SelectModel coerce(List input)
+ {
+ return TapestryInternalUtils.toSelectModel(input);
+ }
+ });
}
private static <S, T> void add(Configuration<CoercionTuple> configuration,
Class<S> sourceType,
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java?view=diff&rev=515392&r1=515391&r2=515392
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java
Tue Mar 6 16:23:00 2007
@@ -16,6 +16,7 @@
import java.io.Closeable;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -207,6 +208,38 @@
assertEquals(options.get(2).getLabel(), "C");
assertEquals(options.get(2).getValue(), "3");
+ }
+
+ @Test
+ public void object_to_option_model()
+ {
+ Object object = new Integer(27);
+ OptionModel model = TapestryInternalUtils.toOptionModel(object);
+
+ assertEquals(model.getLabel(), "27");
+ assertEquals(model.getValue(), "27");
+ }
+
+ @Test
+ public void list_to_option_models()
+ {
+ List<String> list = new ArrayList<String>();
+ list.add("A");
+ list.add(null);
+ list.add("C");
+
+ List<OptionModel> options = TapestryInternalUtils.toOptionModels(list);
+
+ assertEquals(options.size(), 3);
+
+ assertEquals(options.get(0).getLabel(), "A");
+ assertEquals(options.get(0).getValue(), "A");
+
+ assertEquals(options.get(1).getLabel(), "");
+ assertEquals(options.get(1).getValue(), "");
+
+ assertEquals(options.get(2).getLabel(), "C");
+ assertEquals(options.get(2).getValue(), "C");
}
@Test