Hello Thomas, I read trunk Field.java and old Field.java which I use,
And find out that some days ago 'getSafeEmptyValue()' method introduced. But because the history log is missing at the apache svn, I don't know why this code introduced and what for. Anyway because of this method, the calling setter force the value set to 0 of number even the parameter parser has not the field value. And I think this behavior conflicts with the Field.java setProperty() method document. the document says that "Calls a setter method on obj, if this field has been set." Because that change happened a long times ago, and I can't find any issue about this behavior at the issue tracker I think intake user use without any problem but how? Is there any way to keep 'null' state at the current code by setting or Do I have to create a bug ticket about this behavior or Do I use my own numberField by extending intake numberField ? Thanks, Youngho 2014-11-04 10:22 GMT+09:00 Youngho Cho <[email protected]>: > Hello Thomas, > > Here is the diff which I tested with trunk intake. > > I an not sure how can I keep the 'null' state. > > > Thanks, > > Youngho > > //********************************************* > > Index: src/java/org/apache/fulcrum/intake/model/Field.java > =================================================================== > --- src/java/org/apache/fulcrum/intake/model/Field.java (revision 1629357) > +++ 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> > Index: src/test/intake1.xml > =================================================================== > --- src/test/intake1.xml (revision 1629357) > +++ src/test/intake1.xml (working copy) > @@ -56,4 +56,20 @@ > <rule name="invalidNumber">Not a number</rule> > </field> > </group> > + > +<group name="AttributeValue" key="attv" mapToObject="AttributeValue"> > + <field name="Id" key="id" type="long" mapToProperty="ValueId"> > + <rule name="mask" value="[0-9]+">intakeBadIdMessage</rule> > + <rule name="required" value="false"></rule> > + </field> > + <field name="AttributeId" key="attid" type="int"> > + <rule name="mask" value="[0-9]+"></rule> > + <rule name="required" value="true">Required</rule> > + </field> > + <field name="UserId" key="visid" type="int"> > + <rule name="mask" value="[0-9]+">intakeBadIdMessage</rule> > + <rule name="required" value="false"></rule> > + </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,36 @@ > 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()); > + > + Field<?> valueField = group.get("Id"); > + assertNull(valueField.getValue()); > + > + Field<?> userField = group.get("UserId"); > + assertNull(userField.getValue()); > + > + AttributeValue value = new AttributeValue(); > + assertTrue(group.isAllValid()); > + // > + group.setProperties(value); > + > + assertEquals(Integer.valueOf(1), value.getAttributeId()); > + assertNull(value.toString(), value.getValueId()); > + 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,75 @@ > +package org.apache.fulcrum.intake.test; > + > + > +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; > + } > + > + /** > + * @return > + */ > + public Integer getUserId() { > + return userId; > + } > + > + /** > + * @param userId > + */ > + public void setUserId(Integer userId) { > + this.userId = userId; > + } > + > + //**************************************** > + // primitive for intake > + public void setValueId(long valueId) { > + setValueId(Long.valueOf(valueId)); > + } > + public void setAttributeId(int attributeId) { > + setAttributeId(Integer.valueOf(attributeId)); > + } > + public void setUserId(int userId) { > + setUserId(Integer.valueOf(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(); > + } > +} > > > 2014-11-03 1:35 GMT+09:00 Thomas Vandahl <[email protected]>: >> On 31.10.14 04:26, Youngho Cho wrote: >>> Hello, >>> >>> I am migrating very old intake to current trunk version. >>> >>> I have a question about usage for 'null' number state. >>> >>> for example, >>> >>> I would like to keep 'null' state when input parameter doesn't have a >>> value for number field. >>> >>> But >>> >>> during the group.setProperties(OM) process >>> the empty field value set to '0' value of number. >>> >>> How can I keep 'null' state ? >> >> Could you please show me the relevant part of your intake.xml? >> >> Bye, Thomas. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
