Index: frontend/engine/src/main/java/org/hippoecm/frontend/model/PropertyValueProvider.java =================================================================== --- frontend/engine/src/main/java/org/hippoecm/frontend/model/PropertyValueProvider.java (revision 23081) +++ frontend/engine/src/main/java/org/hippoecm/frontend/model/PropertyValueProvider.java (revision ) @@ -15,7 +15,6 @@ */ package org.hippoecm.frontend.model; -import java.util.Calendar; import java.util.Iterator; import java.util.LinkedList; import java.util.Set; @@ -247,8 +246,6 @@ switch (propertyType) { case PropertyType.BOOLEAN: return factory.createValue(false); - case PropertyType.DATE: - return factory.createValue(Calendar.getInstance()); case PropertyType.DOUBLE: return factory.createValue(0.0); case PropertyType.LONG: Index: frontend/engine/src/main/java/org/hippoecm/frontend/model/properties/JcrPropertyValueModel.java =================================================================== --- frontend/engine/src/main/java/org/hippoecm/frontend/model/properties/JcrPropertyValueModel.java (revision 21509) +++ frontend/engine/src/main/java/org/hippoecm/frontend/model/properties/JcrPropertyValueModel.java (revision ) @@ -57,7 +57,7 @@ public static final int NO_INDEX = -1; - private static final int NO_TYPE = -1; + public static final int NO_TYPE = -1; // dynamically reload value private transient boolean loaded = false; @@ -106,6 +106,10 @@ } } + /** + * Returns the {@link javax.jcr.nodetype.PropertyDefinition} for the current property. + * @return the property definition. + */ private PropertyDefinition getPropertyDefinition() { if (propertyDefinition == null) { if (propertyModel.getItemModel().exists()) { @@ -125,20 +129,25 @@ return propertyDefinition; } + /** + * Determines the type of the property. If the type is not yet defined, the type will be resolved based on the value. + * If the value is null the type of property is determined based on the {@link javax.jcr.nodetype.PropertyDefinition}. + * @see {@link javax.jcr.PropertyType} for the resulting values. + * @return an integer representing the type of property. + */ public int getType() { if (type == NO_TYPE) { - // try to determine real value - if (value != null) { - type = value.getType(); - } else { - PropertyDefinition def = getPropertyDefinition(); + PropertyDefinition def = getPropertyDefinition(); + // try to determine real value - if (def != null) { - type = def.getRequiredType(); + if (def != null) { + type = def.getRequiredType(); - } else { + } else if (value != null) { + type = value.getType(); + } + else { - type = PropertyType.UNDEFINED; - } - } + type = PropertyType.UNDEFINED; + } + } - } return type; } @@ -205,7 +214,7 @@ } } } catch (RepositoryException e) { - log.error(e.getMessage()); + log.error("An exception occured while trying to set value: {}", e.getMessage()); } } else { log.error("unable to set property, no definition found"); Index: frontend/engine/src/main/java/org/hippoecm/frontend/model/properties/JcrPropertyModel.java =================================================================== --- frontend/engine/src/main/java/org/hippoecm/frontend/model/properties/JcrPropertyModel.java (revision 20737) +++ frontend/engine/src/main/java/org/hippoecm/frontend/model/properties/JcrPropertyModel.java (revision ) @@ -127,7 +127,7 @@ PropertyDefinition best = null; for (PropertyDefinition pdef : nodeType.getPropertyDefinitions()) { if (pdef.getName().equals(name) && pdef.isMultiple() == multiValued) { - if (type == PropertyType.UNDEFINED || pdef.getRequiredType() == type) { + if (type == PropertyType.UNDEFINED || type == JcrPropertyValueModel.NO_TYPE || pdef.getRequiredType() == type) { return pdef; } else if (pdef.getRequiredType() == PropertyType.UNDEFINED) { best = pdef; Index: frontend/test/src/test/resources/frontendtest.cnd =================================================================== --- frontend/test/src/test/resources/frontendtest.cnd (revision 23273) +++ frontend/test/src/test/resources/frontendtest.cnd (revision ) @@ -36,6 +36,7 @@ - frontendtest:string (string) - frontendtest:strings (string) multiple - frontendtest:mandatory (string) = 'test' mandatory +- frontendtest:date (date) [frontendtest:ordered] orderable - frontendtest:property (string) multiple Index: addon/yui/src/main/java/org/hippoecm/frontend/plugins/yui/datetime/YuiDateTimeField.java =================================================================== --- addon/yui/src/main/java/org/hippoecm/frontend/plugins/yui/datetime/YuiDateTimeField.java (revision 23098) +++ addon/yui/src/main/java/org/hippoecm/frontend/plugins/yui/datetime/YuiDateTimeField.java (revision ) @@ -148,26 +148,28 @@ } private void updateDateTime(Date date, Integer hours, Integer minutes) { + if(date!=null) { - MutableDateTime datetime = new MutableDateTime(date); - try { - TimeZone zone = getClientTimeZone(); - if (zone != null) { - datetime.setZone(DateTimeZone.forTimeZone(zone)); - } + MutableDateTime datetime = new MutableDateTime(date); + try { + TimeZone zone = getClientTimeZone(); + if (zone != null) { + datetime.setZone(DateTimeZone.forTimeZone(zone)); + } - if (hours != null) { - datetime.set(DateTimeFieldType.hourOfDay(), hours % 24); - datetime.setMinuteOfHour(minutes != null ? minutes : 0); - } + if (hours != null) { + datetime.set(DateTimeFieldType.hourOfDay(), hours % 24); + datetime.setMinuteOfHour(minutes != null ? minutes : 0); + } - // the date will be in the server's timezone - setDate(datetime.toDate()); - //setModelObject(datetime.toDate()); - } catch (RuntimeException e) { - error(e.getMessage()); - invalid(); - } - } + // the date will be in the server's timezone + setDate(datetime.toDate()); + //setModelObject(datetime.toDate()); + } catch (RuntimeException e) { + error(e.getMessage()); + invalid(); + } + } + } @Override protected boolean use12HourFormat() { Index: frontend/test/src/test/java/org/hippoecm/frontend/model/PropertyValueProviderTest.java =================================================================== --- frontend/test/src/test/java/org/hippoecm/frontend/model/PropertyValueProviderTest.java (revision 23081) +++ frontend/test/src/test/java/org/hippoecm/frontend/model/PropertyValueProviderTest.java (revision ) @@ -37,9 +37,13 @@ import org.hippoecm.frontend.types.JavaTypeDescriptor; import org.junit.Test; +/** + * Tests for {@link org.hippoecm.frontend.model.PropertyValueProvider} + */ public class PropertyValueProviderTest extends PluginTest { @SuppressWarnings("unused") private static final String SVN_ID = "$Id: PropertyValueProviderTest.java 23081 2010-06-09 13:32:25Z fvlankvelt $"; + private static final String TEST_NODE_NAME = "test"; protected Value createValue(String value) throws UnsupportedRepositoryOperationException, RepositoryException { return session.getValueFactory().createValue(value); @@ -48,7 +52,7 @@ @Test public void testAddNewAddsDummyForRequiredField() throws ItemExistsException, PathNotFoundException, NoSuchNodeTypeException, LockException, VersionException, ConstraintViolationException, RepositoryException { - Node test = this.root.addNode("test", "frontendtest:model"); + Node test = this.root.addNode(TEST_NODE_NAME, "frontendtest:model"); JcrPropertyModel propModel = new JcrPropertyModel(test.getPath() + "/frontendtest:value"); IFieldDescriptor field = new JavaFieldDescriptor("frontendtest:value", new JavaTypeDescriptor("string", "String", null)); @@ -68,4 +72,25 @@ pvm = provider.iterator(0, 1).next(); assertEquals(null, pvm.getObject()); } + + @Test + public void testAddNewAddsNoDefaultPropertyForDateField() throws RepositoryException { + Node testNode = this.root.addNode(TEST_NODE_NAME,"frontendtest:model"); + JcrPropertyModel propertyModel = new JcrPropertyModel(testNode.getPath() + "/frontendtest:date"); + IFieldDescriptor field = new JavaFieldDescriptor("frontendtest:date", new JavaTypeDescriptor("date", + "Date", null)); + PropertyValueProvider provider = new PropertyValueProvider(field, field.getTypeDescriptor(), propertyModel + .getItemModel()); + provider.addNew(); + + assertFalse("No date property expected, but a date property was found.",session.itemExists(testNode.getPath() + "/frontendtest:date")); + assertEquals(1, provider.size()); + JcrPropertyValueModel pvm = provider.iterator(0, 1).next(); + assertEquals(null, pvm.getObject()); + + provider.detach(); + assertEquals(1, provider.size()); + pvm = provider.iterator(0, 1).next(); + assertEquals(null, pvm.getObject()); -} \ No newline at end of file + } +} \ No newline at end of file