Index: src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java	(revision 927789)
+++ src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NodeTypeManagerImpl.java	(working copy)
@@ -25,18 +25,16 @@
 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.version.OnParentVersionAction;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
-import org.apache.jackrabbit.core.nodetype.NodeDef;
-import org.apache.jackrabbit.core.nodetype.NodeDefImpl;
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
+
 import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
-import org.apache.jackrabbit.core.nodetype.PropDef;
-import org.apache.jackrabbit.core.nodetype.PropDefImpl;
+
 import org.apache.jackrabbit.core.nodetype.xml.NodeTypeReader;
 import org.apache.jackrabbit.ocm.mapper.model.BeanDescriptor;
 import org.apache.jackrabbit.ocm.mapper.model.ChildNodeDefDescriptor;
@@ -51,555 +49,628 @@
 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.commons.QNodeDefinitionImpl;
+import org.apache.jackrabbit.spi.commons.QNodeTypeDefinitionImpl;
+import org.apache.jackrabbit.spi.commons.QPropertyDefinitionImpl;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeDefinitionImpl;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefinitionImpl;
+import org.apache.jackrabbit.spi.commons.nodetype.PropertyDefinitionImpl;
 
-/** This is the NodeTypeManager implementation for Apache Jackrabbit.
- *
+/**
+ * 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 Log log = LogFactory.getLog(NodeTypeManagerImpl.class);
+public class NodeTypeManagerImpl implements NodeTypeManager {
+	/**
+	 * Logging.
+	 */
+	private static Log log = LogFactory.getLog(NodeTypeManagerImpl.class);
 
-    /** Namespace helper class for Jackrabbit.
-     */
-    private NamespaceHelper namespaceHelper = new NamespaceHelper();
+	/**
+	 * Namespace helper class for Jackrabbit.
+	 */
+	private NamespaceHelper namespaceHelper = new NamespaceHelper();
 
-    /** Creates a new instance of NodeTypeManagerImpl. */
-    public NodeTypeManagerImpl()
-    {
-    }
+	/** Creates a new instance of NodeTypeManagerImpl. */
+	public NodeTypeManagerImpl() {
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNamespace
-     */
-    public void createNamespace(Session session, String namespace, String namespaceUri)
-    throws NamespaceCreationException
-    {
-        if (session != null)
-        {
-            try
-            {
-                session.getWorkspace().getNamespaceRegistry().registerNamespace(namespace, namespaceUri);
-                log.info("Namespace created: " +
-                        "{" + namespaceUri + "}" + namespace);
-            }
-            catch (Exception e)
-            {
-                throw new NamespaceCreationException(e);
-            }
-        }
-    }
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNamespace
+	 */
+	public void createNamespace(Session session, String namespace,
+			String namespaceUri) throws NamespaceCreationException {
+		if (session != null) {
+			try {
+				session.getWorkspace().getNamespaceRegistry()
+						.registerNamespace(namespace, namespaceUri);
+				log.info("Namespace created: " + "{" + namespaceUri + "}"
+						+ namespace);
+			} catch (Exception e) {
+				throw new NamespaceCreationException(e);
+			}
+		}
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypes
-     */
-    public void createNodeTypes(Session session, MappingDescriptor mappingDescriptor)
-    throws NodeTypeCreationException
-    {
-    	if (mappingDescriptor != null && mappingDescriptor.getClassDescriptorsByClassName().size() > 0)
-        {
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypes
+	 */
+	public void createNodeTypes(Session session,
+			MappingDescriptor mappingDescriptor)
+			throws NodeTypeCreationException {
+		if (mappingDescriptor != null
+				&& mappingDescriptor.getClassDescriptorsByClassName().size() > 0) {
 
-        }
-        else
-        {
-            throw new NodeTypeCreationException("The MappingDescriptor can't be null or empty.");
-        }
-    }
+		} else {
+			throw new NodeTypeCreationException(
+					"The MappingDescriptor can't be null or empty.");
+		}
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypes
-     */
-    public void createNodeTypes(Session session, ClassDescriptor[] classDescriptors)
-    throws NodeTypeCreationException
-    {
-        if (classDescriptors != null && classDescriptors.length > 0)
-        {
-            log.info("Trying to create " + classDescriptors.length +
-                    " JCR node types.");
-            for (int i = 0; i < classDescriptors.length; i++)
-            {
-                createSingleNodeType(session, classDescriptors[i]);
-            }
-        }
-        else
-        {
-            throw new NodeTypeCreationException("The ClassDescriptor can't be null or empty.");
-        }
-    }
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypes
+	 */
+	public void createNodeTypes(Session session,
+			ClassDescriptor[] classDescriptors)
+			throws NodeTypeCreationException {
+		if (classDescriptors != null && classDescriptors.length > 0) {
+			log.info("Trying to create " + classDescriptors.length
+					+ " JCR node types.");
+			for (int i = 0; i < classDescriptors.length; i++) {
+				createSingleNodeType(session, classDescriptors[i]);
+			}
+		} else {
+			throw new NodeTypeCreationException(
+					"The ClassDescriptor can't be null or empty.");
+		}
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypesFromMappingFiles
-     */
-    public void createNodeTypesFromMappingFiles(Session session,
-            InputStream[] mappingXmlFiles)
-            throws NodeTypeCreationException
-    {
-    }
+	/**
+	 * @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();
+	/**
+	 * @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();
 
-            if (classDescriptor.getJcrType() != null &&
-                    (classDescriptor.getJcrType().startsWith("nt:")
-                    || classDescriptor.getJcrType().startsWith("mix:")))
-            {
-                throw new NodeTypeCreationException("Namespace nt and mix are reserved namespaces. Please specify your own.");
-            }
+			if (classDescriptor.getJcrType() != null
+					&& (classDescriptor.getJcrType().startsWith("nt:") || 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()))
-            {
-                NodeTypeDef nodeTypeDef = getNodeTypeDef(classDescriptor.getJcrType(),
-                        classDescriptor.getJcrSuperTypes(),
-                        classDescriptor.getClassName());
+			if (checkSuperTypes(session.getWorkspace().getNodeTypeManager(),
+					classDescriptor.getJcrSuperTypes())) {
+				
+				Name nodeTypeName = getNodeTypeName(classDescriptor
+						.getJcrType(),classDescriptor.getClassName());
+				
+				
 
-                List propDefs = new ArrayList();
-                List nodeDefs = new ArrayList();
-                if (classDescriptor.getFieldDescriptors() != null)
-                {
-                    Iterator fieldIterator = classDescriptor.getFieldDescriptors().iterator();
-                    while (fieldIterator.hasNext())
-                    {
-                        FieldDescriptor field = (FieldDescriptor) fieldIterator.next();
-                        if (!field.isPath()) {
-                            propDefs.add(getPropertyDefinition(field.getFieldName(), field, nodeTypeDef.getName()));
-                        }
-                    }
-                }
+				List propDefs = new ArrayList();
+				List nodeDefs = new ArrayList();
+				if (classDescriptor.getFieldDescriptors() != null) {
+					Iterator fieldIterator = classDescriptor
+							.getFieldDescriptors().iterator();
+					while (fieldIterator.hasNext()) {
+						FieldDescriptor field = (FieldDescriptor) fieldIterator
+								.next();
+						if (!field.isPath()) {
+							
+							propDefs.add(
+									getPropertyDefinition(
+											field.getFieldName()
+										,field
+										,nodeTypeName //keep watch
+										
+									)
+									);
+						}
+					}
+				}
 
-                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, nodeTypeDef.getName()));
-                        } else {
-                            nodeDefs.add(getNodeDefinition(field.getFieldName(), field, nodeTypeDef.getName()));
-                        }
-                    }
-                }
+				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.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, nodeTypeDef.getName()));
-                        } else {
-                            nodeDefs.add(getNodeDefinition(field.getFieldName(), field, nodeTypeDef.getName()));
-                        }
-                    }
-                }
+				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
+										
+							));
+						}
+					}
+				}
+				
+				NodeTypeDefinition nodeTypeDef = getNodeTypeDef(classDescriptor
+						.getJcrType(), classDescriptor.getJcrSuperTypes(),
+						classDescriptor.getClassName(),nodeTypeName,propDefs,nodeDefs);
+				
+				/*
+				nodeTypeDef.setPropertyDefs((PropDef[]) 
+					propDefs.toArray(new PropDef[propDefs.size()])
+						);
+				nodeTypeDef.setChildNodeDefs((NodeDef[]) nodeDefs
+						.toArray(new NodeDef[nodeDefs.size()]));
+				
+				*/
+				
+				
+				list.add(nodeTypeDef);
+				createNodeTypesFromList(session, list);
+				log.info("Registered JCR node type '" + nodeTypeDef.getName()
+						+ "' for class '" + classDescriptor.getClassName()
+						+ "'");
+			} else {
+				throw new NodeTypeCreationException(
+						"JCR supertypes could not be resolved.");
+			}
+		} catch (Exception e) {
+			log.error("Could not create node types from class descriptor.", e);
+			throw new NodeTypeCreationException(e);
+		}
+	}
 
-                nodeTypeDef.setPropertyDefs((PropDef[]) propDefs.toArray(new PropDef[propDefs.size()]));
-                nodeTypeDef.setChildNodeDefs((NodeDef[]) nodeDefs.toArray(new NodeDef[nodeDefs.size()]));
+	/**
+	 * 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;
 
-                list.add(nodeTypeDef);
-                createNodeTypesFromList(session, list);
-                log.info("Registered JCR node type '" + nodeTypeDef.getName() +
-                        "' for class '" + classDescriptor.getClassName() + "'");
-            }
-            else
-            {
-                throw new NodeTypeCreationException("JCR supertypes could not be resolved.");
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("Could not create node types from class descriptor.", e);
-            throw new NodeTypeCreationException(e);
-        }
-    }
+		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;
+				}
+			}
+		}
 
-    /** 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;
+		return exists;
+	}
 
-        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;
-                }
-            }
-        }
+	
+	private Name getNodeTypeName(String jcrNodeType,String className) {
+		Name name = null;
 
-        return exists;
-    }
+		if (jcrNodeType != null && (!jcrNodeType.equals(""))) {
+			name = getNamespaceHelper().getName(jcrNodeType);
 
-    /** Creates a NodeTypeDef object.
-     *
-     * @param jcrNodeType Name of JCR node type
-     * @param jcrSuperTypes JCR node super types
-     * @return type
-     */
-    public NodeTypeDef getNodeTypeDef(String jcrNodeType, String jcrSuperTypes,
-            String className)
-    {
-        NodeTypeDef type = new NodeTypeDef();
-        type.setMixin(false);
+		} else {
+			name = getNamespaceHelper().getName(className);
 
-        if (jcrNodeType != null && (! jcrNodeType.equals("")))
-        {
-            type.setName(getNamespaceHelper().getName(jcrNodeType));
-        }
-        else
-        {
-            type.setName(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 NodeTypeDefinition getNodeTypeDef(String jcrNodeType,
+			String jcrSuperTypes, String className,Name jcrNodeTypeName
+			,List propDefs, List nodeDefs) {
+		Name name = jcrNodeTypeName;
+		
+		Name superTypeNames[] = getJcrSuperTypes(jcrSuperTypes);
 
-        type.setSupertypes(getJcrSuperTypes(jcrSuperTypes));
-        type.setPrimaryItemName(getNamespaceHelper().getName(jcrNodeType));
-        return type;
-    }
+		Name primaryItemName = getNamespaceHelper().getName(jcrNodeType);
+		// changed
+		QNodeTypeDefinition qNodetypeDef = new QNodeTypeDefinitionImpl(name,
+				superTypeNames, null, false, false, true, true,
+				primaryItemName, 
+				(QPropertyDefinition[] )propDefs.toArray(), 
+				(QNodeDefinition[] )nodeDefs.toArray());
 
-    /** 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 PropDefImpl getPropertyDefinition(String fieldName,
-            PropertyDefDescriptor field, Name declaringNodeType)
-    {
-        PropDefImpl property = new PropDefImpl();
+		NodeTypeDefinition nodeTypeDef = new NodeTypeDefinitionImpl(
+				qNodetypeDef, null, null);
 
-        if (field.getJcrName() != null)
-        {
-            property.setName(getNamespaceHelper().getName(field.getJcrName()));
-        	
-        }
-        else
-        {
-            property.setName(getNamespaceHelper().getName(fieldName));
-        }
+		return nodeTypeDef;
+	}
 
-        if (field.getJcrType() != null)
-        {
-            property.setRequiredType(PropertyType.valueFromName(field.getJcrType()));
-        }
-        else
-        {
-            log.info("No property type set for " + property.getName() +
-                    ". Setting 'String' type.");
-            property.setRequiredType(PropertyType.valueFromName("String"));
-        }
+	/**
+	 * 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;
 
-        property.setDeclaringNodeType(declaringNodeType);
-        property.setAutoCreated(field.isJcrAutoCreated());
-        property.setMandatory(field.isJcrMandatory());
-        property.setMultiple(field.isJcrMultiple());
+		if (field.getJcrName() != null) {
+			name = getNamespaceHelper().getName(field.getJcrName());
 
-        if (field.getJcrOnParentVersion() != null &&
-                field.getJcrOnParentVersion().length() > 0)
-        {
-            property.setOnParentVersion(OnParentVersionAction.valueFromName(field.getJcrOnParentVersion()));
-        }
+		} else {
+			name = getNamespaceHelper().getName(fieldName);
 
-        property.setProtected(field.isJcrProtected());
-        return property;
-    }
+		}
 
-    /** 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 NodeDefImpl getNodeDefinition(String fieldName,
-        ChildNodeDefDescriptor field, Name declaringNodeType) {
+		int requiredType = -1;
 
-        NodeDefImpl node = new NodeDefImpl();
+		if (field.getJcrType() != null) {
+			requiredType = PropertyType.valueFromName(field.getJcrType());
 
-        if (field.getJcrName() != null) {
-            node.setName(getNamespaceHelper().getName(field.getJcrName()));
-        } else {
-            node.setName(getNamespaceHelper().getName("*"));
-        }
+		} else {
+			log.info("No property type set for " + name
+					+ ". Setting 'String' type.");
+			requiredType = PropertyType.valueFromName("String");
 
-        if (field.getJcrType() != null) {
-            node.setRequiredPrimaryTypes(getJcrSuperTypes(field.getJcrType()));
-        }
+		}
 
-        node.setDeclaringNodeType(declaringNodeType);
-        node.setAutoCreated(field.isJcrAutoCreated());
-        node.setMandatory(field.isJcrMandatory());
-        node.setAllowsSameNameSiblings(field.isJcrSameNameSiblings());
-        node.setDefaultPrimaryType( getNamespaceHelper().getName( field.getDefaultPrimaryType() ) );
+		int onParentVersion = -1;
+		
 
-        if (field.getJcrOnParentVersion() != null
-            && field.getJcrOnParentVersion().length() > 0) {
-            node.setOnParentVersion(OnParentVersionAction.valueFromName(field.getJcrOnParentVersion()));
-        }
+		if (field.getJcrOnParentVersion() != null
+				&& field.getJcrOnParentVersion().length() > 0) {
+			onParentVersion = OnParentVersionAction.valueFromName(field
+					.getJcrOnParentVersion());
 
-        node.setProtected(field.isJcrProtected());
-        return node;
-    }
+		}
 
-    /**
-     *
-     * @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)
-    {
-    	Name[] nameSuperTypes = null;
-        if (superTypes != null && superTypes.length() > 0)
-        {
-            String[] superTypesArray = superTypes.split(",");
-            log.debug("JCR super types found: " + superTypesArray.length);
-            nameSuperTypes = new Name[superTypesArray.length];
-            for (int i = 0; i < superTypesArray.length; i++)
-            {
-                String superTypeName = superTypesArray[i].trim();
-                nameSuperTypes[i] = getNamespaceHelper().getName(superTypeName);
-                log.debug("Setting JCR super type: " + superTypeName);
-            }
-        }
+		QPropertyDefinition qPropertyDef = new QPropertyDefinitionImpl(
+					name, 
+					declaringNodeType, 
+					field.isJcrAutoCreated(), 
+					field.isJcrMandatory(), 
+					onParentVersion,
+					field.isJcrProtected(),
+					null,
+					field.isJcrMultiple(),
+					requiredType,
+					null,
+					null,
+					true,
+					true);
 
-        return nameSuperTypes;
-    }
+		
+		
+		return qPropertyDef;
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createSingleNodeTypeFromMappingFile
-     */
-    public void createSingleNodeTypeFromMappingFile(Session session,
-            InputStream mappingXmlFile, String jcrNodeType)
-            throws NodeTypeCreationException
-    {
-    }
+	/**
+	 * 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) {
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypeFromClass
-     */
-    public void createNodeTypeFromClass(Session session, Class clazz,
-            String jcrNodeType, boolean reflectSuperClasses)
-            throws NodeTypeCreationException
-    {
-    }
+		Name name = null;
+		if (field.getJcrName() != null) {
+			name = getNamespaceHelper().getName(field.getJcrName());
+			
+		} else {
+			name = getNamespaceHelper().getName("*");
+			
+		}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypesFromConfiguration
-     */
-    public void createNodeTypesFromConfiguration(Session session,
-            InputStream jcrRepositoryConfigurationFile)
-            throws OperationNotSupportedException, NodeTypeCreationException
-    {
-        try
-        {
-            NodeTypeDef[] types = NodeTypeReader.read(jcrRepositoryConfigurationFile);
+				
+		
+		int onParentVersion = -1;
+		
+		if (field.getJcrOnParentVersion() != null
+				&& field.getJcrOnParentVersion().length() > 0) {
+			onParentVersion = OnParentVersionAction.valueFromName(field
+					.getJcrOnParentVersion());
+		}
 
-            ArrayList list = new ArrayList();
-            for (int i = 0; i < types.length; i++)
-            {
-                list.add(types[i]);
-            }
+		QNodeDefinition qNodeDef = new QNodeDefinitionImpl(
+				name
+				,declaringNodeType
+				,field.isJcrAutoCreated()
+				,field.isJcrMandatory()
+				,onParentVersion
+				,field.isJcrProtected()
+				,getNamespaceHelper().getName(
+						field.getDefaultPrimaryType())
+				,getJcrSuperTypes(field.getJcrType())
+				,field.isJcrSameNameSiblings()
+		);
+		
 
-            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);
-        }
-    }
+		
+		
+				
+		return qNodeDef;
+	}
 
-    /**
-     *
-     * @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);
-    }
+	/**
+	 * 
+	 * @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();
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#removeNodeTypes
-     */
-    public void removeNodeTypesFromConfiguration(Session session, InputStream jcrRepositoryConfigurationFile)
-    throws NodeTypeRemovalException
-    {
-    	try
-        {
-            NodeTypeDef[] types = NodeTypeReader.read(jcrRepositoryConfigurationFile);
+	/**
+	 * 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) {
+		Name[] nameSuperTypes = null;
+		if (superTypes != null && superTypes.length() > 0) {
+			String[] superTypesArray = superTypes.split(",");
+			log.debug("JCR super types found: " + superTypesArray.length);
+			nameSuperTypes = new Name[superTypesArray.length];
+			for (int i = 0; i < superTypesArray.length; i++) {
+				String superTypeName = superTypesArray[i].trim();
+				nameSuperTypes[i] = getNamespaceHelper().getName(superTypeName);
+				log.debug("Setting JCR super type: " + superTypeName);
+			}
+		}
 
-            ArrayList list = new ArrayList();
-            for (int i = 0; i < types.length; i++)
-            {
-                list.add(types[i]);
-            }
+		return nameSuperTypes;
+	}
 
-            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);
-        }
-    }
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createSingleNodeTypeFromMappingFile
+	 */
+	public void createSingleNodeTypeFromMappingFile(Session session,
+			InputStream mappingXmlFile, String jcrNodeType)
+			throws NodeTypeCreationException {
+	}
 
-    private void removeNodeTypesFromList(Session session, List nodeTypes)
-    throws NodeTypeRemovalException
-    {
-        for (Iterator nodeTypeIterator = nodeTypes.iterator(); nodeTypeIterator.hasNext();)
-        {
-			NodeTypeDef nodeTypeDef = (NodeTypeDef) nodeTypeIterator.next();
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypeFromClass
+	 */
+	public void createNodeTypeFromClass(Session session, Class clazz,
+			String jcrNodeType, boolean reflectSuperClasses)
+			throws NodeTypeCreationException {
+	}
+
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#createNodeTypesFromConfiguration
+	 */
+	public void createNodeTypesFromConfiguration(Session session,
+			InputStream jcrRepositoryConfigurationFile)
+			throws OperationNotSupportedException, NodeTypeCreationException {
+		try {
+
+			QNodeTypeDefinition[] types = NodeTypeReader
+					.read(jcrRepositoryConfigurationFile);
+
+			ArrayList list = new ArrayList();
+			for (int i = 0; i < types.length; i++) {
+				list.add(types[i]);
+			}
+
+			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);
+	}
+
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#removeNodeTypes
+	 */
+	public void removeNodeTypesFromConfiguration(Session session,
+			InputStream jcrRepositoryConfigurationFile)
+			throws NodeTypeRemovalException {
+		try {
+			QNodeTypeDefinition[] types = NodeTypeReader
+					.read(jcrRepositoryConfigurationFile);
+
+			ArrayList list = new ArrayList();
+			for (int i = 0; i < types.length; i++) {
+				list.add(types[i]);
+			}
+
+			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#createSingleNodeTypeFromMappingFile
+	 */
+	public void removeNodeTypesFromMappingFile(Session session,
+			InputStream[] mappingXmlFile) throws NodeTypeRemovalException {
+	}
 
-    /**
-     * @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);
-        }
-    }
+	public void removeSingleNodeType(Session session, Name name)
+			throws NodeTypeRemovalException {
+		try {
+			getNodeTypeRegistry(session).unregisterNodeType(name);
+		} 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#removeSingleNodeType
+	 */
+	public void removeSingleNodeType(Session session, String jcrNodeType)
+			throws NodeTypeRemovalException {
+		try {
+			getNodeTypeRegistry(session).unregisterNodeType(
+					getNamespaceHelper().getName(jcrNodeType));
+		} catch (Exception e) {
+			throw new NodeTypeRemovalException(e);
+		}
+	}
 
-    /**
-     * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#getPrimaryNodeTypeNames
-     */
-    public List getPrimaryNodeTypeNames(Session session, String namespace)
-    {
-        return null;
-    }
+	/**
+	 * 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#getAllPrimaryNodeTypeNames
-     */
-    public List getAllPrimaryNodeTypeNames(Session session)
-    {
-        return null;
-    }
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#getPrimaryNodeTypeNames
+	 */
+	public List getPrimaryNodeTypeNames(Session session, String namespace) {
+		return null;
+	}
 
-    /** Getter for property namespaceHelper.
-     *
-     * @return namespaceHelper
-     */
-    public NamespaceHelper getNamespaceHelper()
-    {
-        return namespaceHelper;
-    }
+	/**
+	 * @see org.apache.jackrabbit.ocm.nodemanagement.NodeTypeManager#getAllPrimaryNodeTypeNames
+	 */
+	public List getAllPrimaryNodeTypeNames(Session session) {
+		return null;
+	}
 
-    /** Setter for property namespaceHelper.
-     *
-     * @param object namespaceHelper
-     */
-    public void setNamespaceHelper(NamespaceHelper object)
-    {
-        this.namespaceHelper = object;
-    }
+	/**
+	 * Getter for property namespaceHelper.
+	 * 
+	 * @return namespaceHelper
+	 */
+	public NamespaceHelper getNamespaceHelper() {
+		return namespaceHelper;
+	}
 
+	/**
+	 * Setter for property namespaceHelper.
+	 * 
+	 * @param object
+	 *            namespaceHelper
+	 */
+	public void setNamespaceHelper(NamespaceHelper object) {
+		this.namespaceHelper = object;
+	}
 
-    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_STRING));    	
-    }
+	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_STRING));
+	}
 }
Index: src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NamespaceHelper.java
===================================================================
--- src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NamespaceHelper.java	(revision 927789)
+++ src/main/java/org/apache/jackrabbit/ocm/nodemanagement/impl/jackrabbit/NamespaceHelper.java	(working copy)
@@ -18,7 +18,6 @@
 
 import javax.jcr.NamespaceRegistry;
 
-import org.apache.jackrabbit.core.nodetype.ItemDef;
 
 import org.apache.jackrabbit.ocm.nodemanagement.impl.BaseNamespaceHelper;
 import org.apache.jackrabbit.spi.Name;
@@ -31,7 +30,7 @@
  */
 public class NamespaceHelper extends BaseNamespaceHelper
 {
-
+	private final String ANY_NAME = "*";
     /** JCR namespace registry.
      */
     private NamespaceRegistry registry;
@@ -49,12 +48,14 @@
     public Name getName(String itemName)
     {
         Name name = null;
+        
 
         if (itemName != null && itemName.length() > 0)
         {
             if (itemName.equals("*"))
             {
-                name = ItemDef.ANY_NAME;
+                //name = ItemDef.ANY_NAME;
+            	name = NameFactoryImpl.getInstance().create(DEFAULT_NAMESPACE_URI,"*");
             }
             else
             {
