Index: jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java
===================================================================
--- jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java (revision 590729)
+++ jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java (working copy)
@@ -114,4 +114,15 @@
* @throws IOException
*/
public QValue create(File value) throws RepositoryException, IOException;
+
+ /**
+ * Given the QPropertyDefinition of an autocreated
+ * property, compute suitable values to be used in transient space until
+ * the newly created node gets saved.
+ *
+ * @param propertyDefinition definition of property for which values should be created
+ * @return computed value
+ * @throws RepositoryException
+ */
+ public QValue[] computeAutoValues(QPropertyDefinition propertyDefinition) throws RepositoryException;
}
Index: jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
===================================================================
--- jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (revision 590729)
+++ jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (working copy)
@@ -712,32 +712,21 @@
// properties without default values
Name declaringNT = def.getDeclaringNodeType();
Name name = def.getName();
- if (NameConstants.MIX_REFERENCEABLE.equals(declaringNT) && NameConstants.JCR_UUID.equals(name)) {
- // mix:referenceable node type defines jcr:uuid
- genValues = getQValues(parent.getUniqueID(), qValueFactory);
- } else if (NameConstants.NT_BASE.equals(declaringNT)) {
+ if (NameConstants.NT_BASE.equals(declaringNT)) {
// nt:base node type
if (NameConstants.JCR_PRIMARYTYPE.equals(name)) {
// jcr:primaryType property
- genValues = new QValue[]{qValueFactory.create(parent.getNodeTypeName())};
+ genValues = new QValue[]{qValueFactory.create(parent.getNodeTypeName())};
} else if (NameConstants.JCR_MIXINTYPES.equals(name)) {
// jcr:mixinTypes property
Name[] mixins = parent.getMixinTypeNames();
genValues = getQValues(mixins, qValueFactory);
}
- } else if (NameConstants.NT_HIERARCHYNODE.equals(declaringNT) && NameConstants.JCR_CREATED.equals(name)) {
- // nt:hierarchyNode node type defines jcr:created property
- genValues = new QValue[]{qValueFactory.create(Calendar.getInstance())};
- } else if (NameConstants.NT_RESOURCE.equals(declaringNT) && NameConstants.JCR_LASTMODIFIED.equals(name)) {
- // nt:resource node type defines jcr:lastModified property
- genValues = new QValue[]{qValueFactory.create(Calendar.getInstance())};
- } else if (NameConstants.NT_VERSION.equals(declaringNT) && NameConstants.JCR_CREATED.equals(name)) {
- // nt:version node type defines jcr:created property
- genValues = new QValue[]{qValueFactory.create(Calendar.getInstance())};
- } else {
- // TODO: TOBEFIXED. other nodetype -> build some default value
- log.warn("Missing implementation. Nodetype " + def.getDeclaringNodeType() + " defines autocreated property " + def.getName() + " without default value.");
}
+ else {
+ // ask the SPI implementation for advice
+ genValues = qValueFactory.computeAutoValues(def);
+ }
}
return genValues;
}
@@ -756,9 +745,6 @@
}
private static QValue[] getQValues(String uniqueID, QValueFactory factory) throws RepositoryException {
- if (uniqueID == null) {
- uniqueID = UUID.randomUUID().toString();
- }
return new QValue[] {factory.create(uniqueID, PropertyType.STRING)};
}
}