You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ar...@apache.org on 2012/06/27 15:59:59 UTC
svn commit: r1354509 - in
/jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm:
mapper/model/PropertyDefDescriptor.java nodemanagement/NodeTypeManager.java
nodemanagement/impl/NodeTypeManagerImpl.java
Author: ard
Date: Wed Jun 27 13:59:57 2012
New Revision: 1354509
URL: http://svn.apache.org/viewvc?rev=1354509&view=rev
Log:
OCM-58 make OCM jackrabbit independent. Note that I did remove some methods from the NodeTypeManager interface, but the NodeTypeManagerImpl didn't implement many of them any way. Jackrabbit dependency is now only used as scope test
Added:
jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/NodeTypeManagerImpl.java (contents, props changed)
- copied, changed from r1352024, jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java
Modified:
jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/mapper/model/PropertyDefDescriptor.java
jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/NodeTypeManager.java
Modified: jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/mapper/model/PropertyDefDescriptor.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/mapper/model/PropertyDefDescriptor.java?rev=1354509&r1=1354508&r2=1354509&view=diff
==============================================================================
--- jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/mapper/model/PropertyDefDescriptor.java (original)
+++ jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/mapper/model/PropertyDefDescriptor.java Wed Jun 27 13:59:57 2012
@@ -29,6 +29,8 @@ public interface PropertyDefDescriptor {
*/
String getJcrName();
+ String getFieldName();
+
/**
* @return Returns the property type name.
*/
Modified: jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/NodeTypeManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/NodeTypeManager.java?rev=1354509&r1=1354508&r2=1354509&view=diff
==============================================================================
--- jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/NodeTypeManager.java (original)
+++ jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/NodeTypeManager.java Wed Jun 27 13:59:57 2012
@@ -80,109 +80,15 @@ public interface NodeTypeManager {
void createNodeTypes(Session session, ClassDescriptor[] classDescriptors)
throws NodeTypeCreationException;
- /** This method creates JCR node types based on jcr-mapping xml
- * files.
- *
- * @param session Repository session
- * @param mappingXmlFiles InputStreams to jcr-mapping xml files
- * @throws NodeTypeCreationException NodeTypeCreationException
- */
- void createNodeTypesFromMappingFiles(Session session,
- InputStream[] mappingXmlFiles)
- throws NodeTypeCreationException;
-
/** This method creates a single JCR node type identified by its ClassDescriptor
* read from the jcr mapping file.
*
* @param session Repository session
* @param classDescriptor ClassDescriptor object created by jcr-mapping
- * @param jcrNodeType Name of the class that needs to be created identified
- * by its jcrNodeType name
* @throws NodeTypeCreationException NodeTypeCreationException
*/
void createSingleNodeType(Session session, ClassDescriptor classDescriptor)
throws NodeTypeCreationException;
- /** This method creates a single JCR node type identified by its jcrNodeType
- * name defined in a jcr-mapping xml file.
- *
- * @param session Repository session
- * @param mappingXmlFile InputStream to a jcr-mapping xml file
- * @param jcrNodeType Name of the class that needs to be created identified
- * by its jcrNodeType name
- * @throws NodeTypeCreationException NodeTypeCreationException
- */
- void createSingleNodeTypeFromMappingFile(Session session,
- InputStream mappingXmlFile, String jcrNodeType)
- throws NodeTypeCreationException;
-
- /** This method creates a JCR node type from a given Java Bean class by using
- * reflection. It creates required JCR property definitions from primitive
- * Java class properties using the same property name. Non-primitive class
- * properties are skipped.
- *
- * @param session Repository session
- * @param clazz Java class
- * @param jcrNodeType Name of JCR node type (including namespace)
- * @param reflectSuperClasses If true, all base classes are also reflected
- * @throws NodeTypeCreationException NodeTypeCreationException
- */
- void createNodeTypeFromClass(Session session, Class clazz,
- String jcrNodeType, boolean reflectSuperClasses)
- throws NodeTypeCreationException;
- /** This method creates JCR node types from a JCR vendor specific
- * configuration file.
- *
- * @param session Repository session
- * @param jcrRepositoryXmlConfigurationFile InputStream to file
- * @throws OperationNotSupportedException OperationNotSupportedException
- * @throws NodeTypeCreationException NodeTypeCreationException
- */
- void createNodeTypesFromConfiguration(Session session,
- InputStream jcrRepositoryConfigurationFile)
- throws OperationNotSupportedException, NodeTypeCreationException;
-
- /** This method removes all JCR node types that are defined in one to many
- * jcr-mapping XML files.
- *
- * @param session Repository session
- * @param mappingXmlFiles InputStreams to jcr-mapping xml file
- * @throws NodeTypeRemovalException NodeTypeRemovalException
- */
- void removeNodeTypesFromMappingFile(Session session, InputStream[] mappingXmlFiles)
- throws NodeTypeRemovalException;
-
- /**
- * This method removes JCR node types from a JCR vendor specific configuration file
- * @param session Repository session
- * @param jcrRepositoryConfigurationFile the file that contains the node type definition
- * @throws NodeTypeRemovalException
- */
- void removeNodeTypesFromConfiguration(Session session, InputStream jcrRepositoryConfigurationFile)
- throws NodeTypeRemovalException;
-
- /** This method removes a single JCR node type identified by its jcrNodeType
- * name.
- *
- * @param session Repository session
- * @param jcrNodeType
- * @throws NodeTypeRemovalException NodeTypeRemovalException
- */
- void removeSingleNodeType(Session session, String jcrNodeType)
- throws NodeTypeRemovalException;
-
- /** Returns the names of all node types in the repository identified by a
- * given namespace.
- *
- * @param namespace Name of nodetypes to return
- * @return list of matching JCR node types
- */
- List getPrimaryNodeTypeNames(Session session, String namespace);
-
- /** Returns a list of all JCR node types.
- *
- * @return list of all JCR node types
- */
- List getAllPrimaryNodeTypeNames(Session session);
}
Copied: jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/NodeTypeManagerImpl.java (from r1352024, jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java)
URL: http://svn.apache.org/viewvc/jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/NodeTypeManagerImpl.java?p2=jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/NodeTypeManagerImpl.java&p1=jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java&r1=1352024&r2=1354509&rev=1354509&view=diff
==============================================================================
--- jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java (original)
+++ jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/NodeTypeManagerImpl.java Wed Jun 27 13:59:57 2012
@@ -1,38 +1,19 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.ocm.nodemanagement.impl.jackrabbit;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
+package org.apache.jackrabbit.ocm.nodemanagement.impl;
+
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.nodetype.NodeTypeDefinition;
-import javax.jcr.nodetype.PropertyDefinition;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeTypeTemplate;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
import javax.jcr.version.OnParentVersionAction;
-import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
-import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
-import org.apache.jackrabbit.core.nodetype.xml.NodeTypeReader;
import org.apache.jackrabbit.ocm.mapper.model.BeanDescriptor;
import org.apache.jackrabbit.ocm.mapper.model.ChildNodeDefDescriptor;
import org.apache.jackrabbit.ocm.mapper.model.ClassDescriptor;
@@ -43,47 +24,14 @@ import org.apache.jackrabbit.ocm.mapper.
import org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager;
import org.apache.jackrabbit.ocm.nodemanagement.exception.NamespaceCreationException;
import org.apache.jackrabbit.ocm.nodemanagement.exception.NodeTypeCreationException;
-import org.apache.jackrabbit.ocm.nodemanagement.exception.NodeTypeRemovalException;
-import org.apache.jackrabbit.ocm.nodemanagement.exception.OperationNotSupportedException;
-import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.spi.QNodeDefinition;
-import org.apache.jackrabbit.spi.QNodeTypeDefinition;
-import org.apache.jackrabbit.spi.QPropertyDefinition;
-import org.apache.jackrabbit.spi.QValue;
-import org.apache.jackrabbit.spi.QValueConstraint;
-import org.apache.jackrabbit.spi.commons.nodetype.QNodeDefinitionBuilder;
-import org.apache.jackrabbit.spi.commons.nodetype.QNodeTypeDefinitionBuilder;
-import org.apache.jackrabbit.spi.commons.nodetype.QPropertyDefinitionBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** This is the NodeTypeManager implementation for Apache Jackrabbit.
- *
- * @author <a href="mailto:okiessler@apache.org">Oliver Kiessler</a>
- */
-public class NodeTypeManagerImpl implements NodeTypeManager
-{
- /**
- * Logging.
- */
- private static Logger log = LoggerFactory.getLogger(NodeTypeManagerImpl.class);
- private static final boolean debug = false;
-
- /** Namespace helper class for Jackrabbit.
- */
- private NamespaceHelper namespaceHelper = new NamespaceHelper();
-
- /** Creates a new instance of NodeTypeManagerImpl. */
- public NodeTypeManagerImpl()
- {
- }
+public class NodeTypeManagerImpl implements NodeTypeManager {
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNamespace
- */
- public void createNamespace(Session session, String namespace, String namespaceUri)
- throws NamespaceCreationException
- {
+ private static Logger log = LoggerFactory.getLogger(NodeTypeManagerImpl.class);
+ @Override
+ public void createNamespace(final Session session, final String namespace, final String namespaceUri) throws NamespaceCreationException {
if (session != null)
{
try
@@ -99,15 +47,13 @@ public class NodeTypeManagerImpl impleme
}
}
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypes
- */
- public void createNodeTypes(Session session, MappingDescriptor mappingDescriptor)
- throws NodeTypeCreationException
- {
- if (mappingDescriptor != null && mappingDescriptor.getClassDescriptorsByClassName().size() > 0)
- {
-
+ @Override
+ public void createNodeTypes(final Session session, final MappingDescriptor mappingDescriptor) throws NodeTypeCreationException {
+ if (mappingDescriptor != null && mappingDescriptor.getClassDescriptorsByClassName().size() > 0)
+ {
+ final Collection classDescriptorObjects = mappingDescriptor.getClassDescriptorsByClassName().values();
+ final ClassDescriptor[] classDescriptors = (ClassDescriptor[])classDescriptorObjects.toArray(new ClassDescriptor[classDescriptorObjects.size()]);
+ createNodeTypes(session, classDescriptors);
}
else
{
@@ -115,12 +61,8 @@ public class NodeTypeManagerImpl impleme
}
}
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypes
- */
- public void createNodeTypes(Session session, ClassDescriptor[] classDescriptors)
- throws NodeTypeCreationException
- {
+ @Override
+ public void createNodeTypes(final Session session, final ClassDescriptor[] classDescriptors) throws NodeTypeCreationException {
if (classDescriptors != null && classDescriptors.length > 0)
{
log.info("Trying to create " + classDescriptors.length +
@@ -136,519 +78,235 @@ public class NodeTypeManagerImpl impleme
}
}
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypesFromMappingFiles
- */
- public void createNodeTypesFromMappingFiles(Session session,
- InputStream[] mappingXmlFiles)
- throws NodeTypeCreationException
- {
- }
-
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createSingleNodeType
- */
- public void createSingleNodeType(Session session, ClassDescriptor classDescriptor)
- throws NodeTypeCreationException
- {
- try
- {
- getNamespaceHelper().setRegistry(session.getWorkspace().getNamespaceRegistry());
- ArrayList list = new ArrayList();
-
+ @Override
+ public void createSingleNodeType(final Session session, final ClassDescriptor classDescriptor) throws NodeTypeCreationException {
+ try {
if (classDescriptor.getJcrType() != null &&
(classDescriptor.getJcrType().startsWith("nt:")
- || classDescriptor.getJcrType().startsWith("mix:")))
- {
+ || classDescriptor.getJcrType().startsWith("mix:"))) {
throw new NodeTypeCreationException("Namespace nt and mix are reserved namespaces. Please specify your own.");
}
if (checkSuperTypes(session.getWorkspace().getNodeTypeManager(),
- classDescriptor.getJcrSuperTypes()))
- {
- Name nodeTypeName = getNodeTypeName(classDescriptor.getJcrType(),
- classDescriptor.getClassName());
+ classDescriptor.getJcrSuperTypes())) {
- List<QPropertyDefinition> propDefs = new ArrayList<QPropertyDefinition>();
- List<QNodeDefinition> nodeDefs = new ArrayList<QNodeDefinition>();
- if (classDescriptor.getFieldDescriptors() != null)
- {
+ javax.jcr.nodetype.NodeTypeManager ntm = session.getWorkspace().getNodeTypeManager();
+ final NodeTypeTemplate ntt = ntm.createNodeTypeTemplate();
+
+ if (classDescriptor.getJcrType() == null) {
+ ntt.setName(classDescriptor.getClassName());
+ } else {
+ ntt.setName(classDescriptor.getJcrType());
+ }
+ ntt.setAbstract(classDescriptor.isAbstract());
+ if (classDescriptor.getJcrSuperTypes() != null && classDescriptor.getJcrSuperTypes().length() > 0) {
+ String[] superTypesArray = classDescriptor.getJcrSuperTypes().split(",");
+ //TODO combine the mixins here as well as supertypes
+ // Add classDescriptor.getJcrMixinTypes() to superTypesArray
+ for (String s : classDescriptor.getJcrMixinTypes()) {
+ System.out.println(s);
+ }
+ ntt.setDeclaredSuperTypeNames(superTypesArray);
+ }
+ // should we also support mixins to be created?
+ ntt.setMixin(false);
+ ntt.setQueryable(true);
+ ntt.setOrderableChildNodes(true);
+
+ final List nodeDefinitionTemplates = ntt.getNodeDefinitionTemplates();
+ final List propertyDefinitionTemplates = ntt.getPropertyDefinitionTemplates();
+
+ if (classDescriptor.getFieldDescriptors() != null) {
Iterator fieldIterator = classDescriptor.getFieldDescriptors().iterator();
- while (fieldIterator.hasNext())
- {
+ while (fieldIterator.hasNext()) {
FieldDescriptor field = (FieldDescriptor) fieldIterator.next();
if (!field.isPath()) {
- propDefs.add(getPropertyDefinition(field.getFieldName(), field, nodeTypeName));
+ final PropertyDefinitionTemplate pdt = getPropertyDefinition(ntm, session.getValueFactory(), field);
+ // add the just created pdt to the nodetypetemplate
+ propertyDefinitionTemplates.add(pdt);
}
}
- }
- if (classDescriptor.getBeanDescriptors() != null) {
- Iterator beanIterator = classDescriptor.getBeanDescriptors().iterator();
- while (beanIterator.hasNext()) {
- BeanDescriptor field = (BeanDescriptor) beanIterator.next();
- if (this.isPropertyType(field.getJcrType())) {
- propDefs.add(getPropertyDefinition(field.getFieldName(), field, nodeTypeName));
- } else {
- nodeDefs.add(getNodeDefinition(field.getFieldName(), field, nodeTypeName));
+ if (classDescriptor.getBeanDescriptors() != null) {
+ Iterator beanIterator = classDescriptor.getBeanDescriptors().iterator();
+ while (beanIterator.hasNext()) {
+ BeanDescriptor field = (BeanDescriptor) beanIterator.next();
+ if (this.isPropertyType(field.getJcrType())) {
+ final PropertyDefinitionTemplate pdt = getPropertyDefinition(ntm, session.getValueFactory(), field);
+ // add the just created pdt to the nodetypetemplate
+ propertyDefinitionTemplates.add(pdt);
+ } else {
+ final NodeDefinitionTemplate ndt = getNodeDefinition(ntm, session.getValueFactory(), field);
+ // add the just created pdt to the nodetypetemplate
+ nodeDefinitionTemplates.add(ndt);
+ }
}
}
- }
- if (classDescriptor.getCollectionDescriptors() != null) {
- Iterator collectionIterator = classDescriptor.getCollectionDescriptors().iterator();
- while (collectionIterator.hasNext()) {
- CollectionDescriptor field = (CollectionDescriptor) collectionIterator.next();
- if (this.isPropertyType(field.getJcrType())) {
- propDefs.add(getPropertyDefinition(field.getFieldName(), field, nodeTypeName));
- } else {
- nodeDefs.add(getNodeDefinition(field.getFieldName(), field, nodeTypeName));
+ if (classDescriptor.getCollectionDescriptors() != null) {
+ Iterator collectionIterator = classDescriptor.getCollectionDescriptors().iterator();
+ while (collectionIterator.hasNext()) {
+ CollectionDescriptor field = (CollectionDescriptor) collectionIterator.next();
+ if (this.isPropertyType(field.getJcrType())) {
+ final PropertyDefinitionTemplate pdt = getPropertyDefinition(ntm, session.getValueFactory(), field);
+ // add the just created pdt to the nodetypetemplate
+ propertyDefinitionTemplates.add(pdt);
+ } else {
+ final NodeDefinitionTemplate ndt = getNodeDefinition(ntm, session.getValueFactory(), field);
+ // add the just created pdt to the nodetypetemplate
+ nodeDefinitionTemplates.add(ndt);
+ }
}
}
+ ntm.registerNodeType(ntt, false);
+ log.info("Registered JCR node type '" + ntt.getName() +
+ "' for class '" + classDescriptor.getClassName() + "'");
}
-
- QNodeTypeDefinition nodeTypeDef = getNodeTypeDef(
- classDescriptor.getJcrType(),
- classDescriptor.getJcrSuperTypes(),
- classDescriptor.getClassName(),
- nodeTypeName,
- propDefs,
- nodeDefs,
- classDescriptor.getJcrMixinTypes(),
- classDescriptor.isAbstract(),
- //TODO:is this correkt, how to decide whether mixin or not?
- classDescriptor.isInterface());
-
- list.add(nodeTypeDef);
- createNodeTypesFromList(session, list);
- log.info("Registered JCR node type '" + nodeTypeDef.getName() +
- "' for class '" + classDescriptor.getClassName() + "'");
- }
- else
- {
+ } else {
throw new NodeTypeCreationException("JCR supertypes could not be resolved.");
}
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
log.error("Could not create node types from class descriptor.", e);
throw new NodeTypeCreationException(e);
}
}
- /** Checks if all JCR super types for a given node type exist.
- *
- * @param ntMgr NodeTypeManager
- * @param superTypes Comma separated String with JCR node types
- * @return true/false
- */
- private boolean checkSuperTypes(javax.jcr.nodetype.NodeTypeManager ntMgr,
- String superTypes)
- {
- boolean exists = true;
-
- if (superTypes != null && superTypes.length() > 0)
- {
- String[] superTypesArray = superTypes.split(",");
- log.debug("JCR super types found: " + superTypesArray.length);
- for (int i = 0; i < superTypesArray.length; i++)
- {
- try
- {
- ntMgr.getNodeType(superTypesArray[i]);
- }
- catch (Exception e)
- {
- log.error("JCR super type '" + superTypesArray[i] + "' does not exist!");
- exists = false;
- break;
- }
- }
- }
-
- return exists;
- }
-
- private Name getNodeTypeName(String jcrNodeType,String className) {
- Name name = null;
-
- if (jcrNodeType != null && (!jcrNodeType.equals(""))) {
- name = getNamespaceHelper().getName(jcrNodeType);
-
- } else {
- name = getNamespaceHelper().getName(className);
-
- }
- return name;
- }
-
- /** Creates a NodeTypeDef object.
- *
- * @param jcrNodeType Name of JCR node type
- * @param jcrSuperTypes JCR node super types
- * @return type
- */
- public QNodeTypeDefinition getNodeTypeDef(String jcrNodeType, String jcrSuperTypes, String className,
- Name jcrNodeTypeName, List<QPropertyDefinition> propDefs, List<QNodeDefinition> nodeDefs,
- String[] jcrMixinTypes, boolean isAbstract, boolean isMixin)
- {
- QNodeTypeDefinitionBuilder ntdb = new QNodeTypeDefinitionBuilder();
- ntdb.setAbstract(isAbstract);
- ntdb.setChildNodeDefs(nodeDefs.toArray(QNodeDefinition.EMPTY_ARRAY));
- //ntdb.setMixin(classDescriptor.isAbstract());
- ntdb.setMixin(isMixin);
- ntdb.setName(jcrNodeTypeName);
- ntdb.setOrderableChildNodes(false);
- //ntdb.setPrimaryItemName(primaryItemName);
- ntdb.setPropertyDefs(propDefs.toArray(QPropertyDefinition.EMPTY_ARRAY));
- ntdb.setQueryable(true);
- ntdb.setSupertypes( getJcrSuperTypes(jcrSuperTypes) );
- ntdb.setSupportedMixinTypes( getJcrMixinTypes(jcrMixinTypes) );
-
- return ntdb.build();
- }
-
- /** Creates a PropDefImpl object.
- *
- * @param fieldName The name of the field
- * @param field property definition descriptor
- * @param declaringNodeType Node Type QName where the property belongs to
- * @return property
- */
- public QPropertyDefinition getPropertyDefinition(String fieldName,
- PropertyDefDescriptor field, Name declaringNodeType)
- {
- Name name = null;
-
- if (field.getJcrName() != null)
- {
- name = getNamespaceHelper().getName(field.getJcrName());
- }
- else
- {
- name = getNamespaceHelper().getName(fieldName);
- }
+ private NodeDefinitionTemplate getNodeDefinition(final javax.jcr.nodetype.NodeTypeManager ntm,
+ final ValueFactory valueFactory,
+ final ChildNodeDefDescriptor field) throws RepositoryException {
- int requiredType = PropertyType.UNDEFINED;
- if (field.getJcrType() != null)
- {
- requiredType = PropertyType.valueFromName(field.getJcrType());
- }
- else
- {
- log.info("No property type set for " + name.getLocalName() +
- ". Setting 'String' type.");
- requiredType = PropertyType.STRING;
+ final NodeDefinitionTemplate ndt = ntm.createNodeDefinitionTemplate();
+ if (field.getJcrName() != null) {
+ ndt.setName(field.getJcrName());
+ } else {
+ ndt.setName("*");
}
int onParentVersion = OnParentVersionAction.IGNORE;
- if (field.getJcrOnParentVersion() != null &&
- field.getJcrOnParentVersion().length() > 0)
- {
+ if (field.getJcrOnParentVersion() != null
+ && field.getJcrOnParentVersion().length() > 0) {
onParentVersion = OnParentVersionAction.valueFromName(field.getJcrOnParentVersion());
}
+ ndt.setOnParentVersion(onParentVersion);
+ ndt.setSameNameSiblings(field.isJcrSameNameSiblings());
- QPropertyDefinitionBuilder pdb = new QPropertyDefinitionBuilder();
- pdb.setAutoCreated(field.isJcrAutoCreated());
- pdb.setAvailableQueryOperators(new String[0]);
- pdb.setDeclaringNodeType(declaringNodeType);
- pdb.setDefaultValues(QValue.EMPTY_ARRAY);
- pdb.setFullTextSearchable(false);
- pdb.setMandatory(field.isJcrMandatory());
- pdb.setMultiple(field.isJcrMultiple());
- pdb.setName(name);
- pdb.setOnParentVersion(onParentVersion);
- pdb.setProtected(field.isJcrProtected());
- pdb.setQueryOrderable(false);
- pdb.setRequiredType(requiredType);
- pdb.setValueConstraints(QValueConstraint.EMPTY_ARRAY);
-
- return pdb.build();
- }
-
- /** Creates a NodeDefImpl object.
- *
- * @param fieldName Name of the field
- * @param field child node definition descriptor
- * @param declaringNodeType Node Type QName where the chid node belongs to
- * @return child node definition
- */
- private QNodeDefinition getNodeDefinition(String fieldName,
- ChildNodeDefDescriptor field, Name declaringNodeType) {
-
- Name name = null;
-
+ ndt.setAutoCreated(field.isJcrAutoCreated());
+ ndt.setDefaultPrimaryTypeName(field.getDefaultPrimaryType());
+ ndt.setMandatory(field.isJcrMandatory());
+ ndt.setProtected(field.isJcrProtected());
+ ndt.setRequiredPrimaryTypeNames(getJcrSuperTypes(field.getJcrType()));
+
+ return ndt;
+ }
+
+ private PropertyDefinitionTemplate getPropertyDefinition(final javax.jcr.nodetype.NodeTypeManager ntm,
+ final ValueFactory valueFactory,
+ final PropertyDefDescriptor field) throws RepositoryException {
+ final PropertyDefinitionTemplate pdt = ntm.createPropertyDefinitionTemplate();
if (field.getJcrName() != null) {
- name = getNamespaceHelper().getName(field.getJcrName());
+ pdt.setName(field.getJcrName());
} else {
- name = getNamespaceHelper().getName("*");
+ pdt.setName(field.getFieldName());
}
- int onParentVersion = OnParentVersionAction.IGNORE;
+ if (field.getJcrType() != null) {
+ try {
+ pdt.setRequiredType(PropertyType.valueFromName(field.getJcrType()));
+ } catch (IllegalArgumentException e) {
+ log.warn("Invalid property type '{}' for '{}'. Set default to String type", field.getJcrType(), field.getJcrName());
+ pdt.setRequiredType(PropertyType.STRING);
+ }
+ } else {
+ log.info("No property type set for {}. Setting 'String' type.", field.getJcrName());
+ pdt.setRequiredType(PropertyType.STRING);
- if (field.getJcrOnParentVersion() != null
- && field.getJcrOnParentVersion().length() > 0) {
+ }
+ int onParentVersion = OnParentVersionAction.IGNORE;
+ if (field.getJcrOnParentVersion() != null &&
+ field.getJcrOnParentVersion().length() > 0) {
onParentVersion = OnParentVersionAction.valueFromName(field.getJcrOnParentVersion());
}
+ pdt.setOnParentVersion(onParentVersion);
- QNodeDefinitionBuilder ndb = new QNodeDefinitionBuilder();
- ndb.setAllowsSameNameSiblings(field.isJcrSameNameSiblings());
- ndb.setAutoCreated(field.isJcrAutoCreated());
- ndb.setDeclaringNodeType(declaringNodeType);
- ndb.setDefaultPrimaryType(getNamespaceHelper().getName(field.getDefaultPrimaryType()));
- ndb.setMandatory(field.isJcrMandatory());
- ndb.setName(name);
- ndb.setOnParentVersion(onParentVersion);
- ndb.setProtected(field.isJcrProtected());
- ndb.setRequiredPrimaryTypes(getJcrSuperTypes(field.getJcrType()));
-
- return ndb.build();
- }
-
- /**
- *
- * @param propDef
- * @return
- */
- protected String showPropertyDefinition(PropertyDefinition propDef)
- {
- StringBuffer sb = new StringBuffer();
- sb.append("----");
- sb.append("\nName: " + propDef.getName());
- sb.append("\nAutocreated: " + propDef.isAutoCreated());
- sb.append("\nMandatory: " + propDef.isMandatory());
- sb.append("\n----");
- return sb.toString();
- }
-
- /** Creates a QName array from a comma separated list of JCR super types in
- * a given String.
- *
- * @param superTypes JCR super types
- * @return qNameSuperTypes
- */
- public Name[] getJcrSuperTypes(String superTypes)
- {
- return getNames(superTypes.split(","), "super type");
- }
-
+ pdt.setAutoCreated(field.isJcrAutoCreated());
+ pdt.setAvailableQueryOperators(new String[0]);
- public Name[] getJcrMixinTypes(String[] jcrMixinTypes)
- {
- return getNames(jcrMixinTypes, "mixin type");
- }
-
-
- private Name[] getNames(String[] jcrTypeNames, String logTypeKind)
- {
- Name[] names = null;
- if (jcrTypeNames != null && jcrTypeNames.length > 0)
- {
- log.debug("JCR " + logTypeKind + "'s types found: " + jcrTypeNames.length);
- names = new Name[jcrTypeNames.length];
- for (int i = 0; i < jcrTypeNames.length; i++)
- {
- String superTypeName = jcrTypeNames[i].trim();
- names[i] = getNamespaceHelper().getName(superTypeName);
- log.debug("Setting JCR " + logTypeKind + ": " + superTypeName);
+ pdt.setFullTextSearchable(true);
+ pdt.setMandatory(field.isJcrMandatory());
+ pdt.setMultiple(field.isJcrMultiple());
+ pdt.setOnParentVersion(onParentVersion);
+ pdt.setProtected(field.isJcrProtected());
+ pdt.setQueryOrderable(true);
+
+ if (field instanceof FieldDescriptor) {
+ FieldDescriptor f = (FieldDescriptor) field;
+ if (f.getJcrDefaultValue() != null) {
+ if (pdt.getRequiredType() == PropertyType.STRING) {
+ Value[] vals = {valueFactory.createValue(f.getJcrDefaultValue())};
+ pdt.setDefaultValues(vals);
+ } else {
+ log.warn("Can only set default value for String properties. Skip for field '{}'", field.getJcrName());
+ }
}
+ pdt.setValueConstraints(f.getJcrValueConstraints());
}
- return names;
+ return pdt;
}
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createSingleNodeTypeFromMappingFile
- */
- public void createSingleNodeTypeFromMappingFile(Session session,
- InputStream mappingXmlFile, String jcrNodeType)
- throws NodeTypeCreationException
- {
- }
-
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypeFromClass
+ /** Checks if all JCR super types for a given node type exist.
+ *
+ * @param ntMgr NodeTypeManager
+ * @param superTypes Comma separated String with JCR node types
+ * @return returns <code>false</code> if one of the supertypes does not exist, otherwise returns <code>true</code>
*/
- public void createNodeTypeFromClass(Session session, Class clazz,
- String jcrNodeType, boolean reflectSuperClasses)
- throws NodeTypeCreationException
+ private boolean checkSuperTypes(javax.jcr.nodetype.NodeTypeManager ntMgr,
+ String superTypes)
{
- }
+ boolean exists = true;
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypesFromConfiguration
- */
- public void createNodeTypesFromConfiguration(Session session,
- InputStream jcrRepositoryConfigurationFile)
- throws OperationNotSupportedException, NodeTypeCreationException
- {
- try
+ if (superTypes != null && superTypes.length() > 0)
{
- QNodeTypeDefinition[] types = NodeTypeReader.read(jcrRepositoryConfigurationFile);
-
- ArrayList list = new ArrayList();
- for (int i = 0; i < types.length; i++)
+ String[] superTypesArray = superTypes.split(",");
+ log.debug("JCR super types found: " + superTypesArray.length);
+ for (int i = 0; i < superTypesArray.length; i++)
{
- list.add(types[i]);
+ try
+ {
+ ntMgr.getNodeType(superTypesArray[i]);
+ }
+ catch (Exception e)
+ {
+ log.error("JCR super type '" + superTypesArray[i] + "' does not exist!");
+ exists = false;
+ break;
+ }
}
-
- createNodeTypesFromList(session, list);
- log.info("Registered " + list.size() + " nodetypes from xml configuration file.");
- }
- catch (Exception e)
- {
- log.error("Could not create node types from configuration file.", e);
- throw new NodeTypeCreationException(e);
- }
- }
-
- /**
- *
- * @param session
- * @param nodeTypes
- * @throws org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException
- * @throws javax.jcr.RepositoryException
- */
- private void createNodeTypesFromList(Session session, List nodeTypes)
- throws InvalidNodeTypeDefException, RepositoryException
- {
- getNodeTypeRegistry(session).registerNodeTypes(nodeTypes);
- }
-
- public void removeNodeTypesFromConfiguration(Session session, InputStream jcrRepositoryConfigurationFile)
- throws NodeTypeRemovalException
- {
- try
- {
- QNodeTypeDefinition[] types = NodeTypeReader.read(jcrRepositoryConfigurationFile);
-
- ArrayList list = new ArrayList();
- list.addAll(Arrays.asList(types));
-
- removeNodeTypesFromList(session, list);
- log.info("Registered " + list.size() + " nodetypes from xml configuration file.");
- }
- catch (Exception e)
- {
- log.error("Could not create node types from configuration file.", e);
- throw new NodeTypeRemovalException(e);
- }
- }
-
- private void removeNodeTypesFromList(Session session, List nodeTypes)
- throws NodeTypeRemovalException
- {
- for (Iterator nodeTypeIterator = nodeTypes.iterator(); nodeTypeIterator.hasNext();)
- {
- NodeTypeDefinition nodeTypeDef = (NodeTypeDefinition) nodeTypeIterator.next();
- this.removeSingleNodeType(session, nodeTypeDef.getName());
-
- }
-
- }
-
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createSingleNodeTypeFromMappingFile
- */
- public void removeNodeTypesFromMappingFile(Session session, InputStream[] mappingXmlFile)
- throws NodeTypeRemovalException
- {
- }
-
- public void removeSingleNodeType(Session session, Name name)
- throws NodeTypeRemovalException
- {
- try
- {
- getNodeTypeRegistry(session).unregisterNodeType(name);
- }
- catch (Exception e)
- {
- throw new NodeTypeRemovalException(e);
}
- }
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#removeSingleNodeType
- */
- public void removeSingleNodeType(Session session, String jcrNodeType)
- throws NodeTypeRemovalException
- {
- try
- {
- getNodeTypeRegistry(session).unregisterNodeType(getNamespaceHelper().getName(jcrNodeType));
- }
- catch (Exception e)
- {
- throw new NodeTypeRemovalException(e);
- }
- }
-
- /** Returns the jackrabbit NodeTypeRegistry from an open session.
- *
- * @param session Repository session
- * @return nodeTypeRegistry
- */
- private NodeTypeRegistry getNodeTypeRegistry(Session session)
- throws RepositoryException
- {
- Workspace wsp = session.getWorkspace();
- javax.jcr.nodetype.NodeTypeManager ntMgr = wsp.getNodeTypeManager();
- NodeTypeRegistry ntReg =
- ((org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl) ntMgr).getNodeTypeRegistry();
- return ntReg;
- }
-
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#getPrimaryNodeTypeNames
- */
- public List getPrimaryNodeTypeNames(Session session, String namespace)
- {
- return null;
- }
-
- /**
- * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#getAllPrimaryNodeTypeNames
- */
- public List getAllPrimaryNodeTypeNames(Session session)
- {
- return null;
- }
-
- /** Getter for property namespaceHelper.
- *
- * @return namespaceHelper
- */
- public NamespaceHelper getNamespaceHelper()
- {
- return namespaceHelper;
+ return exists;
}
- /** Setter for property namespaceHelper.
- *
- * @param object namespaceHelper
- */
- public void setNamespaceHelper(NamespaceHelper object)
+ public String[] getJcrSuperTypes(String superTypes)
{
- this.namespaceHelper = object;
+ return superTypes.split(",");
}
-
private boolean isPropertyType(String type)
{
- return (type.equals(PropertyType.TYPENAME_BINARY) ||
- type.equals(PropertyType.TYPENAME_BOOLEAN) ||
- type.equals(PropertyType.TYPENAME_DATE) ||
- type.equals(PropertyType.TYPENAME_DOUBLE) ||
- type.equals(PropertyType.TYPENAME_LONG) ||
- type.equals(PropertyType.TYPENAME_NAME) ||
- type.equals(PropertyType.TYPENAME_PATH) ||
- type.equals(PropertyType.TYPENAME_REFERENCE) ||
- type.equals(PropertyType.TYPENAME_WEAKREFERENCE) ||
- type.equals(PropertyType.TYPENAME_DECIMAL) ||
- type.equals(PropertyType.TYPENAME_URI) ||
- type.equals(PropertyType.TYPENAME_STRING));
+ return (type.equals(PropertyType.TYPENAME_BINARY) ||
+ type.equals(PropertyType.TYPENAME_BOOLEAN) ||
+ type.equals(PropertyType.TYPENAME_DATE) ||
+ type.equals(PropertyType.TYPENAME_DOUBLE) ||
+ type.equals(PropertyType.TYPENAME_LONG) ||
+ type.equals(PropertyType.TYPENAME_NAME) ||
+ type.equals(PropertyType.TYPENAME_PATH) ||
+ type.equals(PropertyType.TYPENAME_REFERENCE) ||
+ type.equals(PropertyType.TYPENAME_WEAKREFERENCE) ||
+ type.equals(PropertyType.TYPENAME_DECIMAL) ||
+ type.equals(PropertyType.TYPENAME_URI) ||
+ type.equals(PropertyType.TYPENAME_STRING));
}
}
Propchange: jackrabbit/commons/ocm/trunk/src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/NodeTypeManagerImpl.java
------------------------------------------------------------------------------
svn:eol-style = native