You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2011/11/11 01:05:30 UTC

svn commit: r1200653 [1/2] - in /turbine/fulcrum/trunk/intake: ./ src/changes/ src/java/org/apache/fulcrum/intake/ src/java/org/apache/fulcrum/intake/model/ src/java/org/apache/fulcrum/intake/transform/ src/java/org/apache/fulcrum/intake/validator/ src...

Author: tv
Date: Fri Nov 11 00:05:28 2011
New Revision: 1200653

URL: http://svn.apache.org/viewvc?rev=1200653&view=rev
Log:
Introduce JDK 1.5 Generics

Added:
    turbine/fulcrum/trunk/intake/src/changes/changes.xml   (contents, props changed)
      - copied, changed from r1169864, turbine/fulcrum/trunk/intake/xdocs/changes.xml
Removed:
    turbine/fulcrum/trunk/intake/xdocs/changes.xml
Modified:
    turbine/fulcrum/trunk/intake/pom.xml
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BigDecimalField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DateStringField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Field.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldFactory.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FileItemField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Group.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/LongField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/StringField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/transform/XmlToAppData.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/CompareCallback.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DefaultValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DoubleValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/FieldReference.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/FileValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/FloatValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/InitableByConstraintMap.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/IntegerRangeValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/IntegerValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/LongValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/NumberValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/ShortValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/StringValidator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/Validator.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/xmlmodel/AppData.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/xmlmodel/XmlField.java
    turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/xmlmodel/XmlGroup.java
    turbine/fulcrum/trunk/intake/src/test/intake1.xml
    turbine/fulcrum/trunk/intake/src/test/org/apache/fulcrum/intake/IntakeTest.java

Modified: turbine/fulcrum/trunk/intake/pom.xml
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/pom.xml?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/pom.xml (original)
+++ turbine/fulcrum/trunk/intake/pom.xml Fri Nov 11 00:05:28 2011
@@ -24,7 +24,7 @@
 
   <modelVersion>4.0.0</modelVersion>
   <artifactId>fulcrum-intake</artifactId>
-  <version>1.0.7-SNAPSHOT</version>
+  <version>1.1.0-SNAPSHOT</version>
   <name>Fulcrum Intake</name>
   <inceptionYear>2005</inceptionYear>
   <description>Fulcrum Intake Service</description>
@@ -102,6 +102,7 @@
       <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
       <version>2.4</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>commons-lang</groupId>
@@ -169,8 +170,10 @@
   </profiles>
   
   <properties>
+    <maven.compile.source>1.5</maven.compile.source>
+    <maven.compile.target>1.5</maven.compile.target>
     <!-- This bits are used for the staging directory -->
-    <fulcrum.release.version>1.0.6</fulcrum.release.version>
+    <fulcrum.release.version>1.1.0</fulcrum.release.version>
     <fulcrum.rc.version>RC1</fulcrum.rc.version>  
     <fulcrum.deployment.protocol>scpexe</fulcrum.deployment.protocol>
   </properties>  

Copied: turbine/fulcrum/trunk/intake/src/changes/changes.xml (from r1169864, turbine/fulcrum/trunk/intake/xdocs/changes.xml)
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/changes/changes.xml?p2=turbine/fulcrum/trunk/intake/src/changes/changes.xml&p1=turbine/fulcrum/trunk/intake/xdocs/changes.xml&r1=1169864&r2=1200653&rev=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/xdocs/changes.xml (original)
+++ turbine/fulcrum/trunk/intake/src/changes/changes.xml Fri Nov 11 00:05:28 2011
@@ -25,7 +25,10 @@
   </properties>
 
   <body>
-     <release version="1.0.7-SNAPSHOT" date="in Subversion">
+     <release version="1.1.0" date="in Subversion">
+      <action type="update" dev="tv">
+        Introduce JDK 1.5 Generics
+      </action>
       <action type="fix" dev="tv">
         Groups were not initialized correctly from a parser.
       </action>

Propchange: turbine/fulcrum/trunk/intake/src/changes/changes.xml
------------------------------------------------------------------------------
    cvs2svn:cvs-rev = 1.9

Propchange: turbine/fulcrum/trunk/intake/src/changes/changes.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: turbine/fulcrum/trunk/intake/src/changes/changes.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/IntakeServiceImpl.java Fri Nov 11 00:05:28 2011
@@ -24,6 +24,7 @@ import java.beans.PropertyDescriptor;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -32,7 +33,6 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -73,32 +73,32 @@ public class IntakeServiceImpl extends A
         Serviceable
 {
     /** Map of groupNames -> appData elements */
-    private Map groupNames;
+    private Map<String, AppData> groupNames;
 
     /** The cache of group names. */
-    private Map groupNameMap;
+    private Map<String, String> groupNameMap;
 
     /** The cache of group keys. */
-    private Map groupKeyMap;
+    private Map<String, String> groupKeyMap;
 
     /** The cache of property getters. */
-    private Map getterMap;
+    private Map<String, Map<String, Method>> getterMap;
 
     /** The cache of property setters. */
-    private Map setterMap;
+    private Map<String, Map<String, Method>> setterMap;
 
     /** AppData -> keyed Pools Map */
-    private Map keyedPools;
+    private Map<AppData, KeyedObjectPool> keyedPools;
 
     /** The Avalon Container root directory */
     private String applicationRoot;
 
     /** List of configured xml specification files */
-    private List xmlPathes = null;
-    
+    private List<String> xmlPathes = null;
+
     /** Configured location of the serialization file */
-    private String serialDataPath = null; 
-    
+    private String serialDataPath = null;
+
     /**
      * Registers a given group name in the system
      *
@@ -140,14 +140,13 @@ public class IntakeServiceImpl extends A
             groupNameMap.put(group.getKey(), groupName);
         }
 
-        List classNames = group.getMapToObjects();
-        for (Iterator iter2 = classNames.iterator(); iter2.hasNext();)
+        List<String> classNames = group.getMapToObjects();
+        for (String className : classNames)
         {
-            String className = (String) iter2.next();
             if (!getterMap.containsKey(className))
             {
-                getterMap.put(className, new HashMap());
-                setterMap.put(className, new HashMap());
+                getterMap.put(className, new HashMap<String, Method>());
+                setterMap.put(className, new HashMap<String, Method>());
             }
         }
         return true;
@@ -163,7 +162,7 @@ public class IntakeServiceImpl extends A
      * @return A map with appData objects loaded from the file or null if the
      *         map could not be loaded.
      */
-    private Map loadSerialized(String serialDataPath, long timeStamp)
+    private Map<AppData, File> loadSerialized(String serialDataPath, long timeStamp)
     {
         getLogger().debug(
                 "Entered loadSerialized(" + serialDataPath + ", " + timeStamp
@@ -189,7 +188,7 @@ public class IntakeServiceImpl extends A
         }
 
         InputStream in = null;
-        Map serialData = null;
+        Map<AppData, File> serialData = null;
 
         try
         {
@@ -199,7 +198,7 @@ public class IntakeServiceImpl extends A
 
             if (o instanceof Map)
             {
-                serialData = (Map) o;
+                serialData = (Map<AppData, File>) o;
             }
             else
             {
@@ -212,7 +211,7 @@ public class IntakeServiceImpl extends A
                                             // around
             }
         }
-        catch (Exception e)
+        catch (IOException e)
         {
             getLogger().error("Serialized File could not be read.", e);
 
@@ -220,6 +219,14 @@ public class IntakeServiceImpl extends A
             // Null out serialData to be sure
             serialData = null;
         }
+        catch (ClassNotFoundException e)
+        {
+            getLogger().error("Objects could not be read from serialized file.", e);
+
+            // This should not happen
+            // Null out serialData to be sure
+            serialData = null;
+        }
         finally
         {
             // Could be null if we opened a file, didn't find it to be a
@@ -231,7 +238,7 @@ public class IntakeServiceImpl extends A
                     in.close();
                 }
             }
-            catch (Exception e)
+            catch (IOException e)
             {
                 getLogger().error("Exception while closing file", e);
             }
@@ -251,7 +258,7 @@ public class IntakeServiceImpl extends A
      * @param appDataElements
      *            A Map containing all of the XML parsed appdata elements
      */
-    private void saveSerialized(String serialDataPath, Map appDataElements)
+    private void saveSerialized(String serialDataPath, Map<AppData, File> appDataElements)
     {
 
         getLogger().debug(
@@ -270,7 +277,7 @@ public class IntakeServiceImpl extends A
             serialData.createNewFile();
             serialData.delete();
         }
-        catch (Exception e)
+        catch (IOException e)
         {
             getLogger().info(
                     "Could not create serialized file " + serialDataPath
@@ -297,12 +304,17 @@ public class IntakeServiceImpl extends A
 
             getLogger().debug("Serializing successful");
         }
-        catch (Exception e)
+        catch (IOException e)
         {
             getLogger().info(
                     "Could not write serialized file to " + serialDataPath
                             + ", not serializing the XML data");
         }
+        catch (ClassNotFoundException e)
+        {
+            getLogger().info(
+                    "Could not re-read serialized file from " + serialDataPath);
+        }
         finally
         {
             try
@@ -311,12 +323,19 @@ public class IntakeServiceImpl extends A
                 {
                     out.close();
                 }
+            }
+            catch (IOException e)
+            {
+                getLogger().error("Exception while closing file", e);
+            }
+            try
+            {
                 if (in != null)
                 {
                     in.close();
                 }
             }
-            catch (Exception e)
+            catch (IOException e)
             {
                 getLogger().error("Exception while closing file", e);
             }
@@ -337,13 +356,14 @@ public class IntakeServiceImpl extends A
     {
         Group group = null;
 
-        AppData appData = (AppData) groupNames.get(groupName);
+        AppData appData = groupNames.get(groupName);
 
         if (groupName == null)
         {
             throw new IntakeException(
                     "Intake IntakeServiceImpl.getGroup(groupName) is null");
         }
+
         if (appData == null)
         {
             throw new IntakeException(
@@ -352,8 +372,7 @@ public class IntakeServiceImpl extends A
         }
         try
         {
-            group = (Group) ((KeyedObjectPool) keyedPools.get(appData))
-                    .borrowObject(groupName);
+            group = (Group) keyedPools.get(appData).borrowObject(groupName);
         }
         catch (Exception e)
         {
@@ -376,7 +395,7 @@ public class IntakeServiceImpl extends A
         if (instance != null)
         {
             String groupName = instance.getIntakeGroupName();
-            AppData appData = (AppData) groupNames.get(groupName);
+            AppData appData = groupNames.get(groupName);
 
             if (appData == null)
             {
@@ -388,8 +407,7 @@ public class IntakeServiceImpl extends A
 
             try
             {
-                ((KeyedObjectPool) keyedPools.get(appData)).returnObject(
-                        groupName, instance);
+                keyedPools.get(appData).returnObject(groupName, instance);
             }
             catch (Exception e)
             {
@@ -409,7 +427,7 @@ public class IntakeServiceImpl extends A
      */
     public int getSize(String groupName) throws IntakeException
     {
-        AppData appData = (AppData) groupNames.get(groupName);
+        AppData appData = groupNames.get(groupName);
         if (appData == null)
         {
             throw new IntakeException(
@@ -417,7 +435,7 @@ public class IntakeServiceImpl extends A
                             + groupName + " found");
         }
 
-        KeyedObjectPool kop = (KeyedObjectPool) keyedPools.get(groupName);
+        KeyedObjectPool kop = keyedPools.get(groupName);
 
         return kop.getNumActive(groupName) + kop.getNumIdle(groupName);
     }
@@ -429,7 +447,7 @@ public class IntakeServiceImpl extends A
      */
     public String[] getGroupNames()
     {
-        return (String[]) groupNames.keySet().toArray(new String[0]);
+        return groupNames.keySet().toArray(new String[0]);
     }
 
     /**
@@ -441,7 +459,7 @@ public class IntakeServiceImpl extends A
      */
     public String getGroupKey(String groupName)
     {
-        return (String) groupKeyMap.get(groupName);
+        return groupKeyMap.get(groupName);
     }
 
     /**
@@ -453,7 +471,7 @@ public class IntakeServiceImpl extends A
      */
     public String getGroupName(String groupKey)
     {
-        return (String) groupNameMap.get(groupKey);
+        return groupNameMap.get(groupKey);
     }
 
     /**
@@ -470,7 +488,7 @@ public class IntakeServiceImpl extends A
     public Method getFieldSetter(String className, String propName)
             throws ClassNotFoundException, IntrospectionException
     {
-        Map settersForClassName = (Map) setterMap.get(className);
+        Map<String, Method> settersForClassName = setterMap.get(className);
 
         if (settersForClassName == null)
         {
@@ -478,7 +496,7 @@ public class IntakeServiceImpl extends A
                     + " available!");
         }
 
-        Method setter = (Method) settersForClassName.get(propName);
+        Method setter = settersForClassName.get(propName);
 
         if (setter == null)
         {
@@ -499,7 +517,7 @@ public class IntakeServiceImpl extends A
             // save it so we do not have to repeat
             synchronized (getterMap)
             {
-                Map gettersForClassName = (Map) getterMap.get(className);
+                Map<String, Method> gettersForClassName = getterMap.get(className);
 
                 if (gettersForClassName != null)
                 {
@@ -528,7 +546,7 @@ public class IntakeServiceImpl extends A
     public Method getFieldGetter(String className, String propName)
             throws ClassNotFoundException, IntrospectionException
     {
-        Map gettersForClassName = (Map) getterMap.get(className);
+        Map<String, Method> gettersForClassName = getterMap.get(className);
 
         if (gettersForClassName == null)
         {
@@ -536,7 +554,7 @@ public class IntakeServiceImpl extends A
                     + " available!");
         }
 
-        Method getter = (Method) gettersForClassName.get(propName);
+        Method getter = gettersForClassName.get(propName);
 
         if (getter == null)
         {
@@ -557,7 +575,7 @@ public class IntakeServiceImpl extends A
             // save it so we do not have to repeat
             synchronized (setterMap)
             {
-                Map settersForClassName = (Map) getterMap.get(className);
+                Map<String, Method> settersForClassName = getterMap.get(className);
 
                 if (settersForClassName != null)
                 {
@@ -580,7 +598,7 @@ public class IntakeServiceImpl extends A
     {
         final Configuration xmlPaths = conf.getChild(XML_PATHS, false);
 
-        xmlPathes = new ArrayList();
+        xmlPathes = new ArrayList<String>();
 
         if (xmlPaths == null)
         {
@@ -619,23 +637,22 @@ public class IntakeServiceImpl extends A
      */
     public void initialize() throws Exception
     {
-        Map appDataElements = null;
+        Map<AppData, File> appDataElements = null;
 
-        groupNames = new HashMap();
-        groupKeyMap = new HashMap();
-        groupNameMap = new HashMap();
-        getterMap = new HashMap();
-        setterMap = new HashMap();
-        keyedPools = new HashMap();
+        groupNames = new HashMap<String, AppData>();
+        groupKeyMap = new HashMap<String, String>();
+        groupNameMap = new HashMap<String, String>();
+        getterMap = new HashMap<String, Map<String,Method>>();
+        setterMap = new HashMap<String, Map<String,Method>>();
+        keyedPools = new HashMap<AppData, KeyedObjectPool>();
 
-        Set xmlFiles = new HashSet();
+        Set<File> xmlFiles = new HashSet<File>();
 
         long timeStamp = 0;
 
-        for (Iterator it = xmlPathes.iterator(); it.hasNext();)
+        for (String xmlPath : xmlPathes)
         {
             // Files are webapp.root relative
-            String xmlPath = (String) it.next();
             File xmlFile = new File(applicationRoot, xmlPath).getAbsoluteFile();
 
             getLogger().debug("Path for XML File: " + xmlFile);
@@ -649,7 +666,7 @@ public class IntakeServiceImpl extends A
                 throw new Exception(READ_ERR);
             }
 
-            xmlFiles.add(xmlFile.toString());
+            xmlFiles.add(xmlFile);
 
             getLogger().debug("Added " + xmlPath + " as File to parse");
 
@@ -660,7 +677,7 @@ public class IntakeServiceImpl extends A
                     .lastModified() : timeStamp;
         }
 
-        Map serializedMap = loadSerialized(serialDataPath, timeStamp);
+        Map<AppData, File> serializedMap = loadSerialized(serialDataPath, timeStamp);
 
         if (serializedMap != null)
         {
@@ -671,38 +688,35 @@ public class IntakeServiceImpl extends A
         else
         {
             // Parse all the given XML files
-            appDataElements = new HashMap();
+            appDataElements = new HashMap<AppData, File>();
 
-            for (Iterator it = xmlFiles.iterator(); it.hasNext();)
+            for (File xmlFile : xmlFiles)
             {
-                String xmlPath = (String) it.next();
                 AppData appData = null;
 
-                getLogger().debug("Now parsing: " + xmlPath);
+                getLogger().debug("Now parsing: " + xmlFile);
 
                 XmlToAppData xmlApp = new XmlToAppData();
                 xmlApp.enableLogging(getLogger());
-                appData = xmlApp.parseFile(xmlPath);
+                appData = xmlApp.parseFile(xmlFile);
 
-                appDataElements.put(appData, xmlPath);
-                getLogger().debug("Saving appData for " + xmlPath);
+                appDataElements.put(appData, xmlFile);
+                getLogger().debug("Saving appData for " + xmlFile);
             }
 
             saveSerialized(serialDataPath, appDataElements);
         }
 
-        for (Iterator it = appDataElements.keySet().iterator(); it.hasNext();)
+        for (AppData appData : appDataElements.keySet())
         {
-            AppData appData = (AppData) it.next();
-
             int maxPooledGroups = 0;
-            List glist = appData.getGroups();
+            List<XmlGroup> glist = appData.getGroups();
 
             String groupPrefix = appData.getGroupPrefix();
 
             for (int i = glist.size() - 1; i >= 0; i--)
             {
-                XmlGroup g = (XmlGroup) glist.get(i);
+                XmlGroup g = glist.get(i);
                 String groupName = g.getName();
 
                 boolean registerUnqualified = registerGroup(groupName, g,

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BigDecimalField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BigDecimalField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BigDecimalField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BigDecimalField.java Fri Nov 11 00:05:28 2011
@@ -34,7 +34,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class BigDecimalField
-        extends Field
+        extends Field<BigDecimal>
 {
     /**
      * Constructor.
@@ -109,7 +109,7 @@ public class BigDecimalField
             {
                 if (values[i] == null)
                 {
-                    values[i] = (BigDecimal) getEmptyValue();
+                    values[i] = getEmptyValue();
                 }
             }
 
@@ -117,7 +117,7 @@ public class BigDecimalField
         }
         else
         {
-            setTestValue(parser.getBigDecimal(getKey(), (BigDecimal)getEmptyValue()));
+            setTestValue(parser.getBigDecimal(getKey(), getEmptyValue()));
         }
     }
 }

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java Fri Nov 11 00:05:28 2011
@@ -29,7 +29,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class BooleanField
-        extends Field
+        extends Field<Boolean>
 {
     /**
      * Constructor.
@@ -125,8 +125,8 @@ public class BooleanField
 
             for (int i = 0; i < inputs.length; i++)
             {
-                values[i] = inputs[i] == null 
-                        ? ((Boolean) getEmptyValue()).booleanValue() 
+                values[i] = inputs[i] == null
+                        ? (getEmptyValue()).booleanValue()
                         : inputs[i].booleanValue();
             }
 
@@ -134,7 +134,7 @@ public class BooleanField
         }
         else
         {
-            setTestValue(parser.getBooleanObject(getKey(), (Boolean)getEmptyValue()));
+            setTestValue(parser.getBooleanObject(getKey(), getEmptyValue()));
         }
     }
 
@@ -149,7 +149,7 @@ public class BooleanField
         boolean result = false;
         try
         {
-            result = ((Boolean) getValue()).booleanValue();
+            result = (getValue()).booleanValue();
         }
         catch (Exception e)
         {

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DateStringField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DateStringField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DateStringField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DateStringField.java Fri Nov 11 00:05:28 2011
@@ -21,11 +21,9 @@ package org.apache.fulcrum.intake.model;
 
 import java.text.DateFormat;
 import java.text.ParseException;
-
 import java.util.Date;
 
 import org.apache.commons.lang.StringUtils;
-
 import org.apache.fulcrum.intake.IntakeException;
 import org.apache.fulcrum.intake.IntakeRuntimeException;
 import org.apache.fulcrum.intake.validator.DateStringValidator;
@@ -43,7 +41,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class DateStringField
-        extends Field
+        extends Field<Date>
 {
     /** date format */
     private DateFormat df = null;
@@ -144,7 +142,7 @@ public class DateStringField
                 try
                 {
                     values[i] = StringUtils.isNotEmpty(inputs[i])
-                            ? getDate(inputs[i]) : (Date) getEmptyValue();
+                            ? getDate(inputs[i]) : getEmptyValue();
                 }
                 catch (ParseException e)
                 {
@@ -158,7 +156,7 @@ public class DateStringField
             String val = parser.getString(getKey());
             try
             {
-                setTestValue(StringUtils.isNotEmpty(val) ? getDate(val) : (Date) getEmptyValue());
+                setTestValue(StringUtils.isNotEmpty(val) ? getDate(val) : getEmptyValue());
             }
             catch (ParseException e)
             {

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java Fri Nov 11 00:05:28 2011
@@ -30,7 +30,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class DoubleField
-        extends Field
+        extends Field<Double>
 {
     /**
      * Constructor.
@@ -127,8 +127,8 @@ public class DoubleField
 
             for (int i = 0; i < inputs.length; i++)
             {
-                values[i] = inputs[i] == null 
-                        ? ((Double) getEmptyValue()).doubleValue() 
+                values[i] = inputs[i] == null
+                        ? (getEmptyValue()).doubleValue()
                         : inputs[i].doubleValue();
             }
 
@@ -136,7 +136,7 @@ public class DoubleField
         }
         else
         {
-            setTestValue(parser.getDoubleObject(getKey(), (Double)getEmptyValue()));
+            setTestValue(parser.getDoubleObject(getKey(), getEmptyValue()));
         }
     }
 

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Field.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Field.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Field.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Field.java Fri Nov 11 00:05:28 2011
@@ -49,7 +49,7 @@ import org.apache.fulcrum.parser.ValuePa
  * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
  * @version $Id$
  */
-public abstract class Field
+public abstract class Field<T>
 {
     /** Empty Value */
     private static final String EMPTY = "";
@@ -71,14 +71,14 @@ public abstract class Field
     /** Key used to identify the field in the parser */
     protected final String key;
 
-    /** Display name of the field to be used on data entry forms... */
-    protected String displayName;
+    /** Display size of the field */
+    protected final String displaySize;
 
     /** Class name of the object to which the field is mapped */
     protected final String mapToObject;
 
     /** Used to validate the contents of the field */
-    protected Validator validator;
+    protected final Validator<T> validator;
 
     /** Getter method in the mapped object used to populate the field */
     protected final Method getter;
@@ -102,16 +102,16 @@ public abstract class Field
      * Value of the field if an error occurs while getting
      * the value from the mapped object
      */
-    protected Object onError;
+    protected T onError;
 
     /** Default value of the field */
-    protected Object defaultValue;
+    protected T defaultValue;
 
-    /** Value of the field to use if the mapped parameter is empty or non-existant */
-    protected Object emptyValue;
+    /** Value of the field to use if the mapped parameter is empty or non-existent */
+    protected T emptyValue;
 
-    /** Display size of the field */
-    private String displaySize;
+    /** Display name of the field to be used on data entry forms... */
+    protected String displayName;
 
     /** Max size of the field */
     private String maxSize;
@@ -139,17 +139,24 @@ public abstract class Field
     /** Mapped object used to set the initial field value */
     protected Retrievable retrievable;
 
+    /** Locale of the field */
     private Locale locale;
+
     /** String value of the field */
     private String stringValue;
-    /** String valuess of the field if isMultiValued=true */
+
+    /** String values of the field if isMultiValued=true */
     private String[] stringValues;
+
     /** Stores the value of the field from the Retrievable object */
-    private Object validValue;
+    private T validValue;
+
     /** Stores the value of the field from the parser */
     private Object testValue;
-    /** Used to pass testValue to the setter mathod through reflection */
-    private Object[] valArray;
+
+    /** Used to pass testValue to the setter method through reflection */
+    private final Object[] valArray;
+
     /** The object containing the field data. */
     protected ValueParser parser;
 
@@ -215,7 +222,7 @@ public abstract class Field
         {
             try
             {
-                validator = (Validator)
+                validator = (Validator<T>)
                         Class.forName(validatorClassName).newInstance();
             }
             catch (InstantiationException e)
@@ -249,16 +256,20 @@ public abstract class Field
                         + "InitableByConstraintMap");
             }
         }
+        else
+        {
+            validator = null;
+        }
 
         // field may have been declared as always required in the xml spec
-        Rule reqRule = (Rule) field.getRuleMap().get("required");
+        Rule reqRule = field.getRuleMap().get("required");
         if (reqRule != null)
         {
             alwaysRequired = Boolean.valueOf(reqRule.getValue()).booleanValue();
             ifRequiredMessage = reqRule.getMessage();
         }
 
-        Rule maxLengthRule = (Rule) field.getRuleMap().get("maxLength");
+        Rule maxLengthRule = field.getRuleMap().get("maxLength");
         if (maxLengthRule != null)
         {
             maxSize = maxLengthRule.getValue();
@@ -314,7 +325,7 @@ public abstract class Field
      * @throws IntakeException this exception is only thrown by subclasses
      * overriding this implementation.
      */
-    public Field init(ValueParser pp)
+    public Field<T> init(ValueParser pp)
             throws IntakeException
     {
         this.parser = pp;
@@ -356,7 +367,7 @@ public abstract class Field
      * @param obj a <code>Retrievable</code> value
      * @return a <code>Field</code> value
      */
-    public Field init(Retrievable obj)
+    public Field<T> init(Retrievable obj)
     {
         if (!initialized)
         {
@@ -403,7 +414,7 @@ public abstract class Field
      * Gets the Validator object for this field.
      * @return a <code>Validator</code> object
      */
-    public Validator getValidator()
+    public Validator<T> getValidator()
     {
         return validator;
     }
@@ -652,7 +663,7 @@ public abstract class Field
             {
                 // set the test value as a String which might be replaced by
                 // the correct type if the input is valid.
-                setTestValue(parser.getString(getKey()));
+                setTestValue(stringValue);
 
                 try
                 {
@@ -671,7 +682,7 @@ public abstract class Field
                 doSetValue();
             }
         }
-        
+
         validated = true;
 
         return validFlag;
@@ -689,21 +700,13 @@ public abstract class Field
      * Set the empty Value. This value is used if Intake
      * maps a field to a parameter returned by the user and
      * the corresponding field is either empty (empty string)
-     * or non-existant.
+     * or non-existent.
      *
      * @param prop The value to use if the field is empty.
      */
     public abstract void setEmptyValue(String prop);
 
     /**
-     * @deprecated Use doSetValue() instead (with no parameters).
-     */
-    protected void doSetValue(ValueParser pp)
-    {
-        doSetValue();
-    }
-
-    /**
      * Sets the value of the field from data in the parser.
      */
     protected abstract void doSetValue();
@@ -714,7 +717,7 @@ public abstract class Field
      *
      * @param obj an <code>Object</code> value
      */
-    void setInitialValue(Object obj)
+    void setInitialValue(T obj)
     {
         validValue = obj;
     }
@@ -729,7 +732,7 @@ public abstract class Field
      * @exception IntakeException indicates the value could not be
      * returned from the mapped object
      */
-    public Object getInitialValue() throws IntakeException
+    public T getInitialValue() throws IntakeException
     {
         if (validValue == null)
         {
@@ -742,6 +745,7 @@ public abstract class Field
                 getDefault();
             }
         }
+
         return validValue;
     }
 
@@ -775,9 +779,9 @@ public abstract class Field
      *
      * @return an <code>Object</code> value
      */
-    public Object getValue()
+    public T getValue()
     {
-        Object val = null;
+        T val = null;
         try
         {
             val = getInitialValue();
@@ -790,13 +794,14 @@ public abstract class Field
 
         if (getTestValue() != null)
         {
-            val = getTestValue();
+            val = (T) getTestValue();
         }
 
         if (val == null)
         {
             val = onError;
         }
+
         return val;
     }
 
@@ -846,7 +851,7 @@ public abstract class Field
     {
         try
         {
-            validValue = getter.invoke(obj, (Object[])null);
+            validValue = (T)getter.invoke(obj);
         }
         catch (IllegalAccessException e)
         {
@@ -868,7 +873,6 @@ public abstract class Field
     /**
      * Loads the default value from the object
      */
-
     public void getDefault()
     {
         validValue = getDefaultValue();
@@ -974,7 +978,7 @@ public abstract class Field
      *
      * @return the default value
      */
-    public Object getDefaultValue()
+    public T getDefaultValue()
     {
         return defaultValue;
     }
@@ -984,7 +988,7 @@ public abstract class Field
      *
      * @return the value to use if the field is empty.
      */
-    public Object getEmptyValue()
+    public T getEmptyValue()
     {
         return emptyValue;
     }

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldFactory.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldFactory.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldFactory.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldFactory.java Fri Nov 11 00:05:28 2011
@@ -37,15 +37,15 @@ import org.apache.fulcrum.intake.xmlmode
  */
 public abstract class FieldFactory
 {
-    private static Map fieldCtors = initFieldCtors();
+    private static Map<String, FieldFactory.FieldCtor> fieldCtors = initFieldCtors();
 
-    private static Map initFieldCtors()
+    private static Map<String, FieldFactory.FieldCtor> initFieldCtors()
     {
-        fieldCtors = new HashMap();
+        fieldCtors = new HashMap<String, FieldFactory.FieldCtor>();
 
         fieldCtors.put("int", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new IntegerField(f, g);
@@ -54,7 +54,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("boolean", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new BooleanField(f, g);
@@ -63,7 +63,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("String", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new StringField(f, g);
@@ -72,7 +72,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("BigDecimal", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new BigDecimalField(f, g);
@@ -81,7 +81,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("FileItem", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new FileItemField(f, g);
@@ -90,7 +90,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("DateString", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new DateStringField(f, g);
@@ -99,7 +99,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("float", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new FloatField(f, g);
@@ -108,7 +108,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("double", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new DoubleField(f, g);
@@ -117,7 +117,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("short", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new ShortField(f, g);
@@ -126,7 +126,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("long", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 return new LongField(f, g);
@@ -135,7 +135,7 @@ public abstract class FieldFactory
         );
         fieldCtors.put("custom", new FieldFactory.FieldCtor()
         {
-            public Field getInstance(XmlField f, Group g)
+            public Field<?> getInstance(XmlField f, Group g)
                     throws IntakeException
             {
                 String fieldClass = f.getFieldClass();
@@ -148,15 +148,15 @@ public abstract class FieldFactory
 
                 if (fieldClass != null)
                 {
-                    Class field;
+                    Class<?> field;
 
                     try
                     {
                         field = Class.forName(fieldClass);
-                        Constructor constructor =
-                            field.getConstructor(new Class[] { XmlField.class, Group.class });
+                        Constructor<?> constructor =
+                            field.getConstructor(XmlField.class, Group.class);
 
-                        return (Field)constructor.newInstance(new Object[] { f, g });
+                        return (Field<?>)constructor.newInstance(f, g);
                     }
                     catch (ClassNotFoundException e)
                     {
@@ -182,12 +182,9 @@ public abstract class FieldFactory
         return fieldCtors;
     }
 
-    protected static abstract class FieldCtor
+    protected interface FieldCtor
     {
-        public Field getInstance(XmlField f, Group g) throws IntakeException
-        {
-            return null;
-        }
+        public Field<?> getInstance(XmlField f, Group g) throws IntakeException;
     }
 
     /**
@@ -198,14 +195,14 @@ public abstract class FieldFactory
      * @return a <code>Field</code> value
      * @throws IntakeException indicates that an unknown type was specified for a field.
      */
-    public static final Field getInstance(XmlField xmlField, Group xmlGroup)
+    public static final Field<?> getInstance(XmlField xmlField, Group xmlGroup)
             throws IntakeException
     {
         FieldCtor fieldCtor = null;
-        Field field = null;
+        Field<?> field = null;
         String type = xmlField.getType();
 
-        fieldCtor = (FieldCtor) fieldCtors.get(type);
+        fieldCtor = fieldCtors.get(type);
         if (fieldCtor == null)
         {
             throw new IntakeException("An Unsupported type has been specified for " +

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FileItemField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FileItemField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FileItemField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FileItemField.java Fri Nov 11 00:05:28 2011
@@ -35,7 +35,7 @@ import org.apache.fulcrum.parser.ValuePa
  * @version $Id$
  */
 public class FileItemField
-        extends Field
+        extends Field<FileItem>
 {
 
     /**
@@ -111,14 +111,12 @@ public class FileItemField
      * @return a <code>Field</code> value
      * @exception IntakeException if an error occurs
      */
-    public Field init(ValueParser vp)
+    public Field<FileItem> init(ValueParser vp)
             throws IntakeException
     {
-        try
-        {
-            super.parser = (ParameterParser) vp;
-        }
-        catch (ClassCastException e)
+        super.parser = vp;
+
+        if (!(vp instanceof ParameterParser))
         {
             throw new IntakeException(
                     "FileItemFields can only be used with ParameterParser");

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java Fri Nov 11 00:05:28 2011
@@ -30,7 +30,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class FloatField
-        extends Field
+        extends Field<Float>
 {
     /**
      * Constructor.
@@ -66,7 +66,7 @@ public class FloatField
      * Set the empty Value. This value is used if Intake
      * maps a field to a parameter returned by the user and
      * the corresponding field is either empty (empty string)
-     * or non-existant.
+     * or non-existent.
      *
      * @param prop The value to use if the field is empty.
      */
@@ -79,7 +79,7 @@ public class FloatField
             return;
         }
 
-        emptyValue = new Double(prop);
+        emptyValue = new Float(prop);
     }
 
     /**
@@ -127,8 +127,8 @@ public class FloatField
 
             for (int i = 0; i < inputs.length; i++)
             {
-                values[i] = inputs[i] == null 
-                        ? ((Float) getEmptyValue()).floatValue() 
+                values[i] = inputs[i] == null
+                        ? (getEmptyValue()).floatValue()
                         : inputs[i].floatValue();
             }
 
@@ -136,7 +136,7 @@ public class FloatField
         }
         else
         {
-            setTestValue(parser.getFloatObject(getKey(), (Float)getEmptyValue()));
+            setTestValue(parser.getFloatObject(getKey(), getEmptyValue()));
         }
     }
 

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Group.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Group.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Group.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/Group.java Fri Nov 11 00:05:28 2011
@@ -21,7 +21,6 @@ package org.apache.fulcrum.intake.model;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -81,17 +80,17 @@ public class Group
     /**
      * A map of the fields in this group mapped by field name.
      */
-    protected Map fields;
+    protected Map<String, Field<?>> fields;
 
     /**
      * Map of the fields by mapToObject
      */
-    protected Map mapToObjectFields;
+    protected Map<String, Field<?>[]> mapToObjectFields;
 
     /**
      * An array of fields in this group.
      */
-    protected Field[] fieldsArray;
+    protected Field<?>[] fieldsArray;
 
     /**
      * The object id used to associate this group to a bean
@@ -123,35 +122,38 @@ public class Group
         name = group.getName();
         poolCapacity = Integer.parseInt(group.getPoolCapacity());
 
-        List inputFields = group.getFields();
+        List<XmlField> inputFields = group.getFields();
         int size = inputFields.size();
-        fields = new HashMap((int) (1.25 * size + 1));
-        mapToObjectFields = new HashMap((int) (1.25 * size + 1));
+        fields = new HashMap<String, Field<?>>((int) (1.25 * size + 1));
+        Map<String, List<Field<?>>> mapToObjectFieldLists =
+            new HashMap<String, List<Field<?>>>((int) (1.25 * size + 1));
+
         fieldsArray = new Field[size];
         for (int i = size - 1; i >= 0; i--)
         {
-            XmlField f = (XmlField) inputFields.get(i);
-            Field field = FieldFactory.getInstance(f, this);
+            XmlField f = inputFields.get(i);
+            Field<?> field = FieldFactory.getInstance(f, this);
             fieldsArray[i] = field;
             fields.put(f.getName(), field);
 
             // map fields by their mapToObject
-            List tmpFields = (List) mapToObjectFields.get(f.getMapToObject());
+            List<Field<?>> tmpFields = mapToObjectFieldLists.get(f.getMapToObject());
             if (tmpFields == null)
             {
-                tmpFields = new ArrayList(size);
-                mapToObjectFields.put(f.getMapToObject(), tmpFields);
+                tmpFields = new ArrayList<Field<?>>(size);
+                mapToObjectFieldLists.put(f.getMapToObject(), tmpFields);
             }
+
             tmpFields.add(field);
         }
 
         // Change the mapToObjectFields values to Field[]
-        for (Iterator keys = mapToObjectFields.keySet().iterator(); keys.hasNext();)
+        mapToObjectFields = new HashMap<String, Field<?>[]>((int) (1.25 * size + 1));
+
+        for (Map.Entry<String, List<Field<?>>> entry : mapToObjectFieldLists.entrySet())
         {
-            Object key = keys.next();
-            List tmpFields = (List) mapToObjectFields.get(key);
-            mapToObjectFields.put(key,
-                    tmpFields.toArray(new Field[tmpFields.size()]));
+            mapToObjectFields.put(entry.getKey(),
+                entry.getValue().toArray(new Field[entry.getValue().size()]));
         }
     }
 
@@ -201,10 +203,10 @@ public class Group
     {
         this.oid = obj.getQueryKey();
 
-        Class cls = obj.getClass();
+        Class<?> cls = obj.getClass();
         while (cls != null)
         {
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
+            Field<?>[] flds = mapToObjectFields.get(cls.getName());
             if (flds != null)
             {
                 for (int i = flds.length - 1; i >= 0; i--)
@@ -214,11 +216,11 @@ public class Group
             }
 
             // Also check any interfaces
-            Class[] interfaces = cls.getInterfaces();
+            Class<?>[] interfaces = cls.getInterfaces();
             for (int idx = 0; idx < interfaces.length; idx++)
             {
-                Field[] interfaceFields =
-                    (Field[]) mapToObjectFields.get(interfaces[idx].getName());
+                Field<?>[] interfaceFields =
+                    mapToObjectFields.get(interfaces[idx].getName());
                 if (interfaceFields != null)
                 {
                     for (int i = 0; i < interfaceFields.length; i++)
@@ -309,13 +311,13 @@ public class Group
      * @return an <code>ArrayList</code> value
      * @exception IntakeException if an error occurs
      */
-    public ArrayList getObjects(ValueParser pp) throws IntakeException
+    public List<Group> getObjects(ValueParser pp) throws IntakeException
     {
-        ArrayList objs = null;
+        ArrayList<Group> objs = null;
         String[] oids = pp.getStrings(gid);
         if (oids != null)
         {
-            objs = new ArrayList(oids.length);
+            objs = new ArrayList<Group>(oids.length);
             for (int i = oids.length - 1; i >= 0; i--)
             {
                 objs.add(IntakeServiceFacade.getGroup(name).init(oids[i], pp));
@@ -329,12 +331,12 @@ public class Group
      * @return Field.
      * @throws IntakeException indicates the field could not be found.
      */
-    public Field get(String fieldName)
+    public Field<?> get(String fieldName)
             throws IntakeException
     {
         if (fields.containsKey(fieldName))
         {
-            return (Field) fields.get(fieldName);
+            return fields.get(fieldName);
         }
         else
         {
@@ -373,7 +375,7 @@ public class Group
      */
     public void setProperties(Object obj) throws IntakeException
     {
-        Class cls = obj.getClass();
+        Class<?> cls = obj.getClass();
 
         while (cls != null)
         {
@@ -382,7 +384,7 @@ public class Group
                 log.debug("setProperties(" + cls.getName() + ")");
             }
 
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
+            Field<?>[] flds = mapToObjectFields.get(cls.getName());
             if (flds != null)
             {
                 for (int i = flds.length - 1; i >= 0; i--)
@@ -392,11 +394,11 @@ public class Group
             }
 
             // Also check any interfaces
-            Class[] interfaces = cls.getInterfaces();
+            Class<?>[] interfaces = cls.getInterfaces();
             for (int idx = 0; idx < interfaces.length; idx++)
             {
-                Field[] interfaceFields =
-                    (Field[]) mapToObjectFields.get(interfaces[idx].getName());
+                Field<?>[] interfaceFields =
+                    mapToObjectFields.get(interfaces[idx].getName());
                 if (interfaceFields != null)
                 {
                     for (int i = 0; i < interfaceFields.length; i++)
@@ -421,10 +423,10 @@ public class Group
      */
     public void setValidProperties(Object obj)
     {
-        Class cls = obj.getClass();
+        Class<?> cls = obj.getClass();
         while (cls != null)
         {
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
+            Field<?>[] flds = mapToObjectFields.get(cls.getName());
             if (flds != null)
             {
                 for (int i = flds.length - 1; i >= 0; i--)
@@ -441,11 +443,11 @@ public class Group
             }
 
             // Also check any interfaces
-            Class[] interfaces = cls.getInterfaces();
+            Class<?>[] interfaces = cls.getInterfaces();
             for (int idx = 0; idx < interfaces.length; idx++)
             {
-                Field[] interfaceFields =
-                    (Field[]) mapToObjectFields.get(interfaces[idx].getName());
+                Field<?>[] interfaceFields =
+                    mapToObjectFields.get(interfaces[idx].getName());
                 if (interfaceFields != null)
                 {
                     for (int i = 0; i < interfaceFields.length; i++)
@@ -478,10 +480,11 @@ public class Group
      */
     public void getProperties(Object obj) throws IntakeException
     {
-        Class cls = obj.getClass();
+        Class<?> cls = obj.getClass();
+
         while (cls != null)
         {
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
+            Field<?>[] flds = mapToObjectFields.get(cls.getName());
             if (flds != null)
             {
                 for (int i = flds.length - 1; i >= 0; i--)
@@ -491,11 +494,11 @@ public class Group
             }
 
             // Also check any interfaces
-            Class[] interfaces = cls.getInterfaces();
+            Class<?>[] interfaces = cls.getInterfaces();
             for (int idx = 0; idx < interfaces.length; idx++)
             {
-                Field[] interfaceFields =
-                    (Field[]) mapToObjectFields.get(interfaces[idx].getName());
+                Field<?>[] interfaceFields =
+                    mapToObjectFields.get(interfaces[idx].getName());
                 if (interfaceFields != null)
                 {
                     for (int i = 0; i < interfaceFields.length; i++)

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java Fri Nov 11 00:05:28 2011
@@ -29,7 +29,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class IntegerField
-        extends Field
+        extends Field<Integer>
 {
     /**
      * Constructor.
@@ -126,8 +126,8 @@ public class IntegerField
 
             for (int i = 0; i < inputs.length; i++)
             {
-                values[i] = inputs[i] == null 
-                        ? ((Integer) getEmptyValue()).intValue() 
+                values[i] = inputs[i] == null
+                        ? (getEmptyValue()).intValue()
                         : inputs[i].intValue();
             }
 
@@ -135,7 +135,7 @@ public class IntegerField
         }
         else
         {
-            setTestValue(parser.getIntObject(getKey(), (Integer)getEmptyValue()));
+            setTestValue(parser.getIntObject(getKey(), getEmptyValue()));
         }
     }
 

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/LongField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/LongField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/LongField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/LongField.java Fri Nov 11 00:05:28 2011
@@ -29,7 +29,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class LongField
-        extends Field
+        extends Field<Long>
 {
 
     /**
@@ -126,8 +126,8 @@ public class LongField
 
             for (int i = 0; i < inputs.length; i++)
             {
-                values[i] = inputs[i] == null 
-                        ? ((Long) getEmptyValue()).longValue() 
+                values[i] = inputs[i] == null
+                        ? (getEmptyValue()).longValue()
                         : inputs[i].longValue();
             }
 
@@ -135,7 +135,7 @@ public class LongField
         }
         else
         {
-            setTestValue(parser.getLongObject(getKey(), (Long)getEmptyValue()));
+            setTestValue(parser.getLongObject(getKey(), getEmptyValue()));
         }
     }
 }

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java Fri Nov 11 00:05:28 2011
@@ -29,7 +29,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class ShortField
-        extends Field
+        extends Field<Short>
 {
     /**
      * Constructor.
@@ -126,8 +126,8 @@ public class ShortField
 
             for (int i = 0; i < inputs.length; i++)
             {
-                values[i] = inputs[i] == null 
-                        ? ((Short) getEmptyValue()).shortValue() 
+                values[i] = inputs[i] == null
+                        ? (getEmptyValue()).shortValue()
                         : inputs[i].shortValue();
             }
 
@@ -136,7 +136,7 @@ public class ShortField
         else
         {
             Integer value = parser.getIntObject(getKey());
-            
+
             if (value == null)
             {
                 setTestValue(getEmptyValue());

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/StringField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/StringField.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/StringField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/StringField.java Fri Nov 11 00:05:28 2011
@@ -20,7 +20,6 @@ package org.apache.fulcrum.intake.model;
  */
 
 import org.apache.commons.lang.StringUtils;
-
 import org.apache.fulcrum.intake.IntakeException;
 import org.apache.fulcrum.intake.validator.StringValidator;
 import org.apache.fulcrum.intake.xmlmodel.XmlField;
@@ -34,7 +33,7 @@ import org.apache.fulcrum.intake.xmlmode
  * @version $Id$
  */
 public class StringField
-        extends Field
+        extends Field<String>
 {
 
     /**
@@ -144,7 +143,7 @@ public class StringField
             }
             else
             {
-                if (!setFlag || StringUtils.isEmpty((String) getTestValue()))
+                if (!setFlag || StringUtils.isEmpty((String)getTestValue()))
                 {
                     validFlag = false;
                     this.message = message;

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/transform/XmlToAppData.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/transform/XmlToAppData.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/transform/XmlToAppData.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/transform/XmlToAppData.java Fri Nov 11 00:05:28 2011
@@ -20,6 +20,7 @@ package org.apache.fulcrum.intake.transf
  */
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 
@@ -55,7 +56,7 @@ public class XmlToAppData extends Defaul
     /** Logging */
     private Logger log;
 
-    private AppData app;
+    private final AppData app;
     private XmlGroup currGroup;
     private XmlField currField;
     private Rule currRule;
@@ -88,16 +89,16 @@ public class XmlToAppData extends Defaul
      * @throws SAXException
      * @throws IOException
      */
-    public AppData parseFile(String xmlFile)
+    public AppData parseFile(File xmlFile)
             throws ParserConfigurationException, SAXException, IOException
     {
         SAXParser parser = saxFactory.newSAXParser();
 
         FileReader fr = new FileReader(xmlFile);
         BufferedReader br = new BufferedReader(fr);
-        
+
         chars = new StringBuffer();
-        
+
         try
         {
             InputSource is = new InputSource(br);
@@ -113,13 +114,13 @@ public class XmlToAppData extends Defaul
 
     /**
      * Provide an Avalon logger
-     * 
+     *
      * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(org.apache.avalon.framework.logger.Logger)
      */
     public void enableLogging(Logger logger)
     {
         this.log = logger.getChildLogger("XmlToAppData");
-        
+
     }
 
     /**
@@ -159,7 +160,7 @@ public class XmlToAppData extends Defaul
 
     /**
      * Handles closing elements of the xml file.
-     * 
+     *
      * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
      */
     public void endElement(String uri, String localName, String name) throws SAXException
@@ -175,7 +176,7 @@ public class XmlToAppData extends Defaul
                     "'required' rule instead.");
             currField.setIfRequiredMessage(chars.toString());
         }
-        
+
         chars = new StringBuffer();
     }
 

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BigDecimalValidator.java Fri Nov 11 00:05:28 2011
@@ -25,8 +25,6 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.fulcrum.intake.model.Field;
 
 /**
  * Validates BigDecimals with the following constraints in addition to those
@@ -49,22 +47,18 @@ import org.apache.fulcrum.intake.model.F
  * @version $Id$
  */
 public class BigDecimalValidator
-        extends NumberValidator
+        extends NumberValidator<BigDecimal>
 {
-    private BigDecimal minValue = null;
-    private BigDecimal maxValue = null;
-
     /**
-     * Constructor to use when initialising Object
+     * Constructor to use when initializing Object
      *
      * @param paramMap
      * @throws InvalidMaskException
      */
-    public BigDecimalValidator(Map paramMap)
+    public BigDecimalValidator(Map<String, Constraint> paramMap)
             throws InvalidMaskException
     {
-        this();
-        init(paramMap);
+        super(paramMap);
     }
 
     /**
@@ -72,149 +66,19 @@ public class BigDecimalValidator
      */
     public BigDecimalValidator()
     {
+        super();
         invalidNumberMessage = "Entry was not a valid BigDecimal";
     }
 
     /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = new BigDecimal(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = new BigDecimal(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a field meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param field a <code>Field</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(Field field)
-            throws ValidationException
-    {
-        Locale locale = field.getLocale();
-
-        if (field.isMultiValued())
-        {
-            String[] stringValues = (String[])field.getTestValue();
-
-            for (int i = 0; i < stringValues.length; i++)
-            {
-                assertValidity(stringValues[i], locale);
-            }
-        }
-        else
-        {
-            assertValidity((String)field.getTestValue(), locale);
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @param locale the Locale of the associated field
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue, Locale locale)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            BigDecimal bd = null;
-            NumberFormat nf = NumberFormat.getInstance(locale);
-            try
-            {
-                Number number = nf.parse(testValue);
-                bd = new BigDecimal(number.doubleValue());
-            }
-            catch (ParseException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-
-            if (minValue != null && bd.compareTo(minValue) < 0)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (maxValue != null && bd.compareTo(maxValue) > 0)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public BigDecimal getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param minValue  Value to assign to minValue.
-     */
-    public void setMinValue(BigDecimal minValue)
-    {
-        this.minValue = minValue;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
+     * @see org.apache.fulcrum.intake.validator.NumberValidator#parseNumber(java.lang.String, java.util.Locale)
      */
-    public BigDecimal getMaxValue()
+    @Override
+    protected BigDecimal parseNumber(String stringValue, Locale locale) throws ParseException
     {
-        return maxValue;
-    }
+        NumberFormat nf = NumberFormat.getInstance(locale);
 
-    /**
-     * Set the value of maxValue.
-     *
-     * @param maxValue  Value to assign to maxValue.
-     */
-    public void setMaxValue(BigDecimal maxValue)
-    {
-        this.maxValue = maxValue;
+        Number number = nf.parse(stringValue);
+        return new BigDecimal(number.doubleValue());
     }
 }

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/BooleanValidator.java Fri Nov 11 00:05:28 2011
@@ -20,7 +20,6 @@ package org.apache.fulcrum.intake.valida
  */
 
 import java.text.ParseException;
-
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
@@ -28,9 +27,9 @@ import org.apache.commons.lang.StringUti
 /**
  * Validator for boolean field types.<br><br>
  *
- * Values are validated by attemting to match the value to
+ * Values are validated by attempting to match the value to
  * a list of strings for true and false values.  The string
- * values are compared without reguard to case.<br>
+ * values are compared without regard to case.<br>
  *
  * Valid values for Boolean.TRUE:
  * <ul>
@@ -57,7 +56,7 @@ import org.apache.commons.lang.StringUti
  * @version $Id$
  */
 public class BooleanValidator
-        extends DefaultValidator
+        extends DefaultValidator<Boolean>
 {
     /** String values which would evaluate to Boolean.TRUE */
     private static String[] trueValues = {"TRUE","T","YES","Y","1","ON"};
@@ -70,6 +69,7 @@ public class BooleanValidator
      */
     public BooleanValidator()
     {
+        super();
     }
 
     /**
@@ -78,7 +78,7 @@ public class BooleanValidator
      * @param paramMap
      * @throws InvalidMaskException
      */
-    public BooleanValidator(Map paramMap)
+    public BooleanValidator(Map<String, Constraint> paramMap)
             throws InvalidMaskException
     {
         super(paramMap);

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/CompareCallback.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/CompareCallback.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/CompareCallback.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/CompareCallback.java Fri Nov 11 00:05:28 2011
@@ -25,17 +25,16 @@ package org.apache.fulcrum.intake.valida
  * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
  * @version $Id: DateStringValidator.java 534527 2007-05-02 16:10:59Z tv $
  */
-public interface CompareCallback
+public interface CompareCallback<T>
 {
     /**
      * Compare the given values using the compare operation provided
-     * 
+     *
      * @param compare type of compare operation
      * @param thisValue value of this field
      * @param refValue value of the reference field
-     * 
+     *
      * @return the result of the comparison
      */
-    public boolean compareValues(int compare, Object thisValue, Object refValue)
-        throws ClassCastException;
+    public boolean compareValues(int compare, T thisValue, T refValue);
 }

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateRangeValidator.java Fri Nov 11 00:05:28 2011
@@ -22,7 +22,6 @@ package org.apache.fulcrum.intake.valida
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -67,15 +66,15 @@ public class DateRangeValidator
         extends DateStringValidator
 {
     /** List of FieldReferences for multiple comparisons */
-    List fieldReferences; 
+    List<FieldReference> fieldReferences;
 
     /** Callback for the actual compare operation */
-    CompareCallback compareCallback; 
+    CompareCallback<Date> compareCallback;
 
-    public DateRangeValidator(final Map paramMap)
+    public DateRangeValidator(Map<String, Constraint> paramMap)
             throws IntakeException
     {
-        init(paramMap);
+        super(paramMap);
     }
 
     /**
@@ -92,63 +91,58 @@ public class DateRangeValidator
      * @param paramMap
      * @throws InvalidMaskException
      */
-    public void init(final Map paramMap)
+    public void init(Map<String, ? extends Constraint> paramMap)
             throws InvalidMaskException
     {
         super.init(paramMap);
-        
-        compareCallback = new CompareCallback()
+
+        compareCallback = new CompareCallback<Date>()
             {
                 /**
                  * Compare the given values using the compare operation provided
-                 * 
+                 *
                  * @param compare type of compare operation
                  * @param thisValue value of this field
                  * @param refValue value of the reference field
-                 * 
+                 *
                  * @return the result of the comparison
                  */
-                public boolean compareValues(int compare, Object thisValue, Object refValue)
-                    throws ClassCastException
+                public boolean compareValues(int compare, Date thisValue, Date refValue)
                 {
                     boolean result = true;
-                    
-                    Date thisDate = (Date)thisValue;
-                    Date otherDate = (Date)refValue;
-                    
+
                     switch (compare)
                     {
                         case FieldReference.COMPARE_LT:
-                            result = thisDate.before(otherDate);
+                            result = thisValue.before(refValue);
                             break;
-                            
+
                         case FieldReference.COMPARE_LTE:
-                            result = !thisDate.after(otherDate);
+                            result = !thisValue.after(refValue);
                             break;
-                            
+
                         case FieldReference.COMPARE_GT:
-                            result = thisDate.after(otherDate);
+                            result = thisValue.after(refValue);
                             break;
-                            
+
                         case FieldReference.COMPARE_GTE:
-                            result = !thisDate.before(otherDate);
+                            result = !thisValue.before(refValue);
                             break;
                     }
-                    
+
                     return result;
                 }
             };
-        
-        fieldReferences = new ArrayList(10);
 
-        for (Iterator i = paramMap.entrySet().iterator(); i.hasNext();)
+        fieldReferences = new ArrayList<FieldReference>(10);
+
+        for (Map.Entry<String, ? extends Constraint> entry : paramMap.entrySet())
         {
-            Map.Entry entry = (Map.Entry)i.next();
-            String key = (String)entry.getKey();
-            Constraint constraint = (Constraint)entry.getValue();
+            String key = entry.getKey();
+            Constraint constraint = entry.getValue();
 
             int compare = FieldReference.getCompareType(key);
-            
+
             if (compare != 0)
             {
                 // found matching constraint
@@ -156,17 +150,17 @@ public class DateRangeValidator
                 fieldref.setCompare(compare);
                 fieldref.setFieldName(constraint.getValue());
                 fieldref.setMessage(constraint.getMessage());
-                
+
                 fieldReferences.add(fieldref);
             }
         }
-        
+
         if (fieldReferences.isEmpty())
         {
             log.warn("No reference field rules have been found.");
         }
     }
-    
+
     /**
      * Determine whether a testValue meets the criteria specified
      * in the constraints defined for this validator
@@ -175,11 +169,11 @@ public class DateRangeValidator
      * @exception ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
-    public void assertValidity(final Field testField)
+    public void assertValidity(Field<Date> testField)
         throws ValidationException
     {
         super.assertValidity(testField);
-        
+
         Group thisGroup = testField.getGroup();
 
         if (testField.isMultiValued())
@@ -194,7 +188,7 @@ public class DateRangeValidator
         else
         {
             String testValue = (String)testField.getTestValue();
-        
+
             assertValidity(testValue, thisGroup);
         }
     }
@@ -205,7 +199,7 @@ public class DateRangeValidator
      *
      * @param testValue a <code>String</code> to be tested
      * @param group the group this field belongs to
-     * 
+     *
      * @exception ValidationException containing an error message if the
      * testValue did not pass the validation tests.
      */
@@ -215,22 +209,22 @@ public class DateRangeValidator
         if (required || StringUtils.isNotEmpty(testValue))
         {
             Date testDate = null;
-            
+
             try
             {
                 testDate = parse(testValue);
             }
             catch (ParseException e)
             {
-                // This should not happen because we succeded with this before, 
+                // This should not happen because we succeeded with this before,
                 // but we need to catch the exception anyway
                 errorMessage = getDateFormatMessage();
                 throw new ValidationException(errorMessage);
             }
-            
+
             try
             {
-                FieldReference.checkReferences(fieldReferences, compareCallback, 
+                FieldReference.checkReferences(fieldReferences, compareCallback,
                         testDate, group);
             }
             catch (ValidationException e)

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java?rev=1200653&r1=1200652&r2=1200653&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/validator/DateStringValidator.java Fri Nov 11 00:05:28 2011
@@ -22,14 +22,12 @@ package org.apache.fulcrum.intake.valida
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
-
 import org.apache.fulcrum.intake.IntakeException;
 
 /**
@@ -57,18 +55,18 @@ import org.apache.fulcrum.intake.IntakeE
  * @version $Id$
  */
 public class DateStringValidator
-        extends DefaultValidator
+        extends DefaultValidator<Date>
 {
     private static final String DEFAULT_DATE_MESSAGE =
             "Date could not be parsed";
 
-    /**  */
-    private List dateFormats = null;
+    /** A list of date formats to try */
+    private List<String> dateFormats = null;
 
-    /**  */
+    /** An error message if no date could be parsed */
     private String dateFormatMessage = null;
 
-    /**  */
+    /** A flag that is passed to the DateFormat lenient feature */
     private boolean flexible = false;
 
     /**  */
@@ -77,10 +75,10 @@ public class DateStringValidator
     /**  */
     private SimpleDateFormat sdf = null;
 
-    public DateStringValidator(Map paramMap)
+    public DateStringValidator(Map<String, Constraint> paramMap)
             throws IntakeException
     {
-        init(paramMap);
+        super(paramMap);
     }
 
     /**
@@ -88,7 +86,8 @@ public class DateStringValidator
      */
     public DateStringValidator()
     {
-        dateFormats = new ArrayList(5);
+        super();
+        dateFormats = new ArrayList<String>(5);
     }
 
     /**
@@ -97,12 +96,12 @@ public class DateStringValidator
      * @param paramMap
      * @throws InvalidMaskException
      */
-    public void init(Map paramMap)
+    public void init(Map<String, ? extends Constraint> paramMap)
             throws InvalidMaskException
     {
         super.init(paramMap);
 
-        Constraint constraint = (Constraint) paramMap.get(FORMAT_RULE_NAME);
+        Constraint constraint = paramMap.get(FORMAT_RULE_NAME);
 
         if (constraint != null)
         {
@@ -112,7 +111,7 @@ public class DateStringValidator
 
         for(int i = 1 ;; i++)
         {
-            constraint = (Constraint) paramMap.get(FORMAT_RULE_NAME + i);
+            constraint = paramMap.get(FORMAT_RULE_NAME + i);
 
             if (constraint == null)
             {
@@ -128,7 +127,7 @@ public class DateStringValidator
             dateFormatMessage = DEFAULT_DATE_MESSAGE;
         }
 
-        constraint = (Constraint) paramMap.get(FLEXIBLE_RULE_NAME);
+        constraint = paramMap.get(FLEXIBLE_RULE_NAME);
 
         if (constraint != null)
         {
@@ -196,7 +195,7 @@ public class DateStringValidator
 
         for (int i = 1; i < dateFormats.size() && date == null; i++)
         {
-            sdf.applyPattern((String) dateFormats.get(i));
+            sdf.applyPattern(dateFormats.get(i));
 
             try
             {
@@ -210,7 +209,7 @@ public class DateStringValidator
 
         if (date == null)
         {
-            sdf.applyPattern((String) dateFormats.get(0));
+            sdf.applyPattern(dateFormats.get(0));
 
             try
             {
@@ -249,7 +248,7 @@ public class DateStringValidator
         String s = null;
         if (date != null)
         {
-            sdf.applyPattern((String) dateFormats.get(0));
+            sdf.applyPattern(dateFormats.get(0));
             s = sdf.format(date);
         }
         return s;
@@ -290,7 +289,7 @@ public class DateStringValidator
      *
      * @return value of dateFormats.
      */
-    public List getDateFormats()
+    public List<String> getDateFormats()
     {
         return dateFormats;
     }
@@ -300,7 +299,7 @@ public class DateStringValidator
      *
      * @param formats  Value to assign to dateFormats.
      */
-    public void setDateFormats(List formats)
+    public void setDateFormats(List<String> formats)
     {
         this.dateFormats = formats;
     }