Title: [waffle-scm] [737] trunk/examples/freemarker-example/src/main/webapp/people: Updated freemarker example to show how a custom list value converter can be applied to a business model interface.
Revision
737
Author
mauro
Date
2008-06-18 16:33:15 -0500 (Wed, 18 Jun 2008)

Log Message

Updated freemarker example to show how a custom list value converter can be applied to a business model interface.
Updated FTL to use new form macros and functions.

Modified Paths

Added Paths

Diff

Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java (736 => 737)

--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java	2008-06-18 21:31:24 UTC (rev 736)
+++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java	2008-06-18 21:33:15 UTC (rev 737)
@@ -6,10 +6,13 @@
 import java.util.Properties;
 
 import org.codehaus.waffle.ComponentRegistry;
+import org.codehaus.waffle.bind.ValueConverter;
+import org.codehaus.waffle.bind.ValueConverterFinder;
 import org.codehaus.waffle.bind.converters.AbstractValueConverter;
 import org.codehaus.waffle.bind.converters.DateValueConverter;
 import org.codehaus.waffle.example.freemarker.controller.DateProvider;
 import org.codehaus.waffle.example.freemarker.controller.PersonController;
+import org.codehaus.waffle.example.freemarker.converters.PersonListValueConverter;
 import org.codehaus.waffle.example.freemarker.persister.SimplePersonPersister;
 import org.codehaus.waffle.registrar.AbstractRegistrar;
 import org.codehaus.waffle.registrar.Registrar;
@@ -33,6 +36,9 @@
         }
         registerInstance(dateProvider);
         register(SimplePersonPersister.class);
+        register(PersonListValueConverter.class);
+        ValueConverterFinder finder = registry.locateByType(ValueConverterFinder.class);
+        finder.registerConverter((ValueConverter) getRegistered(PersonListValueConverter.class));
     }
 
     @Override

Added: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java (0 => 737)

--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java	                        (rev 0)
+++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java	2008-06-18 21:33:15 UTC (rev 737)
@@ -0,0 +1,47 @@
+package org.codehaus.waffle.example.freemarker.converters;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.codehaus.waffle.bind.ValueConverter;
+import org.codehaus.waffle.example.freemarker.model.Person;
+import org.codehaus.waffle.example.freemarker.persister.PersonPersister;
+
+/**
+ * ValueConverter for person lists as retrieved from persistable id
+ * 
+ * @author Mauro Talevi
+ */
+public class PersonListValueConverter implements ValueConverter {
+
+    private final PersonPersister persister;
+
+    public PersonListValueConverter(PersonPersister persister){
+        this.persister = persister;        
+    }
+    
+    public boolean accept(Type type) {
+        if (type instanceof ParameterizedType) {
+            ParameterizedType parameterizedType = (ParameterizedType) type;
+            Type rawType = parameterizedType.getRawType();
+            Type argumentType = parameterizedType.getActualTypeArguments()[0];
+            return List.class.isAssignableFrom((Class<?>) rawType)
+                    && Person.class.isAssignableFrom((Class<?>) argumentType);
+        }
+        return false;
+    }
+
+    public Object convertValue(String propertyName, String value, Type toType) {
+        String[] values = value.split(",");
+        List<Person> list = new ArrayList<Person>();
+        for (String current : values) {
+            if (current.trim().length() > 0) {
+                list.add(persister.findById(Long.valueOf(current)));
+            }
+        }
+        return list;
+    }
+
+}

Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java (736 => 737)

--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java	2008-06-18 21:31:24 UTC (rev 736)
+++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java	2008-06-18 21:33:15 UTC (rev 737)
@@ -23,6 +23,8 @@
     
     Date getBirthTime();
     
+    List<Person> getFriends();
+    
     List<String> getSkills();
     
     List<Integer> getLevels();

Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java (736 => 737)

--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java	2008-06-18 21:31:24 UTC (rev 736)
+++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java	2008-06-18 21:33:15 UTC (rev 737)
@@ -24,6 +24,7 @@
     private String notes;
     private boolean wizard;
     private Type type;
+    private List<Person> friends;
 
     public PersistablePerson() {
         id = new Long(0);
@@ -33,6 +34,7 @@
         dateOfBirth = new Date();
         birthDay = new Date();
         birthTime = new Date();
+        friends = new ArrayList<Person>();
         skills = new ArrayList<String>();
         levels = new ArrayList<Integer>();
         grades = new ArrayList<Double>();
@@ -49,6 +51,7 @@
         this.dateOfBirth = person.getDateOfBirth();
         this.birthDay = person.getBirthDay();
         this.birthTime = person.getBirthTime();
+        this.friends = person.getFriends();
         this.skills = person.getSkills();
         this.levels = person.getLevels();
         this.grades = person.getGrades();
@@ -113,6 +116,14 @@
         this.birthTime = birthTime;
     }
 
+    public List<Person> getFriends() {
+        return friends;
+    }
+
+    public void setFriends(List<Person> friends) {
+        this.friends = friends;
+    }
+
     public List<String> getSkills() {
         return skills;
     }
@@ -169,5 +180,5 @@
     public String toString() {
         return ToStringBuilder.reflectionToString(this, SHORT_PREFIX_STYLE);
     }
-    
+
 }

Modified: trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl (736 => 737)

--- trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl	2008-06-18 21:31:24 UTC (rev 736)
+++ trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl	2008-06-18 21:33:15 UTC (rev 737)
@@ -50,6 +50,11 @@
             </#if> 
         </p>
         <p class="fieldRow">
+            <label for=""
+            <@w.hidden "person.friends" ""/>
+            <@w.selectMultiple "person.friends" w.asNameables(controller.getPeople(),"id","firstName") w.asValues(person.getFriends(),"id") "size='5'"/>
+        </p>
+        <p class="fieldRow">
             <label for=""
             <@w.hidden "person.skills" ""/>
             <@w.selectMultiple "person.skills" controller.getSkills() person.getSkills() "size='5'"/>
@@ -64,7 +69,7 @@
         </p>
         <p class="fieldRow">
             <label for=""
-            <@w.selectSingle "person.type" controller.getTypes() person.getType()/>
+            <@w.selectSingle "person.type" w.asNameables(controller.getTypes(),"name()","name()") person.getType()/>
         </p>
         <p class="fieldRow">
             <label for="" wizard:</label>


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to