Youngho Cho created TRB-93:
------------------------------
Summary: Intake add option to skip field.setProperty method when
field value does not set
Key: TRB-93
URL: https://issues.apache.org/jira/browse/TRB-93
Project: Turbine
Issue Type: Improvement
Components: Fulcrum
Reporter: Youngho Cho
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:[email protected]">John McNally</a>
- * @author <a href="mailto:[email protected]>Daniel Rall</a>
+ * @author <a href="mailto:[email protected]">Daniel Rall</a>
* @author <a href="mailto:[email protected]">Henning P. Schmiedehausen</a>
* @author <a href="mailto:[email protected]">Quinton McCombs</a>
* @author <a href="mailto:[email protected]">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)
+ {
+ useSafeEmpty = 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
+ {
+ 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:[email protected]>John McNally</a>
+ * @author <a href="mailto:[email protected]">John McNally</a>
* @author <a href="mailto:[email protected]">Henning P. Schmiedehausen</a>
* @author <a href="mailto:[email protected]">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:[email protected]>John McNally</a>
+ * @author <a href="mailto:[email protected]">John McNally</a>
* @author <a href="mailto:[email protected]">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
+ {
+ IntakeService is = (IntakeService) this.resolve(
IntakeService.class.getName() );
+ Group group = is.getGroup("AttributeValue");
+ assertNotNull(group);
+
+ ParserService ps = (ParserService) this.resolve(
ParserService.class.getName() );
+ ValueParser pp = ps.getParser(DefaultParameterParser.class);
+
+ pp.add("attv_0attid", "1");
+ group.init(pp);
+
+ Field<?> attributeField = group.get("AttributeId");
+ assertNotNull(attributeField);
+ assertEquals(1, attributeField.getValue());
+ assertTrue(attributeField.isSet());
+
+ Field<?> valueField = group.get("Id");
+ assertNull(valueField.getValue());
+ assertFalse(valueField.isSet());
+
+ Field<?> userField = group.get("UserId");
+ assertNull(userField.getValue());
+ assertFalse(userField.isSet());
+
+ //
+ assertTrue(group.isAllValid());
+ //
+ AttributeValue value = new AttributeValue();
+ group.setProperties(value);
+
+ assertEquals(value.toString(), Long.valueOf(0), value.getValueId());
+ assertEquals(value.toString(), Integer.valueOf(1),
value.getAttributeId());
+ assertNull(value.toString(), value.getUserId());
+ }
}
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() {
+ return valueId;
+ }
+
+ /**
+ * @param userId
+ */
+ public void setValueId(Long valueId) {
+ this.valueId = valueId;
+ }
+
+ /**
+ * @return
+ */
+ public Integer getAttributeId() {
+ return attributeId;
+ }
+
+ /**
+ * @param attributeId
+ */
+ public void setAttributeId(Integer attributeId) {
+ this.attributeId = attributeId;
+ }
+
+ public Integer getUserId() {
+ return userId;
+ }
+ /**
+ * @param userId
+ */
+ public void setUserId(Integer userId) {
+ this.userId = userId;
+ }
+
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("ValueId ");
+ sb.append(this.valueId);
+ sb.append(", AttributeId ");
+ sb.append(this.attributeId);
+ sb.append(", UserId ");
+ sb.append(this.userId);
+ return sb.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
+ {
+ super(field, group);
+ setUseSafeEmpty(false);
+ log.info("Instance of MyIntegerField created.");
+ }
+
+}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)