You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2007/02/20 03:38:48 UTC
svn commit: r509414 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/internal/TapestryUtils.java
main/java/org/apache/tapestry/services/TapestryModule.java
test/java/org/apache/tapestry/internal/TapestryUtilsTest.java
Author: hlship
Date: Mon Feb 19 18:38:47 2007
New Revision: 509414
URL: http://svn.apache.org/viewvc?view=rev&rev=509414
Log:
Add a Map --> SelectModel coercion.
[TAPESTRY-1265]
Modified:
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/services/TapestryModule.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java
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=509414&r1=509413&r2=509414
==============================================================================
--- 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 Mon Feb 19 18:38:47 2007
@@ -185,6 +185,56 @@
}
/**
+ * Converts a map entry to an {@link OptionModel}.
+ *
+ * @param input
+ * @return
+ */
+ public static OptionModel toOptionModel(Map.Entry input)
+ {
+ Defense.notNull(input, "input");
+
+ String value = (input.getKey() != null ? String.valueOf(input.getKey()) : "");
+ String label = (input.getValue() != null ? String.valueOf(input.getValue()) : "");
+
+ return new OptionModelImpl(label, false, value);
+ }
+
+ /**
+ * Processes a map input into a series of map entries compatible with
+ * {@link #toOptionModel(Map.Entry)}.
+ *
+ * @param input
+ * map of elements
+ * @return list of option models
+ */
+ public static <K,V> List<OptionModel> toOptionModels(Map<K,V> input)
+ {
+ Defense.notNull(input, "input");
+
+ List<OptionModel> result = newList();
+
+ for (Map.Entry entry : input.entrySet())
+ result.add(toOptionModel(entry));
+
+ return result;
+ }
+
+ /**
+ * Wraps the result of {@link #toOptionModels(Map)} as a {@link SelectModel} (with no option
+ * groups).
+ *
+ * @param input
+ * @return
+ */
+ public static <K,V> SelectModel toSelectModel(Map<K,V> 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 {@link 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=509414&r1=509413&r2=509414
==============================================================================
--- 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 Mon Feb 19 18:38:47 2007
@@ -1196,6 +1196,7 @@
* Adds coercions:
* <ul>
* <li>String to {@link SelectModel}
+ * <li>Map to {@link SelectModel}
* <li>List to {@link GridDataSource}
* <li>null to {@link GridDataSource}
* <li>String to {@link GridPagerPosition}
@@ -1207,6 +1208,14 @@
add(configuration, String.class, SelectModel.class, new Coercion<String, SelectModel>()
{
public SelectModel coerce(String input)
+ {
+ return TapestryUtils.toSelectModel(input);
+ }
+ });
+
+ add(configuration, Map.class, SelectModel.class, new Coercion<Map, SelectModel>()
+ {
+ public SelectModel coerce(Map input)
{
return TapestryUtils.toSelectModel(input);
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java?view=diff&rev=509414&r1=509413&r2=509414
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java Mon Feb 19 18:38:47 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -17,8 +17,10 @@
import java.io.Closeable;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import org.apache.tapestry.OptionModel;
import org.apache.tapestry.PropertyConduit;
@@ -158,7 +160,7 @@
}
@Test
- public void to_option_models()
+ public void string_to_option_models()
{
List<OptionModel> options = TapestryUtils.toOptionModels("UK,USA,DE=Germany");
@@ -172,6 +174,39 @@
assertEquals(options.get(2).getLabel(), "Germany");
assertEquals(options.get(2).getValue(), "DE");
+ }
+
+ @Test
+ public void map_entry_to_option_model()
+ {
+ Map<String, String> map = Collections.singletonMap("key", "value");
+ Map.Entry entry = map.entrySet().iterator().next();
+ OptionModel model = TapestryUtils.toOptionModel(entry);
+
+ assertEquals(model.getLabel(), "value");
+ assertEquals(model.getValue(), "key");
+ }
+
+ @Test
+ public void map_to_option_models()
+ {
+ Map<Integer, String> map = new TreeMap<Integer, String>();
+ map.put(1, "A");
+ map.put(2, null);
+ map.put(3, "C");
+
+ List<OptionModel> options = TapestryUtils.toOptionModels(map);
+
+ assertEquals(options.size(), 3);
+
+ assertEquals(options.get(0).getLabel(), "A");
+ assertEquals(options.get(0).getValue(), "1");
+
+ assertEquals(options.get(1).getLabel(), "");
+ assertEquals(options.get(1).getValue(), "2");
+
+ assertEquals(options.get(2).getLabel(), "C");
+ assertEquals(options.get(2).getValue(), "3");
}
@Test