Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Won't Do
-
None
-
None
-
None
Description
During migration from old intake to current trunk version,
I found that Field.setProperty method behavior changed from when it does not execute when the value does not set to force execute using safe empty default value.
I hope to give old behavior as option by adding useSafeEmpty property.
Here is a patch.
Thanks,
Youngho
----------------------------------------------
Index: src/java/org/apache/fulcrum/intake/model/Field.java
===================================================================
— src/java/org/apache/fulcrum/intake/model/Field.java (revision 1637028)
+++ src/java/org/apache/fulcrum/intake/model/Field.java (working copy)
@@ -42,7 +42,7 @@
- Base class for Intake generated input processing classes.
* - @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:dlr@finemaltcoding.com>Daniel Rall</a>
+ * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- @author <a href="mailto:jh@byteaction.de">Jürgen Hoffmann</a>
@@ -133,6 +133,9 @@
/** Has the field has been set from the parser? */
protected boolean initialized;
+ /** useSafeEmptyValue or not when field unset */
+ protected boolean useSafeEmpty = true;
+
/** Error message, is any, resulting from validation */
protected String message;
@@ -468,6 +471,15 @@
}
/**
+ *
+ * @param v value to assign to useSafeEmpty
+ */
+ protected void setUseSafeEmpty(boolean v)
+
+
+ /**
- Removes references to this group and its fields from the
- query parameters
*/
@@ -490,6 +502,7 @@
validFlag = false;
validated = false;
required = false;
+ useSafeEmpty = true;
message = null;
retrievable = null;
@@ -904,7 +917,7 @@
log.debug(name + ": Property is set, value is " + valArray[0]);
}
}
- else
+ else if(useSafeEmpty) { valArray[0] = getSafeEmptyValue(); if (isDebugEnabled) @@ -912,6 +925,17 @@ log.debug(name + ": Property is not set, using emptyValue " + valArray[0]); }}
+ else
+Unknown macro: {+ if (isDebugEnabled)+ { + log.debug("Skip unset " + name + ".setProperty(" + obj.getClass().getName() + ")"); + }+ /*+ * Do not invoke unset field if useSafeEmpty doesn't accept+ */+ return;+ }
try
{ Index: src/java/org/apache/fulcrum/intake/xmlmodel/AppData.java =================================================================== --- src/java/org/apache/fulcrum/intake/xmlmodel/AppData.java (revision 1629357) +++ src/java/org/apache/fulcrum/intake/xmlmodel/AppData.java (working copy) @@ -29,7 +29,7 @@ /** * A class for holding application data structures. * - * @author <a href="mailto:jmcnally@collab.net>John McNally</a> + * @author <a href="mailto:jmcnally@collab.net">John McNally</a> * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> * @version $Id$ Index: src/java/org/apache/fulcrum/intake/xmlmodel/XmlGroup.java =================================================================== --- src/java/org/apache/fulcrum/intake/xmlmodel/XmlGroup.java (revision 1629357) +++ src/java/org/apache/fulcrum/intake/xmlmodel/XmlGroup.java (working copy) @@ -29,7 +29,7 @@ /** * A Class for holding data about a grouping of inputs used in an Application. * - * @author <a href="mailto:jmcnally@collab.net>John McNally</a> + * @author <a href="mailto:jmcnally@collab.net">John McNally</a> * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> * @version $Id$ */ Index: src/test/intake1.xml =================================================================== --- src/test/intake1.xml (revision 1629357) +++ src/test/intake1.xml (working copy) @@ -53,7 +53,19 @@ <field name="EmptyDoubleTestField" key="edtf" type="double"/> <field name="EmptyBigDecimalTestField" key="ebdtf" type="BigDecimal"/> <field name="NumberTestField" key="ntf" type="int"> - <rule name="invalidNumber">Not a number</rule> + <rule name="invalidNumber" value="">Not a number</rule> </field> </group> + +<group name="AttributeValue" key="attv" mapToObject="AttributeValue"> + <field name="Id" key="id" type="long" mapToProperty="ValueId"> + <rule name="invalidNumber" value="">intakeBadIdMessage</rule> + </field> + <field name="AttributeId" key="attid" type="int"> + </field> + <field name="UserId" key="visid" type="custom" + fieldClass="org.apache.fulcrum.intake.test.MyIntegerField"> + </field> +</group> + </input-data> Index: src/test/org/apache/fulcrum/intake/IntakeTest.java =================================================================== --- src/test/org/apache/fulcrum/intake/IntakeTest.java (revision 1629357) +++ src/test/org/apache/fulcrum/intake/IntakeTest.java (working copy) @@ -23,6 +23,7 @@ import org.apache.fulcrum.intake.model.Field; import org.apache.fulcrum.intake.model.Group; +import org.apache.fulcrum.intake.test.AttributeValue; import org.apache.fulcrum.intake.test.LoginForm; import org.apache.fulcrum.intake.validator.BooleanValidator; import org.apache.fulcrum.intake.validator.IntegerValidator; @@ -255,4 +256,40 @@ assertEquals("Invalid number message is wrong.", "Not a number", ve.getMessage()); } }
+
+ public void testEmptyNumberField() throws Exception
+
}
Index: src/test/org/apache/fulcrum/intake/test/AttributeValue.java
===================================================================
— src/test/org/apache/fulcrum/intake/test/AttributeValue.java (revision 0)
+++ src/test/org/apache/fulcrum/intake/test/AttributeValue.java (working copy)
@@ -0,0 +1,61 @@
+package org.apache.fulcrum.intake.test;
+
+import org.apache.commons.lang.ArrayUtils;
+
+public class AttributeValue {
+
+ private Long valueId;
+
+ private Integer attributeId;
+
+ private Integer userId;
+
+ /**
+ * @return
+ */
+ public Long getValueId()
+
+ /**
+ * @param userId
+ */
+ public void setValueId(Long valueId)
+
+ /**
+ * @return
+ */
+ public Integer getAttributeId()
+
+ /**
+ * @param attributeId
+ */
+ public void setAttributeId(Integer attributeId)
+
+ public Integer getUserId()
+ /**
+ * @param userId
+ */
+ public void setUserId(Integer userId)
+
+ public String toString()
+}
Index: src/test/org/apache/fulcrum/intake/test/MyIntegerField.java
===================================================================
— src/test/org/apache/fulcrum/intake/test/MyIntegerField.java (revision 0)
+++ src/test/org/apache/fulcrum/intake/test/MyIntegerField.java (working copy)
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fulcrum.intake.test;
+
+import org.apache.fulcrum.intake.IntakeException;
+import org.apache.fulcrum.intake.model.Group;
+import org.apache.fulcrum.intake.model.IntegerField;
+import org.apache.fulcrum.intake.xmlmodel.XmlField;
+
+public class MyIntegerField extends IntegerField
+{
+
+ public MyIntegerField(XmlField field, Group group) throws IntakeException
+
+
+}