In which package is ModelUtils? p*
On 2/26/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
---- Vishist Mandapaka <[EMAIL PROTECTED]> wrote: > Hi, > Can anyone guide me with examples for Closure, Predicate, and Transformer > objects. I am unable to map it to any real world scenarios where these > objects may be of use. Closure: ======== I have a tree of Attribute objects, and for each one which has one or more attached errors I want to add it to a list. I therefore have a method that walks the tree of objects and for each node in the tree invokes a Closure that is passed in as a parameter: private List findErrors(AttributeGroup model) { final List errors = new ArrayList(10); Closure cb = new Closure() { public void execute(Object input) { Attribute attr = (Attribute) input; List errList = attr.getErrorList(); if ((errList != null) && (errList.size() > 0)) { errors.add(attr); } } }; ModelUtils.forEachAttr(model, cb); return errors; } The tree-walking code (ModelUtils.forEachAttr) can then be reused with Closure objects that do other types of things. Predicate: Given a list of Person objects, return only those whose country attribute has a specific value (filtering). Transformer: Given a list of strings, return a list of JSF SelectItem objects that wrap those strings, allowing the list to be displayed in a drop-down list in a JavaServer Faces view. This same Transformer class can then be used to generate wrappers for a list of colours, a list of countries, etc. Yes a simple method can be written to do this, but with the Transformer approach a Transformer instance can then be passed around as an object without the code needing to know exactly *what* the Transformer will do. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- -.-.-.-.- Paolo Viappiani Artificial Intelligence Laboratory (LIA) EPFL, Ecole Polytechnique Federale Lausanne Bat. INR - Station 14 CH-1015 LAUSANNE tel: +41 21 693.66.79 (lab) tel: +41 21 693.67.11 (office) fax: +41 21 693.52.25 -.-.-.-.-