You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2007/10/31 18:31:21 UTC
svn commit: r590762 - in /jackrabbit/trunk:
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/value/
jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/
Author: reschke
Date: Wed Oct 31 10:31:20 2007
New Revision: 590762
URL: http://svn.apache.org/viewvc?rev=590762&view=rev
Log:
JCR-1200: add QValueFactory.computeAutoValues(), use it in jcr2spi SessionItemStateManager and spi-commons QValueFactoryImpl.
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/value/QValueFactoryImpl.java
jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java?rev=590762&r1=590761&r2=590762&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java Wed Oct 31 10:31:20 2007
@@ -54,7 +54,6 @@
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueFactory;
-import org.apache.jackrabbit.uuid.UUID;
import org.apache.jackrabbit.name.NameConstants;
import javax.jcr.InvalidItemStateException;
@@ -74,7 +73,6 @@
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.lock.LockException;
import java.util.Iterator;
-import java.util.Calendar;
import java.io.InputStream;
/**
@@ -712,31 +710,18 @@
// 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)) {
- // nt:base node type
- if (NameConstants.JCR_PRIMARYTYPE.equals(name)) {
- // jcr:primaryType property
- 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.");
+
+ if (NameConstants.NT_BASE.equals(declaringNT) && NameConstants.JCR_PRIMARYTYPE.equals(name)) {
+ // jcr:primaryType property
+ genValues = new QValue[]{qValueFactory.create(parent.getNodeTypeName())};
+ } else if (NameConstants.NT_BASE.equals(declaringNT) && NameConstants.JCR_MIXINTYPES.equals(name)) {
+ // jcr:mixinTypes property
+ Name[] mixins = parent.getMixinTypeNames();
+ genValues = getQValues(mixins, qValueFactory);
+ }
+ else {
+ // ask the SPI implementation for advice
+ genValues = qValueFactory.computeAutoValues(def);
}
}
return genValues;
@@ -756,9 +741,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)};
}
}
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/value/QValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/value/QValueFactoryImpl.java?rev=590762&r1=590761&r2=590762&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/value/QValueFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/value/QValueFactoryImpl.java Wed Oct 31 10:31:20 2007
@@ -16,16 +16,19 @@
*/
package org.apache.jackrabbit.value;
+import org.apache.jackrabbit.name.NameConstants;
import org.apache.jackrabbit.name.PathFactoryImpl;
import org.apache.jackrabbit.name.NameFactoryImpl;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueFactory;
import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.NameFactory;
import org.apache.jackrabbit.util.TransientFileFactory;
import org.apache.jackrabbit.util.ISO8601;
+import org.apache.jackrabbit.uuid.UUID;
import javax.jcr.RepositoryException;
import javax.jcr.ValueFormatException;
@@ -185,6 +188,24 @@
throw new IllegalArgumentException("Cannot create QValue from null value.");
}
return new BinaryQValue(value);
+ }
+
+ /**
+ * @see QValueFactory#computeAutoValues(QPropertyDefinition)
+ */
+ public QValue[] computeAutoValues(QPropertyDefinition propertyDefinition) throws RepositoryException {
+ Name nodeType = propertyDefinition.getDeclaringNodeType();
+ Name name = propertyDefinition.getName();
+
+ if (NameConstants.NT_HIERARCHYNODE.equals(nodeType) && NameConstants.JCR_CREATED.equals(name)) {
+ return new QValue[] { create(Calendar.getInstance()) };
+ } else if (NameConstants.NT_RESOURCE.equals(nodeType) && NameConstants.JCR_LASTMODIFIED.equals(name)) {
+ return new QValue[] { create(Calendar.getInstance()) };
+ } else if (NameConstants.MIX_REFERENCEABLE.equals(nodeType) && NameConstants.JCR_UUID.equals(name)) {
+ return new QValue[] { create(UUID.randomUUID().toString(), PropertyType.STRING) };
+ } else {
+ throw new RepositoryException("createFromDefinition not implemented for: " + name);
+ }
}
//--------------------------------------------------------< Inner Class >---
Modified: jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java?rev=590762&r1=590761&r2=590762&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java Wed Oct 31 10:31:20 2007
@@ -114,4 +114,15 @@
* @throws IOException
*/
public QValue create(File value) throws RepositoryException, IOException;
+
+ /**
+ * Given the <code>QPropertyDefinition</code> of an <em>autocreated</em>
+ * 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;
}