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 2016/11/17 15:03:42 UTC

svn commit: r1770205 - /turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/

Author: tv
Date: Thu Nov 17 15:03:41 2016
New Revision: 1770205

URL: http://svn.apache.org/viewvc?rev=1770205&view=rev
Log:
Move handling of maps to afterUnmarshal() to play nice with Java8

Modified:
    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/FieldAdapter.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/model/XmlField.java

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -107,7 +107,7 @@ public class BigDecimalField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             BigDecimal[] values = parser.getBigDecimals(getKey());
 

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -98,7 +98,7 @@ public class BooleanField
     @Override
 	protected Object getSafeEmptyValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             return new boolean[0];
         }
@@ -125,7 +125,7 @@ public class BooleanField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             Boolean[] inputs = parser.getBooleanObjects(getKey());
             boolean[] values = new boolean[inputs.length];

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -27,6 +27,7 @@ import org.apache.commons.lang.StringUti
 import org.apache.fulcrum.intake.IntakeException;
 import org.apache.fulcrum.intake.IntakeRuntimeException;
 import org.apache.fulcrum.intake.validator.DateStringValidator;
+import org.apache.fulcrum.intake.validator.Validator;
 
 
 /**
@@ -60,6 +61,7 @@ public class DateStringField
     {
         super(field, group);
 
+        Validator<?> validator = getValidator();
         if (validator == null || !(validator instanceof DateStringValidator))
         {
             df = DateFormat.getInstance();
@@ -139,7 +141,7 @@ public class DateStringField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             String[] inputs = parser.getStrings(getKey());
             Date[] values = new Date[inputs.length];
@@ -185,6 +187,7 @@ public class DateStringField
     {
         Date date = null;
         // FIXME: Canonicalize user-entered date strings.
+        Validator<?> validator = getValidator();
         if (validator != null && validator instanceof DateStringValidator)
         {
             date = ((DateStringValidator) validator).parse(dateString);
@@ -206,6 +209,7 @@ public class DateStringField
     {
         String s = null;
         Object value = getValue();
+        Validator<?> validator = getValidator();
         if (value == null)
         {
             s = "";

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -99,7 +99,7 @@ public class DoubleField
     @Override
 	protected Object getSafeEmptyValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             return new double[0];
         }
@@ -127,7 +127,7 @@ public class DoubleField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             Double[] inputs = parser.getDoubleObjects(getKey());
             double[] values = new double[inputs.length];

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -69,49 +69,49 @@ public abstract class Field<T> implement
     // the following are set from the xml file and are permanent (final)
 
     /** Name of the field. */
-    protected final String name;
+    private final String name;
 
     /** Key used to identify the field in the parser */
-    protected final String key;
+    private final String key;
 
     /** Display size of the field */
-    protected final String displaySize;
+    private final String displaySize;
 
     /** Class name of the object to which the field is mapped */
     protected String mapToObject;
 
     /** Optional property name of the object to which the field is mapped */
-    protected String mapToProperty;
+    private String mapToProperty;
 
     /** Class name of the validator (for deserialization) */
-    protected String validatorClassName;
+    private String validatorClassName;
 
     /** Used to validate the contents of the field */
-    protected transient Validator<T> validator;
+    private transient Validator<T> validator;
 
     /** Getter method in the mapped object used to populate the field */
-    protected Method getter;
+    private Method getter;
 
     /** Setter method in the mapped object used to store the value of field */
-    protected Method setter;
+    private Method setter;
 
     /** Error message set on the field if required and not set by parser */
-    protected String ifRequiredMessage;
+    private String ifRequiredMessage;
 
     /** Does this field accept multiple values? */
-    protected final boolean isMultiValued;
+    private final boolean isMultiValued;
 
     /** Group to which the field belongs */
-    protected final Group group;
+    private final Group group;
 
     /** Is this field always required?  This is only set through the XML file */
-    protected boolean alwaysRequired;
+    private boolean alwaysRequired;
 
     /**
      * Value of the field if an error occurs while getting
      * the value from the mapped object
      */
-    protected T onError;
+    private T onError;
 
     /** Default value of the field */
     protected T defaultValue;
@@ -120,7 +120,7 @@ public abstract class Field<T> implement
     protected T emptyValue;
 
     /** Display name of the field to be used on data entry forms... */
-    protected String displayName;
+    private String displayName;
 
     /** Max size of the field */
     private String maxSize;
@@ -128,25 +128,25 @@ public abstract class Field<T> implement
     // these are reset when the Field is returned to the pool
 
     /** Has the field has been set from the parser? */
-    protected boolean setFlag;
+    private boolean setFlag;
 
     /** Has the field passed the validation test? */
-    protected boolean validFlag;
+    private boolean validFlag;
 
     /** Has the field been validated? */
-    protected boolean validated;
+    private boolean validated;
 
     /** Does the field require a value? */
-    protected boolean required;
+    private boolean required;
 
     /** Has the field has been set from the parser? */
-    protected boolean initialized;
+    private boolean initialized;
 
     /** Error message, is any, resulting from validation */
-    protected String message;
+    private String message;
 
     /** Mapped object used to set the initial field value */
-    protected Retrievable retrievable;
+    private Retrievable retrievable;
 
     /** Locale of the field */
     private Locale locale;
@@ -312,8 +312,8 @@ public abstract class Field<T> implement
             throws IntakeException
     {
         this.parser = pp;
-        validFlag = true;
-        validated = false;
+        setValid(true);
+        setValidated(false);
 
         this.locale = pp.getLocale();
 
@@ -601,6 +601,30 @@ public abstract class Field<T> implement
     }
 
     /**
+     * @param setFlag the setFlag to set
+     */
+    protected void setSet(boolean setFlag)
+    {
+        this.setFlag = setFlag;
+    }
+
+    /**
+     * @param validFlag the validFlag to set
+     */
+    protected void setValid(boolean validFlag)
+    {
+        this.validFlag = validFlag;
+    }
+
+    /**
+     * @param validated the validated to set
+     */
+    protected void setValidated(boolean validated)
+    {
+        this.validated = validated;
+    }
+
+    /**
      * @deprecated Call validate() instead (with no parameters).
      */
     @Deprecated
@@ -617,7 +641,7 @@ public abstract class Field<T> implement
         log.debug(name + ": validate()");
         Validator<T> v = getValidator();
 
-        if (isMultiValued)
+        if (isMultiValued())
         {
             stringValues = parser.getStrings(getKey());
 
@@ -961,7 +985,7 @@ public abstract class Field<T> implement
     }
 
     /**
-     * Used to throw an IntakeException when an error occurs execuing the
+     * Used to throw an IntakeException when an error occurs executing the
      * get/set method of the mapped persistent object.
      *
      * @param type Type of method. (setter/getter)
@@ -1027,7 +1051,7 @@ public abstract class Field<T> implement
     }
 
     /**
-     * Gets the diplay size of the field.  This is useful when
+     * Gets the display size of the field.  This is useful when
      * building the HTML input tag.  If no displaySize was set,
      * an empty string is returned.
      */

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java?rev=1770205&r1=1770204&r2=1770205&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/FieldAdapter.java Thu Nov 17 15:03:41 2016
@@ -20,10 +20,7 @@ package org.apache.fulcrum.intake.model;
  */
 
 import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import javax.xml.bind.annotation.adapters.XmlAdapter;
@@ -213,18 +210,6 @@ public class FieldAdapter extends XmlAda
         FieldCtor fieldCtor = null;
         Field<?> field = null;
         String type = xmlField.getType();
-        
-        List<Rule> rules = xmlField.getRules();
-        if (rules != null ) 
-        {
-        
-        	xmlField.getRuleMap().clear();
-        	Map<String,Rule> ruleMap = xmlField.getRuleMap();
-        	for (Rule rule : rules)
-	        {
-	            ruleMap.put(rule.getName(), rule);
-	        }
-        }
 
         fieldCtor = fieldCtors.get(type);
         if (fieldCtor == null)
@@ -246,37 +231,9 @@ public class FieldAdapter extends XmlAda
     @Override
     public Field<?> unmarshal(XmlField xmlField) throws Exception
     {
-    	Field<?> field = getInstance(xmlField, xmlField.getGroup());
-    	
-    	processDataInGroupContext(xmlField, field);        
-    	
-    	return field;
+        return getInstance(xmlField, xmlField.getGroup());
     }
 
-	private void processDataInGroupContext(XmlField xmlField, Field<?> field) {
-		Group group = xmlField.getGroup();
-    	Map<String, Field<?>> fields = group.fields;
-    	
-    	int defaultSize = 5;
-        if (fields == null) 
-        {
-        	fields = new HashMap<String, Field<?>>((int) (1.25 * defaultSize + 1));
-        }
-    	
-    	List<Field<?>> fieldsArray = null; // fieldsArray
-    	if (group.fieldsArray == null) 
-    	{
-        	fieldsArray = new ArrayList<Field<?>>();
-        } else 
-        {
-        	fieldsArray= new ArrayList<Field<?>>(Arrays.asList(group.fieldsArray));// resizable not size -fixed
-        }
-        fieldsArray.add(field);
-        fields.put(field.getName(), field);
-        group.fields = fields;
-        group.fieldsArray = fieldsArray.toArray(new Field<?>[]{});
-	}
-
     /**
      * @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
      */

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -119,23 +119,20 @@ public class FileItemField
 	public Field<FileItem> init(ValueParser vp)
             throws IntakeException
     {
-        super.parser = vp;
-
         if (!(vp instanceof ParameterParser))
         {
             throw new IntakeException(
                     "FileItemFields can only be used with ParameterParser");
         }
 
-        validFlag = true;
+        super.init(vp);
 
         if (parser.containsKey(getKey()))
         {
-            setFlag = true;
+            setSet(true);
             validate();
         }
 
-        initialized = true;
         return this;
     }
 
@@ -148,23 +145,23 @@ public class FileItemField
 	public boolean validate()
     {
         ParameterParser pp = (ParameterParser) super.parser;
-        if (isMultiValued)
+        if (isMultiValued())
         {
             FileItem[] ss = pp.getFileItems(getKey());
             // this definition of not set might need refined.  But
             // not sure the situation will arise.
             if (ss.length == 0)
             {
-                setFlag = false;
+                setSet(false);
             }
 
-            if (validator != null)
+            if (getValidator() != null)
             {
                 for (int i = 0; i < ss.length; i++)
                 {
                     try
                     {
-                        ((FileValidator) validator).assertValidity(ss[i]);
+                        ((FileValidator) getValidator()).assertValidity(ss[i]);
                     }
                     catch (ValidationException ve)
                     {
@@ -173,7 +170,7 @@ public class FileItemField
                 }
             }
 
-            if (setFlag && validFlag)
+            if (isSet() && isValid())
             {
                 doSetValue();
             }
@@ -183,16 +180,16 @@ public class FileItemField
             FileItem s = pp.getFileItem(getKey());
             if (s == null || s.getSize() == 0)
             {
-                setFlag = false;
+                setSet(false);
             }
 
-            if (validator != null)
+            if (getValidator() != null)
             {
                 try
                 {
-                    ((FileValidator) validator).assertValidity(s);
+                    ((FileValidator) getValidator()).assertValidity(s);
 
-                    if (setFlag)
+                    if (isSet())
                     {
                         doSetValue();
                     }
@@ -202,13 +199,13 @@ public class FileItemField
                     setMessage(ve.getMessage());
                 }
             }
-            else if (setFlag)
+            else if (isSet())
             {
                 doSetValue();
             }
         }
 
-        return validFlag;
+        return isValid();
     }
 
     /**
@@ -218,7 +215,7 @@ public class FileItemField
 	protected void doSetValue()
     {
         ParameterParser pp = (ParameterParser) super.parser;
-        if (isMultiValued)
+        if (isMultiValued())
         {
             setTestValue(pp.getFileItems(getKey()));
         }

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -99,7 +99,7 @@ public class FloatField
     @Override
 	protected Object getSafeEmptyValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             return new float[0];
         }
@@ -127,7 +127,7 @@ public class FloatField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             Float[] inputs = parser.getFloatObjects(getKey());
             float[] values = new float[inputs.length];

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -21,9 +21,10 @@ package org.apache.fulcrum.intake.model;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 
 import javax.xml.bind.Unmarshaller;
@@ -103,33 +104,42 @@ public class Group implements Serializab
     /**
      * A map of the fields in this group mapped by field name.
      */
-    protected Map<String, Field<?>> fields;
+    private Map<String, Field<?>> fieldsByName;
 
     /**
      * Map of the fields by mapToObject
      */
-    protected Map<String, Field<?>[]> mapToObjectFields;
+    private Map<String, Field<?>[]> mapToObjectFields;
 
     /**
-     * An array of fields in this group.
+     * A list of fields in this group.
      */
-    protected Field<?>[] fieldsArray;
+    private LinkedList<Field<?>> fields;
 
     /**
      * The object id used to associate this group to a bean
      * for one request cycle
      */
-    protected String oid;
+    private String oid;
 
     /**
      * The object containing the request data
      */
-    protected ValueParser pp;
+    private ValueParser pp;
 
     /**
      * A flag to help prevent duplicate hidden fields declaring this group.
      */
-    protected boolean isDeclared;
+    private boolean isDeclared;
+
+    /**
+     * Default constructor
+     */
+    public Group()
+    {
+        super();
+        this.fields = new LinkedList<Field<?>>();
+    }
 
     /**
 	 * Enable Avalon Logging
@@ -162,15 +172,16 @@ public class Group implements Serializab
     {
         this.oid = key;
         this.pp = pp;
-        for (int i = fieldsArray.length - 1; i >= 0; i--)
+        for (ListIterator<Field<?>> i = fields.listIterator(fields.size()); i.hasPrevious();)
         {
-            fieldsArray[i].init(pp);
+            i.previous().init(pp);
         }
-        for (int i = fieldsArray.length - 1; i >= 0; i--)
+        for (ListIterator<Field<?>> i = fields.listIterator(fields.size()); i.hasPrevious();)
         {
-            if (fieldsArray[i].isSet() && !fieldsArray[i].isValidated())
+            Field<?> field = i.previous();
+            if (field.isSet() && !field.isValidated())
             {
-                fieldsArray[i].validate();
+                field.validate();
             }
         }
         return this;
@@ -226,10 +237,11 @@ public class Group implements Serializab
      */
     public String[] getFieldNames()
     {
-        String nameList[] = new String[fieldsArray.length];
-        for (int i = 0; i < nameList.length; i++)
+        String nameList[] = new String[fields.size()];
+        int i = 0;
+        for (Field<?> f : fields)
         {
-            nameList[i] = fieldsArray[i].name;
+            nameList[i++] = f.getName();
         }
         return nameList;
     }
@@ -327,9 +339,9 @@ public class Group implements Serializab
     public Field<?> get(String fieldName)
             throws IntakeException
     {
-        if (fields.containsKey(fieldName))
+        if (fieldsByName.containsKey(fieldName))
         {
-            return fields.get(fieldName);
+            return fieldsByName.get(fieldName);
         }
         else
         {
@@ -344,16 +356,11 @@ public class Group implements Serializab
      */
     public List<Field<?>> getFields()
     {
-        if (fieldsArray == null)
-        {
-            return null;// new ArrayList<Field<?>>();
-        }
-
-        return Arrays.asList(fieldsArray);
+        return fields;
     }
 
     /**
-     * Jaxb sets the collection of fields for this group
+     * Set a collection of fields for this group
      *
      * @param fields the fields to set
      */
@@ -361,6 +368,7 @@ public class Group implements Serializab
     @XmlJavaTypeAdapter(FieldAdapter.class)
     protected void setFields(List<Field<?>> inputFields)
     {
+        fields = new LinkedList<Field<?>>(inputFields);
     }
 
     /**
@@ -371,14 +379,15 @@ public class Group implements Serializab
     public boolean isAllValid()
     {
         boolean valid = true;
-        for (int i = fieldsArray.length - 1; i >= 0; i--)
+        for (ListIterator<Field<?>> i = fields.listIterator(fields.size()); i.hasPrevious();)
         {
-            valid &= fieldsArray[i].isValid();
-            if (log.isDebugEnabled() && !fieldsArray[i].isValid())
+            Field<?> field = i.previous();
+            valid &= field.isValid();
+            if (log.isDebugEnabled() && !field.isValid())
             {
                 log.debug("Group(" + oid + "): " + name + "; Field: "
-                        + fieldsArray[i].name + "; value=" +
-                        fieldsArray[i].getValue() + " is invalid!");
+                        + field.getName() + "; value=" +
+                        field.getValue() + " is invalid!");
             }
         }
         return valid;
@@ -549,9 +558,9 @@ public class Group implements Serializab
                         pp.add(gid, groups[i]);
                     }
                 }
-                for (int i = fieldsArray.length - 1; i >= 0; i--)
+                for (ListIterator<Field<?>> i = fields.listIterator(fields.size()); i.hasPrevious();)
                 {
-                    fieldsArray[i].removeFromRequest();
+                    i.previous().removeFromRequest();
                 }
             }
         }
@@ -609,9 +618,9 @@ public class Group implements Serializab
         result.append(" key=\"").append(getGID()).append("\"");
         result.append(">\n");
 
-        if (fieldsArray != null)
+        if (fields != null)
         {
-            for (Field<?> field : fieldsArray)
+            for (Field<?> field : fields)
             {
                 result.append(field);
             }
@@ -641,11 +650,20 @@ public class Group implements Serializab
     public void afterUnmarshal(Unmarshaller um, Object parent)
     {
         this.parent = (AppData)parent;
+
+        // Build map
+        fieldsByName = new HashMap<String, Field<?>>((int) (1.25 * fields.size() + 1));
+
+        for (Field<?> field : fields)
+        {
+            fieldsByName.put(field.getName(), field);
+        }
+
         Map<String, List<Field<?>>> mapToObjectFieldLists =
-                new HashMap<String, List<Field<?>>>((int) (1.25 * fieldsArray.length + 1));
+                new HashMap<String, List<Field<?>>>((int) (1.25 * fields.size() + 1));
 
         // Fix fields
-        for (Field<?> field : fieldsArray)
+        for (Field<?> field : fields)
         {
             if (StringUtils.isNotEmpty(field.mapToObject))
             {
@@ -656,7 +674,7 @@ public class Group implements Serializab
             List<Field<?>> tmpFields = mapToObjectFieldLists.get(field.getMapToObject());
             if (tmpFields == null)
             {
-                tmpFields = new ArrayList<Field<?>>(fieldsArray.length);
+                tmpFields = new ArrayList<Field<?>>(fields.size());
                 mapToObjectFieldLists.put(field.getMapToObject(), tmpFields);
             }
 
@@ -664,7 +682,7 @@ public class Group implements Serializab
         }
 
         // Change the mapToObjectFields values to Field[]
-        mapToObjectFields = new HashMap<String, Field<?>[]>((int) (1.25 * fieldsArray.length + 1));
+        mapToObjectFields = new HashMap<String, Field<?>[]>((int) (1.25 * fields.size() + 1));
 
         for (Map.Entry<String, List<Field<?>>> entry : mapToObjectFieldLists.entrySet())
         {
@@ -717,9 +735,10 @@ public class Group implements Serializab
             Group group = pooledGroup.getObject();
             group.oid = null;
             group.pp = null;
-            for (int i = group.fieldsArray.length - 1; i >= 0; i--)
+            for (ListIterator<Field<?>> i = group.fields.listIterator(group.fields.size());
+                    i.hasPrevious();)
             {
-                group.fieldsArray[i].dispose();
+                i.previous().dispose();
             }
             group.isDeclared = false;
         }

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -98,7 +98,7 @@ public class IntegerField
     @Override
 	protected Object getSafeEmptyValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             return new int[0];
         }
@@ -126,7 +126,7 @@ public class IntegerField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             Integer[] inputs = parser.getIntObjects(getKey());
             int[] values = new int[inputs.length];

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -98,7 +98,7 @@ public class LongField
     @Override
 	protected Object getSafeEmptyValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             return new long[0];
         }
@@ -125,7 +125,7 @@ public class LongField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             Long[] inputs = parser.getLongObjects(getKey());
             long[] values = new long[inputs.length];

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -98,7 +98,7 @@ public class ShortField
     @Override
 	protected Object getSafeEmptyValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             return new short[0];
         }
@@ -126,7 +126,7 @@ public class ShortField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             Integer[] inputs = parser.getIntObjects(getKey());
             short[] values = new short[inputs.length];

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=1770205&r1=1770204&r2=1770205&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 Thu Nov 17 15:03:41 2016
@@ -92,7 +92,7 @@ public class StringField
     @Override
 	protected void doSetValue()
     {
-        if (isMultiValued)
+        if (isMultiValued())
         {
             String[] ss = parser.getStrings(getKey());
             String[] sval = new String[ss.length];
@@ -118,16 +118,16 @@ public class StringField
     @Override
 	public void setRequired(boolean v, String message)
     {
-        this.required = v;
+        super.setRequired(v, message);
         if (v)
         {
-            if (isMultiValued)
+            if (isMultiValued())
             {
                 String[] ss = (String[]) getTestValue();
                 if (ss == null || ss.length == 0)
                 {
-                    validFlag = false;
-                    this.message = message;
+                    setValid(false);
+                    setMessage(message);
                 }
                 else
                 {
@@ -142,17 +142,17 @@ public class StringField
                     }
                     if (!set)
                     {
-                        validFlag = false;
-                        this.message = message;
+                        setValid(false);
+                        setMessage(message);
                     }
                 }
             }
             else
             {
-                if (!setFlag || StringUtils.isEmpty((String)getTestValue()))
+                if (!isSet() || StringUtils.isEmpty((String)getTestValue()))
                 {
-                    validFlag = false;
-                    this.message = message;
+                    setValid(false);
+                    setMessage(message);
                 }
             }
         }

Modified: turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/XmlField.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/XmlField.java?rev=1770205&r1=1770204&r2=1770205&view=diff
==============================================================================
--- turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/XmlField.java (original)
+++ turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/XmlField.java Thu Nov 17 15:03:41 2016
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -93,14 +94,7 @@ public class XmlField
     @XmlAttribute
     private String emptyValue;
 
-    /**
-     * Jaxb set the collection of rules for this field
-     *
-     * @param rules the rules to set
-     */
-    @XmlElement(name="rule")
     private List<Rule> rules;
-    
     private Map<String, Rule> ruleMap;
 
     private Group parent;
@@ -112,6 +106,7 @@ public class XmlField
      */
     public XmlField()
     {
+        rules = new ArrayList<Rule>();
         ruleMap = new HashMap<String, Rule>();
     }
 
@@ -269,6 +264,17 @@ public class XmlField
     }
 
     /**
+     * Set the collection of rules for this field
+     *
+     * @param rules the rules to set
+     */
+    @XmlElement(name="rule")
+    public void setRules(List<Rule> rules)
+    {
+        this.rules = rules;
+    }
+
+    /**
      * The collection of rules for this field keyed by
      * parameter name.
      *
@@ -288,6 +294,14 @@ public class XmlField
     public void afterUnmarshal(Unmarshaller um, Object parent)
     {
         this.parent = (Group)parent;
+
+        // Build map
+        this.ruleMap.clear();
+        for (Rule rule : rules)
+        {
+            ruleMap.put(rule.getName(), rule);
+        }
+
         if (mapToObject == null)
         {
             // if a mapToProperty exists, set the object to this group's default



Antwort: Re: svn commit: r1770205 - /turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/

Posted by Georg Kallidis <gk...@cedis.fu-berlin.de>.
I tested it with Java 7/8 without errors! 

UnMarshalling is neat done this way (in the beans), let the adapter 
(unMarshal) keep focused on its own issues ..

+1 (expect)

Best regards, Georg

-----Thomas Vandahl <tv...@apache.org> schrieb: -----
An: dev@turbine.apache.org
Von: Thomas Vandahl <tv...@apache.org>
Datum: 17.11.2016 16:24
Betreff: Re: svn commit: r1770205 - 
/turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/

Hi folks,

this is my approach for centralizing the post-processing in the JAXB
"magical method" afterUnmarshal(). This works with all JDKs I have
access to (6, 7, 8). I privatized a lot of fields to clean up the
interfaces, while I was at it. Please test and review. I may have missed
something.

Bye, Thomas.

On 17.11.16 16:03, tv@apache.org wrote:
> Author: tv
> Date: Thu Nov 17 15:03:41 2016
> New Revision: 1770205
> 
> URL: http://svn.apache.org/viewvc?rev=1770205&view=rev
> Log:
> Move handling of maps to afterUnmarshal() to play nice with Java8
> 
> Modified:
> 
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/FieldAdapter.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/model/XmlField.java



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@turbine.apache.org
For additional commands, e-mail: dev-help@turbine.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@turbine.apache.org
For additional commands, e-mail: dev-help@turbine.apache.org


Re: svn commit: r1770205 - /turbine/fulcrum/trunk/intake/src/java/org/apache/fulcrum/intake/model/

Posted by Thomas Vandahl <tv...@apache.org>.
Hi folks,

this is my approach for centralizing the post-processing in the JAXB
"magical method" afterUnmarshal(). This works with all JDKs I have
access to (6, 7, 8). I privatized a lot of fields to clean up the
interfaces, while I was at it. Please test and review. I may have missed
something.

Bye, Thomas.

On 17.11.16 16:03, tv@apache.org wrote:
> Author: tv
> Date: Thu Nov 17 15:03:41 2016
> New Revision: 1770205
> 
> URL: http://svn.apache.org/viewvc?rev=1770205&view=rev
> Log:
> Move handling of maps to afterUnmarshal() to play nice with Java8
> 
> Modified:
>     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/FieldAdapter.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/model/XmlField.java


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@turbine.apache.org
For additional commands, e-mail: dev-help@turbine.apache.org