You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by cl...@apache.org on 2008/03/13 21:51:05 UTC
svn commit: r636881 - in /jackrabbit/trunk/jackrabbit-ocm/src:
main/java/org/apache/jackrabbit/ocm/manager/
main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/
main/java/org/apache/jackrabbit/ocm/query/impl/ test/test-config/nodetypes/
Author: clombart
Date: Thu Mar 13 13:51:02 2008
New Revision: 636881
URL: http://svn.apache.org/viewvc?rev=636881&view=rev
Log:
Patch for JCR-1467. Now, the mixin ocm:discriminator and ocm namespace are not mandatory for running the OCM framework.
Modified:
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/ManagerConstant.java
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java
jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryManagerImpl.java
jackrabbit/trunk/jackrabbit-ocm/src/test/test-config/nodetypes/custom_nodetypes.xml
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/ManagerConstant.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/ManagerConstant.java?rev=636881&r1=636880&r2=636881&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/ManagerConstant.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/ManagerConstant.java Thu Mar 13 13:51:02 2008
@@ -29,8 +29,8 @@
{
public static final String NT_UNSTRUCTURED = "nt:unstructured";
public static final String DISCRIMINATOR_NODE_TYPE = "ocm:discriminator";
- public static final String DISCRIMINATOR_PROPERTY_NAME = "ocm:classname";
-
+ public static final String DISCRIMINATOR_CLASS_NAME_PROPERTY = "ocm_classname";
+
public static final String FROZEN_NODE_TYPE = "nt:frozenNode";
public static final String FROZEN_PRIMARY_TYPE_PROPERTY = "jcr:frozenPrimaryType";
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java?rev=636881&r1=636880&r2=636881&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java Thu Mar 13 13:51:02 2008
@@ -24,9 +24,13 @@
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.version.VersionException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -202,10 +206,7 @@
// If required, add the discriminator node type
if (classDescriptor.hasDiscriminator()) {
- mixinTypeName = ManagerConstant.DISCRIMINATOR_NODE_TYPE;
- objectNode.addMixin(mixinTypeName);
- objectNode.setProperty(ManagerConstant.DISCRIMINATOR_PROPERTY_NAME, ReflectionUtils.getBeanClass(object)
- .getName());
+ addDiscriminatorProperty(object, objectNode);
}
@@ -222,6 +223,27 @@
simpleFieldsHelp.refreshUuidPath(session, classDescriptor, objectNode, object);
}
+ private void addDiscriminatorProperty(Object object, Node objectNode)
+ throws NoSuchNodeTypeException, VersionException,
+ ConstraintViolationException, LockException, RepositoryException,
+ ValueFormatException {
+
+ try {
+ objectNode.setProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY,
+ ReflectionUtils.getBeanClass(object).getName());
+
+ } catch (Exception e) {
+ // if it is not possible to add the CLASS_NAME_PROPERTY due to strong constraints in the
+ // node type definition, try to add the Discriminator node type.
+ String mixinTypeName;
+ mixinTypeName = ManagerConstant.DISCRIMINATOR_NODE_TYPE;
+ objectNode.addMixin(mixinTypeName);
+ objectNode.setProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY,
+ ReflectionUtils.getBeanClass(object).getName());
+ }
+
+ }
+
/**
* @see org.apache.jackrabbit.ocm.manager.objectconverter.ObjectConverter#update(javax.jcr.Session,
* java.lang.Object)
@@ -284,8 +306,8 @@
ClassDescriptor classDescriptor = null;
Node node = (Node) session.getItem(path);
- if (node.hasProperty(ManagerConstant.DISCRIMINATOR_PROPERTY_NAME)) {
- String className = node.getProperty(ManagerConstant.DISCRIMINATOR_PROPERTY_NAME).getValue().getString();
+ if (node.hasProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY)) {
+ String className = node.getProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY).getValue().getString();
classDescriptor = mapper.getClassDescriptorByClass(ReflectionUtils.forName(className));
} else {
String nodeType = node.getPrimaryNodeType().getName();
@@ -350,8 +372,8 @@
ClassDescriptor alternativeDescriptor = null;
if (classDescriptor.usesNodeTypePerHierarchyStrategy()) {
- if (node.hasProperty(ManagerConstant.DISCRIMINATOR_PROPERTY_NAME)) {
- String className = node.getProperty(ManagerConstant.DISCRIMINATOR_PROPERTY_NAME).getValue().getString();
+ if (node.hasProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY)) {
+ String className = node.getProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY).getValue().getString();
alternativeDescriptor = getClassDescriptor(ReflectionUtils.forName(className));
}
} else {
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java?rev=636881&r1=636880&r2=636881&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java Thu Mar 13 13:51:02 2008
@@ -83,7 +83,7 @@
if (classDescriptor.usesNodeTypePerHierarchyStrategy() && classDescriptor.hasDiscriminator())
{
- if (!node.hasProperty(ManagerConstant.DISCRIMINATOR_PROPERTY_NAME))
+ if (!node.hasProperty(ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY))
{
throw new ObjectContentManagerException("Class '"
+ classDescriptor.getClassName()
Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryManagerImpl.java?rev=636881&r1=636880&r2=636881&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryManagerImpl.java Thu Mar 13 13:51:02 2008
@@ -93,7 +93,7 @@
private Filter buildDiscriminatorFilter(Query query, ClassDescriptor classDescriptor) {
Filter discriminatorFilter = this.createFilter(query.getFilter().getFilterClass());
if (!classDescriptor.isAbstract() && (! classDescriptor.isInterface()) ) {
- discriminatorFilter.addJCRExpression("@" + ManagerConstant.DISCRIMINATOR_PROPERTY_NAME + "='" + classDescriptor.getClassName() + "'");
+ discriminatorFilter.addJCRExpression("@" + ManagerConstant.DISCRIMINATOR_CLASS_NAME_PROPERTY + "='" + classDescriptor.getClassName() + "'");
}
if (classDescriptor.hasDescendants()) {
Modified: jackrabbit/trunk/jackrabbit-ocm/src/test/test-config/nodetypes/custom_nodetypes.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/test/test-config/nodetypes/custom_nodetypes.xml?rev=636881&r1=636880&r2=636881&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-ocm/src/test/test-config/nodetypes/custom_nodetypes.xml (original)
+++ jackrabbit/trunk/jackrabbit-ocm/src/test/test-config/nodetypes/custom_nodetypes.xml Thu Mar 13 13:51:02 2008
@@ -26,7 +26,7 @@
<supertypes>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="ocm:classname" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
+ <propertyDefinition name="ocm_classname" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
<nodeType name="ocm:TestLockable" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
@@ -34,7 +34,6 @@
<supertype>mix:lockable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:a1" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:a2" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -44,7 +43,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:id" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:name" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -54,7 +52,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:text" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -63,7 +60,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:title" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<childNodeDefinition name="*" defaultPrimaryType="ocm:paragraph" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="true">
<requiredPrimaryTypes>
@@ -77,7 +73,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:title" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<childNodeDefinition name="*" defaultPrimaryType="ocm:paragraph" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
<requiredPrimaryTypes>
@@ -91,7 +86,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:id" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:text" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -100,7 +94,6 @@
<supertypes>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:name" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -116,7 +109,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:encoding" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:binarycontent" requiredType="Binary" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -158,7 +150,6 @@
<supertype>mix:versionable</supertype>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<propertyDefinition name="ocm:content" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>
@@ -241,7 +232,6 @@
<supertypes>
<supertype>nt:base</supertype>
</supertypes>
- <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
<childNodeDefinition name="*" defaultPrimaryType="ocm:ntdetail" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="true">
<requiredPrimaryTypes>
<requiredPrimaryType>ocm:ntdetail</requiredPrimaryType>