[
https://issues.apache.org/jira/browse/TRB-93?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Vandahl resolved TRB-93.
-------------------------------
Resolution: Won't Do
Assignee: Thomas Vandahl
The patch cannot be applied as too much has changed in the meantime.
Sorry.
> 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
> Assignee: Thomas Vandahl
> Priority: Major
>
> 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
(v7.6.3#76005)