You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by st...@apache.org on 2004/08/30 18:15:18 UTC

cvs commit: jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml DocViewImportHandler.java DocViewSAXEventGenerator.java ImportHandler.java SysViewImportHandler.java SysViewSAXEventGenerator.java

stefan      2004/08/30 09:15:18

  Modified:    proposals/jcrri/src/org/apache/slide/jcr/core
                        HierarchyManagerImpl.java InternalValue.java
                        ItemImpl.java ItemManager.java
                        NoPrefixDeclaredException.java NodeImpl.java
                        Path.java PropertyImpl.java QName.java
                        RepositoryImpl.java UnknownPrefixException.java
               proposals/jcrri/src/org/apache/slide/jcr/core/nodetype
                        NodeDefImpl.java NodeTypeDefStore.java
                        NodeTypeImpl.java NodeTypeManagerImpl.java
                        PropertyDefImpl.java
               proposals/jcrri/src/org/apache/slide/jcr/core/observation
                        EventImpl.java ObservationManagerFactory.java
               proposals/jcrri/src/org/apache/slide/jcr/core/version
                        FrozenNode.java VersionHistoryImpl.java
                        VersionImpl.java VersionManager.java
               proposals/jcrri/src/org/apache/slide/jcr/core/xml
                        DocViewImportHandler.java
                        DocViewSAXEventGenerator.java ImportHandler.java
                        SysViewImportHandler.java
                        SysViewSAXEventGenerator.java
  Log:
  jcrri: cleaning up handling/validation of qualified names & name-related exceptions
  
  Revision  Changes    Path
  1.9       +2 -2      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManagerImpl.java
  
  Index: HierarchyManagerImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManagerImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- HierarchyManagerImpl.java	18 Aug 2004 13:16:27 -0000	1.8
  +++ HierarchyManagerImpl.java	30 Aug 2004 16:15:15 -0000	1.9
  @@ -55,7 +55,7 @@
       public String safeGetJCRPath(Path path) {
   	try {
   	    return path.toJCRPath(nsResolver);
  -	} catch (RepositoryException re) {
  +	} catch (NoPrefixDeclaredException npde) {
   	    log.error("failed to convert " + path.toString() + " to JCR path.");
   	    // return string representation of internal path as a fallback
   	    return path.toString();
  
  
  
  1.13      +15 -3     jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/InternalValue.java
  
  Index: InternalValue.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/InternalValue.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- InternalValue.java	27 Aug 2004 09:28:46 -0000	1.12
  +++ InternalValue.java	30 Aug 2004 16:15:15 -0000	1.13
  @@ -91,6 +91,8 @@
   	    case PropertyType.NAME:
   		try {
   		    return new InternalValue(QName.fromJCRName(value.getString(), nsResolver));
  +		} catch (IllegalNameException ine) {
  +		    throw new ValueFormatException(ine.getMessage());
   		} catch (UnknownPrefixException upe) {
   		    throw new ValueFormatException(upe.getMessage());
   		}
  @@ -252,9 +254,19 @@
   	    case PropertyType.REFERENCE:
   		return ReferenceValue.valueOf(((UUID) val).toString());
   	    case PropertyType.PATH:
  -		return PathValue.valueOf(((Path) val).toJCRPath(nsResolver));
  +		try {
  +		    return PathValue.valueOf(((Path) val).toJCRPath(nsResolver));
  +		} catch (NoPrefixDeclaredException npde) {
  +		    // should never get here...
  +		    throw new RepositoryException("internal error: encountered unregistered namespace", npde);
  +		}
   	    case PropertyType.NAME:
  -		return NameValue.valueOf(((QName) val).toJCRName(nsResolver));
  +		try {
  +		    return NameValue.valueOf(((QName) val).toJCRName(nsResolver));
  +		} catch (NoPrefixDeclaredException npde) {
  +		    // should never get here...
  +		    throw new RepositoryException("internal error: encountered unregistered namespace", npde);
  +		}
   	    case PropertyType.STRING:
   		return new StringValue((String) val);
   	    default:
  
  
  
  1.22      +18 -2     jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemImpl.java
  
  Index: ItemImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemImpl.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- ItemImpl.java	27 Aug 2004 09:28:46 -0000	1.21
  +++ ItemImpl.java	30 Aug 2004 16:15:15 -0000	1.22
  @@ -532,6 +532,15 @@
   	return itemMgr.safeGetJCRPath(id);
       }
   
  +    /**
  +     * Same as <code>{@link Item#getName()}</code> except that
  +     * this method returns a <code>QName</code> instead of a
  +     * <code>String</code>.
  +     * @return the name of this item as <code>QName</code>
  +     * @throws RepositoryException if an error occurs.
  +     */
  +    public abstract QName getQName() throws RepositoryException;
  +
       //----------------------------------------------------< ItemStateListener >
       /**
        * @see ItemStateListener#stateCreated
  @@ -993,7 +1002,14 @@
        * @see Item#getPath
        */
       public String getPath() throws RepositoryException {
  -	return getPrimaryPath().toJCRPath(session.getNamespaceResolver());
  +	try {
  +	    return getPrimaryPath().toJCRPath(session.getNamespaceResolver());
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace";
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
  +	}
       }
   
       /**
  
  
  
  1.15      +2 -2      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemManager.java
  
  Index: ItemManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemManager.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- ItemManager.java	27 Aug 2004 09:28:46 -0000	1.14
  +++ ItemManager.java	30 Aug 2004 16:15:15 -0000	1.15
  @@ -508,7 +508,7 @@
       String safeGetJCRPath(Path path) {
   	try {
   	    return path.toJCRPath(session.getNamespaceResolver());
  -	} catch (RepositoryException re) {
  +	} catch (NoPrefixDeclaredException npde) {
   	    log.error("failed to convert " + path.toString() + " to JCR path.");
   	    // return string representation of internal path as a fallback
   	    return path.toString();
  
  
  
  1.9       +3 -3      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NoPrefixDeclaredException.java
  
  Index: NoPrefixDeclaredException.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NoPrefixDeclaredException.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- NoPrefixDeclaredException.java	2 Aug 2004 16:21:04 -0000	1.8
  +++ NoPrefixDeclaredException.java	30 Aug 2004 16:15:15 -0000	1.9
  @@ -15,7 +15,7 @@
    */
   package org.apache.slide.jcr.core;
   
  -import javax.jcr.RepositoryException;
  +
   
   /**
    * The <code>NoPrefixDeclaredException</code> ...
  @@ -23,7 +23,7 @@
    * @author Stefan Guggisberg
    * @version $Revision$, $Date$
    */
  -public class NoPrefixDeclaredException extends RepositoryException {
  +public class NoPrefixDeclaredException extends BaseException {
       /**
        * Constructs a new instance of this class.
        */
  
  
  
  1.34      +273 -63   jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NodeImpl.java
  
  Index: NodeImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NodeImpl.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- NodeImpl.java	27 Aug 2004 09:28:46 -0000	1.33
  +++ NodeImpl.java	30 Aug 2004 16:15:15 -0000	1.34
  @@ -154,12 +154,20 @@
   	try {
   	    return (PropertyImpl) getProperty(name);
   	} catch (PathNotFoundException pnfe) {
  -	    // does not exist yet:
  -	    // find definition for the specified property and create property
  -	    QName qName = QName.fromJCRName(name, session.getNamespaceResolver());
  -	    PropertyDefImpl def = getApplicablePropertyDef(qName, type);
  -	    return createChildProperty(qName, type, def);
  +	    // fall through
   	}
  +	// property does not exist yet...
  +	QName qName;
  +	try {
  +	    qName = QName.fromJCRName(name, session.getNamespaceResolver());
  +	} catch (IllegalNameException ine) {
  +	    throw new RepositoryException("invalid property name: " + name, ine);
  +	} catch (UnknownPrefixException upe) {
  +	    throw new RepositoryException("invalid property name: " + name, upe);
  +	}
  +	// find definition for the specified property and create property
  +	PropertyDefImpl def = getApplicablePropertyDef(qName, type);
  +	return createChildProperty(qName, type, def);
       }
   
       protected PropertyImpl getOrCreateProperty(QName name, int type)
  @@ -411,7 +419,6 @@
   	}
   
   	NodeImpl parentNode;
  -	NodeDefImpl def;
   	try {
   	    Item parent = itemMgr.getItem(parentPath);
   	    if (!parent.isNode()) {
  @@ -420,21 +427,44 @@
   		throw new ConstraintViolationException(msg);
   	    }
   	    parentNode = (NodeImpl) parent;
  -	    try {
  -		def = getApplicableChildNodeDef(nodeName, nodeType == null ? null : nodeType.getQName());
  -	    } catch (RepositoryException re) {
  -		String msg = "no definition found in parent node's node type for new node";
  -		log.error(msg, re);
  -		throw new ConstraintViolationException(msg, re);
  -	    }
  -	    if (nodeType == null) {
  -		// use default node type
  -		nodeType = (NodeTypeImpl) def.getDefaultPrimaryType();
  -	    }
   	} catch (AccessDeniedException ade) {
   	    throw new PathNotFoundException(relPath);
   	}
   
  +	// delegate the creation of the child node to the parent node
  +	return parentNode.internalAddChildNode(nodeName, nodeType, uuid);
  +    }
  +
  +    protected NodeImpl internalAddChildNode(QName nodeName, NodeTypeImpl nodeType)
  +	    throws ItemExistsException, ConstraintViolationException, RepositoryException {
  +	return internalAddChildNode(nodeName, nodeType, null);
  +    }
  +
  +    protected NodeImpl internalAddChildNode(QName nodeName, NodeTypeImpl nodeType, String uuid)
  +	    throws ItemExistsException, ConstraintViolationException, RepositoryException {
  +	Path nodePath;
  +	try {
  +	    nodePath = Path.create(getPrimaryPath(), nodeName, true);
  +	} catch (MalformedPathException e) {
  +	    // should never happen
  +	    String msg = "internal error: invalid path " + safeGetJCRPath();
  +	    log.error(msg, e);
  +	    throw new RepositoryException(msg, e);
  +	}
  +
  +	NodeDefImpl def;
  +	try {
  +	    def = getApplicableChildNodeDef(nodeName, nodeType == null ? null : nodeType.getQName());
  +	} catch (RepositoryException re) {
  +	    String msg = "no definition found in parent node's node type for new node";
  +	    log.error(msg, re);
  +	    throw new ConstraintViolationException(msg, re);
  +	}
  +	if (nodeType == null) {
  +	    // use default node type
  +	    nodeType = (NodeTypeImpl) def.getDefaultPrimaryType();
  +	}
  +
   	// check for name collisions
   	try {
   	    ItemImpl item = itemMgr.getItem(nodePath);
  @@ -454,21 +484,21 @@
   	}
   
   	// check if versioning allows write
  -	if (!parentNode.safeIsCheckedOut()) {
  -	    String msg = parentNode.safeGetJCRPath() + ": cannot add a child to a checked-in node";
  +	if (!safeIsCheckedOut()) {
  +	    String msg = safeGetJCRPath() + ": cannot add a child to a checked-in node";
   	    log.error(msg);
   	    throw new VersionException(msg);
   	}
   
  -	// check protected flag of parent node
  -	if (parentNode.getDefinition().isProtected()) {
  -	    String msg = parentNode.safeGetJCRPath() + ": cannot add a child to a protected node";
  +	// check protected flag of parent (i.e. this) node
  +	if (getDefinition().isProtected()) {
  +	    String msg = safeGetJCRPath() + ": cannot add a child to a protected node";
   	    log.error(msg);
   	    throw new ConstraintViolationException(msg);
   	}
   
  -	// delegate the creation of the child node to the parent node
  -	return parentNode.createChildNode(nodeName, def, nodeType, uuid);
  +	// now do create the child node
  +	return createChildNode(nodeName, def, nodeType, uuid);
       }
   
       private void setMixinTypesProperty(Set mixinNames) throws RepositoryException {
  @@ -677,9 +707,97 @@
       }
   
       /**
  +     * Returns the child node of <code>this</code> node with the specified
  +     * <code>name</code>.
  +     *
  +     * @param name The qualified name of the child node to retrieve.
  +     * @return The child node with the specified <code>name</code>.
  +     * @throws ItemNotFoundException If no child node exists with the
  +     *                               specified name.
  +     * @throws RepositoryException   If another error occurs.
  +     */
  +    public NodeImpl getNode(QName name) throws ItemNotFoundException, RepositoryException {
  +	return getNode(name, 1);
  +    }
  +
  +    /**
  +     * Returns the child node of <code>this</code> node with the specified
  +     * <code>name</code>.
  +     *
  +     * @param name The qualified name of the child node to retrieve.
  +     * @param index The index of the child node to retrieve (in the case of same-name siblings).
  +     * @return The child node with the specified <code>name</code>.
  +     * @throws ItemNotFoundException If no child node exists with the
  +     *                               specified name.
  +     * @throws RepositoryException   If another error occurs.
  +     */
  +    public NodeImpl getNode(QName name, int index) throws ItemNotFoundException, RepositoryException {
  +	// check state of this instance
  +	checkItemState();
  +
  +	Path nodePath;
  +	try {
  +	    nodePath = Path.create(getPrimaryPath(), name, index, true);
  +	} catch (MalformedPathException e) {
  +	    // should never happen
  +	    String msg = "internal error: invalid path " + safeGetJCRPath();
  +	    log.error(msg, e);
  +	    throw new RepositoryException(msg, e);
  +	}
  +
  +	try {
  +	    Item item = itemMgr.getItem(nodePath);
  +	    if (item.isNode()) {
  +		return (NodeImpl) item;
  +	    } else {
  +		// there's a property with that name, no child node though
  +		throw new ItemNotFoundException();
  +	    }
  +	} catch (AccessDeniedException ade) {
  +	    throw new ItemNotFoundException();
  +	}
  +    }
  +
  +    /**
  +     * Indicates whether a child node with the specified <code>name</code> exists.
  +     * Returns <code>true</code> if the child node exists and <code>false</code>
  +     * otherwise.
  +     *
  +     * @param name The qualified name of the child node.
  +     * @return <code>true</code> if the child node exists; <code>false</code> otherwise.
  +     * @throws RepositoryException If an unspecified error occurs.
  +     */
  +    public boolean hasNode(QName name) throws RepositoryException {
  +	try {
  +	    getNode(name, 1);
  +	    return true;
  +	} catch (ItemNotFoundException pnfe) {
  +	    return false;
  +	}
  +    }
  +
  +    /**
  +     * Indicates whether a child node with the specified <code>name</code> exists.
  +     * Returns <code>true</code> if the child node exists and <code>false</code>
  +     * otherwise.
  +     *
  +     * @param name The qualified name of the child node.
  +     * @param index The index of the child node (in the case of same-name siblings).
  +     * @return <code>true</code> if the child node exists; <code>false</code> otherwise.
  +     * @throws RepositoryException If an unspecified error occurs.
  +     */
  +    public boolean hasNode(QName name, int index) throws RepositoryException {
  +	try {
  +	    getNode(name, index);
  +	    return true;
  +	} catch (ItemNotFoundException pnfe) {
  +	    return false;
  +	}
  +    }
  +
  +    /**
        * Returns the property of <code>this</code> node with the specified
  -     * <code>name</code>. The same <code>save</code> and reacquisition
  -     * semantics apply as with <code>{@link #getProperty(String)}</code>.
  +     * <code>name</code>.
        *
        * @param name The qualified name of the property to retrieve.
        * @return The property with the specified <code>name</code>.
  @@ -687,14 +805,14 @@
        *                               specified name.
        * @throws RepositoryException   If another error occurs.
        */
  -    public Property getProperty(QName name)
  +    public PropertyImpl getProperty(QName name)
   	    throws ItemNotFoundException, RepositoryException {
   	// check state of this instance
   	checkItemState();
   
   	PropertyId propId = new PropertyId(((NodeState) state).getUUID(), name);
   	try {
  -	    return (Property) itemMgr.getItem(propId);
  +	    return (PropertyImpl) itemMgr.getItem(propId);
   	} catch (AccessDeniedException ade) {
   	    throw new ItemNotFoundException(name.toString());
   	}
  @@ -711,13 +829,40 @@
        */
       public boolean hasProperty(QName name) throws RepositoryException {
   	try {
  -	    return getProperty(name) != null;
  +	    getProperty(name);
  +	    return true;
   	} catch (ItemNotFoundException pnfe) {
   	    return false;
   	}
       }
   
       /**
  +     * @see Node#addNode(String)
  +     */
  +    synchronized public NodeImpl addNode(QName nodeName)
  +	    throws ItemExistsException, PathNotFoundException,
  +	    ConstraintViolationException, RepositoryException {
  +	// check state of this instance
  +	checkItemState();
  +
  +	return internalAddChildNode(nodeName, null);
  +    }
  +
  +    /**
  +     * @see Node#addNode(String, String)
  +     */
  +    synchronized public NodeImpl addNode(QName nodeName, QName nodeTypeName)
  +	    throws ItemExistsException, PathNotFoundException,
  +	    NoSuchNodeTypeException, ConstraintViolationException,
  +	    RepositoryException {
  +	// check state of this instance
  +	checkItemState();
  +
  +	NodeTypeImpl nt = session.getNodeTypeManager().getNodeType(nodeTypeName);
  +	return internalAddChildNode(nodeName, nt);
  +    }
  +
  +    /**
        * Same as <code>{@link Node#setProperty(String, String)}</code> except that
        * this method takes a <code>QName</code> instead of a <code>String</code>
        * value.
  @@ -728,7 +873,7 @@
        * @throws ValueFormatException
        * @throws RepositoryException
        */
  -    public Property setProperty(String name, QName value) throws ValueFormatException, RepositoryException {
  +    public PropertyImpl setProperty(String name, QName value) throws ValueFormatException, RepositoryException {
   	// check state of this instance
   	checkItemState();
   
  @@ -748,7 +893,7 @@
        * @throws ValueFormatException
        * @throws RepositoryException
        */
  -    public Property setProperty(String name, QName[] values) throws ValueFormatException, RepositoryException {
  +    public PropertyImpl setProperty(String name, QName[] values) throws ValueFormatException, RepositoryException {
   	// check state of this instance
   	checkItemState();
   
  @@ -757,6 +902,40 @@
   	return prop;
       }
   
  +    /**
  +     * Same as <code>{@link Node#setProperty(String, Value[])}</code> except that
  +     * this method takes a <code>QName</code> name argument instead of a
  +     * <code>String</code>.
  +     *
  +     * @param name
  +     * @param values
  +     * @return
  +     * @throws ValueFormatException
  +     * @throws RepositoryException
  +     */
  +    public PropertyImpl setProperty(QName name, Value[] values)
  +	    throws ValueFormatException, RepositoryException {
  +	// check state of this instance
  +	checkItemState();
  +
  +	int type;
  +	if (values == null || values.length == 0) {
  +	    type = PropertyType.STRING;
  +	} else {
  +	    type = values[0].getType();
  +	}
  +	PropertyImpl prop = getOrCreateProperty(name, type);
  +	prop.setValue(values);
  +	return prop;
  +    }
  +
  +    /**
  +     * @see ItemImpl#getQName()
  +     */
  +    public QName getQName() throws RepositoryException {
  +	return session.getHierarchyManager().getName(id);
  +    }
  +
       //-----------------------------------------------------------------< Item >
       /**
        * @see Item#isNode()
  @@ -776,7 +955,14 @@
   
   	//QName name = getPrimaryPath().getNameElement().getName();
   	QName name = session.getHierarchyManager().getName(id);
  -	return name.toJCRName(session.getNamespaceResolver());
  +	try {
  +	    return name.toJCRName(session.getNamespaceResolver());
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace " + name.getNamespaceURI();
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
  +	}
       }
   
       /**
  @@ -918,8 +1104,7 @@
   	// check state of this instance
   	checkItemState();
   
  -	NodeTypeImpl nt =
  -		(NodeTypeImpl) session.getWorkspace().getNodeTypeManager().getNodeType(nodeTypeName);
  +	NodeTypeImpl nt = (NodeTypeImpl) session.getNodeTypeManager().getNodeType(nodeTypeName);
   	return internalAddNode(relPath, nt);
       }
   
  @@ -1350,7 +1535,15 @@
        * @see Node#isNodeType(String)
        */
       public boolean isNodeType(String nodeTypeName) throws RepositoryException {
  -	return isNodeType(QName.fromJCRName(nodeTypeName, session.getNamespaceResolver()));
  +	QName ntName;
  +	try {
  +	    ntName = QName.fromJCRName(nodeTypeName, session.getNamespaceResolver());
  +	} catch (IllegalNameException ine) {
  +	    throw new RepositoryException("invalid node type name: " + nodeTypeName, ine);
  +	} catch (UnknownPrefixException upe) {
  +	    throw new RepositoryException("invalid node type name: " + nodeTypeName, upe);
  +	}
  +	return isNodeType(ntName);
       }
   
       /**
  @@ -1432,7 +1625,14 @@
   	    throw new ConstraintViolationException(msg);
   	}
   
  -	QName ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
  +	QName ntName;
  +	try {
  +	    ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
  +	} catch (IllegalNameException ine) {
  +	    throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
  +	} catch (UnknownPrefixException upe) {
  +	    throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
  +	}
   
   	NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
   	NodeTypeImpl mixin = ntMgr.getNodeType(ntName);
  @@ -1491,7 +1691,6 @@
   	    internalSetProperty(VersionImpl.PROPNAME_IS_CHECKED_OUT, InternalValue.create(true));
   	    internalSetProperty(VersionImpl.PROPNAME_PREDECESSORS, new InternalValue[]{InternalValue.create(new UUID(hist.getRootVersion().getUUID()))});
   	}
  -
       }
   
       /**
  @@ -1517,7 +1716,14 @@
   	    throw new ConstraintViolationException(msg);
   	}
   
  -	QName ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
  +	QName ntName;
  +	try {
  +	    ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
  +	} catch (IllegalNameException ine) {
  +	    throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
  +	} catch (UnknownPrefixException upe) {
  +	    throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
  +	}
   
   	// check if mixin is assigned
   	if (!((NodeState) state).getMixinTypeNames().contains(ntName)) {
  @@ -1529,10 +1735,11 @@
   	     * mix:referenceable needs special handling because it has
   	     * special semantics:
   	     * it can only be removed if there no more references to this node
  -	     *
  -	     * todo check if there are REFERENCE properties pointing to this node
   	     */
  -	    throw new ConstraintViolationException(mixinName + " can not be removed");
  +	    PropertyIterator  iter = getReferences();
  +	    if (iter.hasNext()) {
  +		throw new ConstraintViolationException(mixinName + " can not be removed: the node is being referenced through at least one property of type REFERENCE");
  +	    }
   	}
   
   	// modify the state of this node
  @@ -1611,7 +1818,14 @@
   	    return false;
   	}
   
  -	QName ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
  +	QName ntName;
  +	try {
  +	    ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
  +	} catch (IllegalNameException ine) {
  +	    throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
  +	} catch (UnknownPrefixException upe) {
  +	    throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
  +	}
   
   	NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
   	NodeTypeImpl mixin = ntMgr.getNodeType(ntName);
  @@ -1977,13 +2191,12 @@
   			break;
   		    case OnParentVersionAction.VERSION:
   		    case OnParentVersionAction.COPY:
  -			QName name = QName.fromJCRName(prop.getName(), session.getNamespaceResolver());
   			Value[] values = prop.getValues();
   			InternalValue[] ivalues = new InternalValue[values.length];
   			for (int i = 0; i < values.length; i++) {
   			    ivalues[i] = InternalValue.create(values[i], session.getNamespaceResolver());
   			}
  -			internalSetProperty(name, ivalues);
  +			internalSetProperty(prop.getQName(), ivalues);
   			break;
   		}
   	    }
  @@ -2167,7 +2380,7 @@
   	    throws RepositoryException {
   
   	// get frozen node type
  -	NodeTypeManagerImpl ntMgr = (NodeTypeManagerImpl) session.getWorkspace().getNodeTypeManager();
  +	NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
   	String ntName = frozen.getProperty(VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE).getString();
   	NodeTypeImpl nt = (NodeTypeImpl) ntMgr.getNodeType(ntName);
   
  @@ -2224,10 +2437,9 @@
        * @param prop
        * @return
        */
  -    private int getOPV(Property prop) throws RepositoryException {
  +    private int getOPV(PropertyImpl prop) throws RepositoryException {
   	int type = prop.hasValue() ? prop.getValue().getType() : PropertyType.UNDEFINED;
  -	PropertyDefImpl def = getApplicablePropertyDef(QName.fromJCRName(prop.getName(), session.getNamespaceResolver()),
  -		type);
  +	PropertyDefImpl def = getApplicablePropertyDef(prop.getQName(), type);
   	return def.getOnParentVersion();
       }
   
  @@ -2239,12 +2451,11 @@
        */
       void restoreFrozenState(FrozenNode freeze, VersionSelector vsel)
   	    throws RepositoryException {
  -	NamespaceResolver nsr = ((SessionImpl) freeze.getSession()).getNamespaceResolver();
   	PropertyIterator piter = freeze.getProperties();
   	while (piter.hasNext()) {
   	    PropertyImpl prop = (PropertyImpl) piter.nextProperty();
   	    // check for special property
  -	    if (prop.getName().equals(VersionImpl.PROPNAME_FROZEN_UUID.toJCRName(nsr))) {
  +	    if (prop.getQName().equals(VersionImpl.PROPNAME_FROZEN_UUID)) {
   		// check if uuid is the same as 'this' one.
   		if (!isNodeType(NodeTypeRegistry.MIX_REFERENCEABLE)) {
   		    throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". Not referenceable.");
  @@ -2252,13 +2463,13 @@
   		if (!prop.getString().equals(this.getUUID())) {
   		    throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". UUID changed.");
   		}
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE.toJCRName(nsr))) {
  -		// check if PrimaryType is the same as 'this' one.
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE)) {
  +		// check if primaryType is the same as 'this' one.
   		if (!prop.getString().equals(this.getPrimaryNodeType().getName())) {
   		    // todo: check with spec what should happen here
   		    throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". PrimaryType changed.");
   		}
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_FROZEN_MIXIN_TYPES.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_FROZEN_MIXIN_TYPES)) {
   		// add mixins
   		Value[] values = prop.getValues();
   		NodeType[] mixins = getMixinNodeTypes();
  @@ -2283,19 +2494,19 @@
   			removeMixin(mixins[i].getName());
   		    }
   		}
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_SUCCESSORS.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_SUCCESSORS)) {
   		// ignore
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_CREATED.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_CREATED)) {
   		// ignore
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_VERSION_LABELS.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_VERSION_LABELS)) {
   		// ignore
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_VERSION_HISTORY.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_VERSION_HISTORY)) {
   		// ignore
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_PRIMARYTYPE.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_PRIMARYTYPE)) {
   		// ignore
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_MIXINTYPES.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_MIXINTYPES)) {
   		// ignore
  -	    } else if (prop.getName().equals(VersionImpl.PROPNAME_UUID.toJCRName(nsr))) {
  +	    } else if (prop.getQName().equals(VersionImpl.PROPNAME_UUID)) {
   		// ignore
   	    } else {
   		// normal property
  @@ -2309,13 +2520,12 @@
   			break;
   		    case OnParentVersionAction.VERSION:
   		    case OnParentVersionAction.COPY:
  -			QName name = QName.fromJCRName(prop.getName(), session.getNamespaceResolver());
   			Value[] values = prop.getValues();
   			InternalValue[] ivalues = new InternalValue[values.length];
   			for (int i = 0; i < values.length; i++) {
   			    ivalues[i] = InternalValue.create(values[i], session.getNamespaceResolver());
   			}
  -			internalSetProperty(name, ivalues);
  +			internalSetProperty(prop.getQName(), ivalues);
   			break;
   		}
   	    }
  
  
  
  1.13      +40 -1     jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/Path.java
  
  Index: Path.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/Path.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Path.java	27 Aug 2004 09:28:47 -0000	1.12
  +++ Path.java	30 Aug 2004 16:15:16 -0000	1.13
  @@ -130,6 +130,45 @@
   	}
       }
   
  +    /**
  +     * @param master
  +     * @param name
  +     * @param canonicalize
  +     * @return
  +     * @throws MalformedPathException
  +     */
  +    public static Path create(Path master, QName name, boolean canonicalize)
  +	    throws MalformedPathException {
  +	PathBuilder pb = new PathBuilder(master.getElements());
  +	pb.addLast(name.getNamespaceURI(), name.getLocalName());
  +
  +	if (canonicalize) {
  +	    return pb.getPath().getCanonicalPath();
  +	} else {
  +	    return pb.getPath();
  +	}
  +    }
  +
  +    /**
  +     * @param master
  +     * @param name
  +     * @param index
  +     * @param canonicalize
  +     * @return
  +     * @throws MalformedPathException
  +     */
  +    public static Path create(Path master, QName name, int index, boolean canonicalize)
  +	    throws MalformedPathException {
  +	PathBuilder pb = new PathBuilder(master.getElements());
  +	pb.addLast(name.getNamespaceURI(), name.getLocalName(), index);
  +
  +	if (canonicalize) {
  +	    return pb.getPath().getCanonicalPath();
  +	} else {
  +	    return pb.getPath();
  +	}
  +    }
  +
       //------------------------------------------------------< utility methods >
       /**
        * Checks if <code>jcrPath</code> is a valid JCR-style absolute or relative
  
  
  
  1.26      +36 -14    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/PropertyImpl.java
  
  Index: PropertyImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/PropertyImpl.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- PropertyImpl.java	27 Aug 2004 09:56:51 -0000	1.25
  +++ PropertyImpl.java	30 Aug 2004 16:15:16 -0000	1.26
  @@ -258,6 +258,14 @@
   	internalSetValue(internalValues, reqType);
       }
   
  +    /**
  +     * @see ItemImpl#getQName()
  +     */
  +    public QName getQName() {
  +	PropertyId propId = (PropertyId) id;
  +	return propId.getName();
  +    }
  +
       //-------------------------------------------------------------< Property >
       /**
        * @see Property#getValues()
  @@ -867,19 +875,26 @@
   	    case PropertyType.STRING:
   	    case PropertyType.LONG:
   	    case PropertyType.DOUBLE:
  -		// FIXME hack for String properties representing JCR names
  -		Object obj = value.internalValue();
  -		if (obj instanceof QName) {
  -		    QName name = (QName) obj;
  -		    try {
  -			return name.toJCRName(session.getNamespaceResolver()).length();
  -		    } catch (NoPrefixDeclaredException npde) {
  -			log.warn(safeGetJCRPath() + ": the value represents an invalid name", npde);
  -			return -1;
  -		    }
  -		} else {
  -		    return value.toString().length();
  +		return value.toString().length();
  +
  +	    case PropertyType.NAME:
  +		QName name = (QName) value.internalValue();
  +		try {
  +		    return name.toJCRName(session.getNamespaceResolver()).length();
  +		} catch (NoPrefixDeclaredException npde) {
  +		    log.warn(safeGetJCRPath() + ": the value represents an invalid name", npde);
  +		    return -1;
  +		}
  +
  +	    case PropertyType.PATH:
  +		Path path = (Path) value.internalValue();
  +		try {
  +		    return path.toJCRPath(session.getNamespaceResolver()).length();
  +		} catch (NoPrefixDeclaredException npde) {
  +		    log.warn(safeGetJCRPath() + ": the value represents an invalid path", npde);
  +		    return -1;
   		}
  +
   	    case PropertyType.BINARY:
   		BLOBFileValue blob = (BLOBFileValue) value.internalValue();
   		return blob.getLength();
  @@ -908,7 +923,14 @@
       public String getName() throws RepositoryException {
   	PropertyId propId = (PropertyId) id;
   	QName name = propId.getName();
  -	return name.toJCRName(session.getNamespaceResolver());
  +	try {
  +	    return name.toJCRName(session.getNamespaceResolver());
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace " + name.getNamespaceURI();
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
  +	}
       }
   
       /**
  
  
  
  1.10      +29 -12    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/QName.java
  
  Index: QName.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/QName.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- QName.java	27 Aug 2004 09:28:47 -0000	1.9
  +++ QName.java	30 Aug 2004 16:15:16 -0000	1.10
  @@ -71,28 +71,45 @@
        * @param rawName
        * @param resolver
        * @return
  +     * @throws IllegalNameException
        * @throws UnknownPrefixException
        */
  -    public static QName fromJCRName(String rawName, NamespaceResolver resolver) throws UnknownPrefixException {
  +    public static QName fromJCRName(String rawName, NamespaceResolver resolver)
  +	    throws IllegalNameException, UnknownPrefixException {
  +	if (rawName == null || rawName.length() == 0) {
  +	    throw new IllegalNameException("empty name");
  +	}
  +
   	String prefix = null;
  -	int pos = rawName.indexOf(':');
  -	if (pos == -1) {
  -	    prefix = "";
  -	} else if (pos == 0) {
  -	    throw new IllegalArgumentException("prefix can not be empty: " + rawName);
  -	} else if (pos == rawName.length() - 1) {
  -	    throw new IllegalArgumentException("localName can not be empty: " + rawName);
  +	String localName = null;
  +
  +	Matcher matcher = NAME_PATTERN.matcher(rawName);
  +	if (matcher.matches()) {
  +	    // check for prefix (group 1)
  +	    if (matcher.group(1) != null) {
  +		// prefix specified
  +		// group 2 is namespace prefix excl. delimiter (colon)
  +		prefix = matcher.group(2);
  +	    } else {
  +		// no prefix specified
  +		prefix = "";
  +	    }
  +
  +	    // group 3 is localName
  +	    localName = matcher.group(3);
   	} else {
  -	    prefix = rawName.substring(0, pos);
  +	    // illegal syntax for name
  +	    throw new IllegalNameException("'" + rawName + "' is not a valid name");
   	}
  +
   	String uri;
   	try {
   	    uri = resolver.getURI(prefix);
   	} catch (NamespaceException nse) {
   	    throw new UnknownPrefixException(prefix);
   	}
  -	String name = rawName.substring(pos + 1);
  -	return new QName(uri, name);
  +
  +	return new QName(uri, localName);
       }
   
       /**
  
  
  
  1.23      +7 -6      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/RepositoryImpl.java
  
  Index: RepositoryImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/RepositoryImpl.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- RepositoryImpl.java	27 Aug 2004 09:28:47 -0000	1.22
  +++ RepositoryImpl.java	30 Aug 2004 16:15:16 -0000	1.23
  @@ -268,9 +268,10 @@
   	// FIXME version manager should not operate on default workspace
   	// check system root node of system workspace
   	SessionImpl sysSession = getSystemSession(DEFAULT_WORKSPACE_NAME);
  -	if (!sysSession.getRootNode().hasNode(SYSTEM_ROOT_NAME.toJCRName(sysSession.getNamespaceResolver()))) {
  -	    sysSession.getRootNode().addNode(SYSTEM_ROOT_NAME.toJCRName(sysSession.getNamespaceResolver()), NodeTypeRegistry.NT_UNSTRUCTURED.toJCRName(sysSession.getNamespaceResolver()));
  -	    sysSession.getRootNode().save();
  +	NodeImpl rootNode = (NodeImpl) sysSession.getRootNode();
  +	if (!rootNode.hasNode(SYSTEM_ROOT_NAME)) {
  +	    rootNode.addNode(SYSTEM_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
  +	    rootNode.save();
   	}
   	// init version manager
   	vMgr = new VersionManager(sysSession);
  @@ -505,8 +506,8 @@
        * @return
        * @throws RepositoryException
        */
  -    public Node getSystemRootNode(SessionImpl session) throws RepositoryException {
  -	return session.getRootNode().getNode(SYSTEM_ROOT_NAME.toJCRName(session.getNamespaceResolver()));
  +    public NodeImpl getSystemRootNode(SessionImpl session) throws RepositoryException {
  +	return ((NodeImpl)session.getRootNode()).getNode(SYSTEM_ROOT_NAME);
       }
   
       //-----------------------------------------------------------< Repository >
  
  
  
  1.9       +2 -2      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/UnknownPrefixException.java
  
  Index: UnknownPrefixException.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/UnknownPrefixException.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- UnknownPrefixException.java	2 Aug 2004 16:21:05 -0000	1.8
  +++ UnknownPrefixException.java	30 Aug 2004 16:15:16 -0000	1.9
  @@ -23,7 +23,7 @@
    * @author Stefan Guggisberg
    * @version $Revision$, $Date$
    */
  -public class UnknownPrefixException extends RepositoryException {
  +public class UnknownPrefixException extends BaseException {
       /**
        * Constructs a new instance of this class.
        */
  
  
  
  1.10      +2 -2      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeDefImpl.java
  
  Index: NodeDefImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeDefImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- NodeDefImpl.java	2 Aug 2004 16:21:50 -0000	1.9
  +++ NodeDefImpl.java	30 Aug 2004 16:15:16 -0000	1.10
  @@ -88,7 +88,7 @@
   	    return name.toJCRName(nsResolver);
   	} catch (NoPrefixDeclaredException npde) {
   	    // should never get here
  -	    log.error("invalid node name", npde);
  +	    log.error("encountered unregistered namespace in node name", npde);
   	    // not correct, but an acceptable fallback
   	    return nodeDef.getName().toString();
   	}
  
  
  
  1.10      +134 -105  jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDefStore.java
  
  Index: NodeTypeDefStore.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDefStore.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- NodeTypeDefStore.java	27 Aug 2004 09:28:47 -0000	1.9
  +++ NodeTypeDefStore.java	30 Aug 2004 16:15:16 -0000	1.10
  @@ -16,10 +16,7 @@
   package org.apache.slide.jcr.core.nodetype;
   
   import org.apache.log4j.Logger;
  -import org.apache.slide.jcr.core.InternalValue;
  -import org.apache.slide.jcr.core.NamespaceRegistryImpl;
  -import org.apache.slide.jcr.core.NamespaceResolver;
  -import org.apache.slide.jcr.core.QName;
  +import org.apache.slide.jcr.core.*;
   import org.jdom.Document;
   import org.jdom.Element;
   import org.jdom.JDOMException;
  @@ -212,11 +209,16 @@
   
       //------------------------------------------------------< private methods >
       private NodeTypeDef readDef(Element ntElem, NamespaceResolver nsResolver)
  -	    throws InvalidNodeTypeDefException, RepositoryException {
  +	    throws InvalidNodeTypeDefException {
   	String sntName = ntElem.getAttributeValue(NAME_ATTRIBUTE);
   	NodeTypeDef ntDef = new NodeTypeDef();
   	// name
  -	QName qntName = QName.fromJCRName(sntName, nsResolver);
  +	QName qntName;
  +	try {
  +	    qntName = QName.fromJCRName(sntName, nsResolver);
  +	} catch (BaseException e) {
  +	    throw new InvalidNodeTypeDefException("invalid node type name:" + sntName, e);
  +	}
   	ntDef.setName(qntName);
   
   	// supertypes
  @@ -225,7 +227,11 @@
   	    String[] sta = supertypes.split(",\\s*");
   	    QName[] qNames = new QName[sta.length];
   	    for (int i = 0; i < sta.length; i++) {
  -		qNames[i] = QName.fromJCRName(sta[i], nsResolver);
  +		try {
  +		    qNames[i] = QName.fromJCRName(sta[i], nsResolver);
  +		} catch (BaseException e) {
  +		    throw new InvalidNodeTypeDefException("invalid supertype name:" + sta[i], e);
  +		}
   	    }
   	    if (sta.length > 0) {
   		ntDef.setSupertypes(qNames);
  @@ -253,7 +259,11 @@
   	    // name
   	    String propName = elem.getAttributeValue(NAME_ATTRIBUTE);
   	    if (propName != null && propName.length() > 0) {
  -		pd.setName(QName.fromJCRName(propName, nsResolver));
  +		try {
  +		    pd.setName(QName.fromJCRName(propName, nsResolver));
  +		} catch (BaseException e) {
  +		    throw new InvalidNodeTypeDefException("invalid property name:" + propName, e);
  +		}
   	    }
   	    // type
   	    String typeName = elem.getAttributeValue(TYPE_ATTRIBUTE);
  @@ -347,7 +357,11 @@
   	    // name
   	    String nodeName = elem.getAttributeValue(NAME_ATTRIBUTE);
   	    if (nodeName != null && nodeName.length() > 0) {
  -		cnd.setName(QName.fromJCRName(nodeName, nsResolver));
  +		try {
  +		    cnd.setName(QName.fromJCRName(nodeName, nsResolver));
  +		} catch (BaseException e) {
  +		    throw new InvalidNodeTypeDefException("invalid child node name:" + nodeName, e);
  +		}
   	    }
   	    // requiredPrimaryTypes
   	    String requiredPrimaryTypes = elem.getAttributeValue(REQUIREDPRIMARYTYPES_ATTRIBUTE);
  @@ -355,7 +369,11 @@
   		String[] sta = requiredPrimaryTypes.split(",\\s*");
   		QName[] qNames = new QName[sta.length];
   		for (int i = 0; i < sta.length; i++) {
  -		    qNames[i] = QName.fromJCRName(sta[i], nsResolver);
  +		    try {
  +			qNames[i] = QName.fromJCRName(sta[i], nsResolver);
  +		    } catch (BaseException e) {
  +			throw new InvalidNodeTypeDefException("invalid requiredPrimaryType:" + sta[i], e);
  +		    }
   		}
   		if (sta.length > 0) {
   		    cnd.setRequiredPrimaryTypes(qNames);
  @@ -364,7 +382,11 @@
   	    // defaultPrimaryType
   	    String defaultPrimaryType = elem.getAttributeValue(DEFAULTPRIMARYTYPE_ATTRIBUTE);
   	    if (defaultPrimaryType != null && defaultPrimaryType.length() > 0) {
  -		cnd.setDefaultPrimaryType(QName.fromJCRName(defaultPrimaryType, nsResolver));
  +		try {
  +		    cnd.setDefaultPrimaryType(QName.fromJCRName(defaultPrimaryType, nsResolver));
  +		} catch (BaseException e) {
  +		    throw new InvalidNodeTypeDefException("invalid defaultPrimaryType:" + defaultPrimaryType, e);
  +		}
   	    }
   	    // autoCreate
   	    String autoCreate = elem.getAttributeValue(AUTOCREATE_ATTRIBUTE);
  @@ -414,104 +436,111 @@
   
       private void writeDef(NodeTypeDef ntd, Element ntElem, NamespaceResolver nsResolver)
   	    throws RepositoryException {
  -	// name
  -	ntElem.setAttribute(NAME_ATTRIBUTE, ntd.getName().toJCRName(nsResolver));
  -	// supertypes
  -	StringBuffer supertypes = new StringBuffer();
  -	QName[] qNames = ntd.getSupertypes();
  -	for (int i = 0; i < qNames.length; i++) {
  -	    if (supertypes.length() > 0) {
  -		supertypes.append(",");
  -	    }
  -	    supertypes.append(qNames[i].toJCRName(nsResolver));
  -	}
  -	ntElem.setAttribute(SUPERTYPES_ATTRIBUTE, supertypes.toString());
  -	// mixin
  -	ntElem.setAttribute(MIXIN_ATTRIBUTE, Boolean.toString(ntd.isMixin()));
  -	// orderableChildNodes
  -	ntElem.setAttribute(ORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(ntd.hasOrderableChildNodes()));
  -
  -	// property definitions
  -	PropDef[] pda = ntd.getPropertyDefs();
  -	for (int i = 0; i < pda.length; i++) {
  -	    PropDef pd = pda[i];
  -	    Element elem = new Element(PROPERTYDEF_ELEMENT_NAME);
  -	    ntElem.addContent(elem);
  -
  +	try {
   	    // name
  -	    String name = pd.getName() == null ? "" : pd.getName().toJCRName(nsResolver);
  -	    elem.setAttribute(NAME_ATTRIBUTE, name);
  -	    // type
  -	    elem.setAttribute(TYPE_ATTRIBUTE, PropertyType.nameFromValue(pd.getRequiredType()));
  -	    // valueConstraint
  -	    String valueConstraint = pd.getValueConstraint() == null ? "" : pd.getValueConstraint().getDefinition();
  -	    elem.setAttribute(VALUECONSTRAINT_ATTRIBUTE, valueConstraint);
  -	    // defaultValues
  -	    // @todo provide escaping for separator character within single value or change xml representation for defaultValues
  -	    InternalValue[] defVals = pd.getDefaultValues();
  -	    StringBuffer defaultValues = new StringBuffer();
  -	    if (defVals != null) {
  -		for (int n = 0; n < defVals.length; n++) {
  -		    if (defaultValues.length() > 0) {
  -			defaultValues.append(",");
  +	    ntElem.setAttribute(NAME_ATTRIBUTE, ntd.getName().toJCRName(nsResolver));
  +	    // supertypes
  +	    StringBuffer supertypes = new StringBuffer();
  +	    QName[] qNames = ntd.getSupertypes();
  +	    for (int i = 0; i < qNames.length; i++) {
  +		if (supertypes.length() > 0) {
  +		    supertypes.append(",");
  +		}
  +		supertypes.append(qNames[i].toJCRName(nsResolver));
  +	    }
  +	    ntElem.setAttribute(SUPERTYPES_ATTRIBUTE, supertypes.toString());
  +	    // mixin
  +	    ntElem.setAttribute(MIXIN_ATTRIBUTE, Boolean.toString(ntd.isMixin()));
  +	    // orderableChildNodes
  +	    ntElem.setAttribute(ORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(ntd.hasOrderableChildNodes()));
  +
  +	    // property definitions
  +	    PropDef[] pda = ntd.getPropertyDefs();
  +	    for (int i = 0; i < pda.length; i++) {
  +		PropDef pd = pda[i];
  +		Element elem = new Element(PROPERTYDEF_ELEMENT_NAME);
  +		ntElem.addContent(elem);
  +
  +		// name
  +		String name = pd.getName() == null ? "" : pd.getName().toJCRName(nsResolver);
  +		elem.setAttribute(NAME_ATTRIBUTE, name);
  +		// type
  +		elem.setAttribute(TYPE_ATTRIBUTE, PropertyType.nameFromValue(pd.getRequiredType()));
  +		// valueConstraint
  +		String valueConstraint = pd.getValueConstraint() == null ? "" : pd.getValueConstraint().getDefinition();
  +		elem.setAttribute(VALUECONSTRAINT_ATTRIBUTE, valueConstraint);
  +		// defaultValues
  +		// @todo provide escaping for separator character within single value or change xml representation for defaultValues
  +		InternalValue[] defVals = pd.getDefaultValues();
  +		StringBuffer defaultValues = new StringBuffer();
  +		if (defVals != null) {
  +		    for (int n = 0; n < defVals.length; n++) {
  +			if (defaultValues.length() > 0) {
  +			    defaultValues.append(",");
  +			}
  +			defaultValues.append(defVals[n].toString());
   		    }
  -		    defaultValues.append(defVals[n].toString());
   		}
  -	    }
  -
  -	    elem.setAttribute(DEFAULTVALUES_ATTRIBUTE, defaultValues.toString());
  -	    // autoCreate
  -	    String autoCreate = elem.getAttributeValue(AUTOCREATE_ATTRIBUTE);
  -	    if (autoCreate != null && autoCreate.length() > 0) {
  -		pd.setAutoCreate(Boolean.valueOf(autoCreate).booleanValue());
  -	    }
  -	    // mandatory
  -	    elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(pd.isMandatory()));
  -	    // onParentVersion
  -	    elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(pd.getOnParentVersion()));
  -	    // protected
  -	    elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(pd.isProtected()));
  -	    // primaryItem
  -	    elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(pd.isPrimaryItem()));
  -	    // multiple
  -	    elem.setAttribute(MULTIPLE_ATTRIBUTE, Boolean.toString(pd.isMultiple()));
  -	}
   
  -	// child-node definitions
  -	ChildNodeDef[] nda = ntd.getChildNodeDefs();
  -	for (int i = 0; i < nda.length; i++) {
  -	    ChildNodeDef nd = nda[i];
  -	    Element elem = new Element(CHILDNODEDEF_ELEMENT_NAME);
  -	    ntElem.addContent(elem);
  -
  -	    // name
  -	    String name = nd.getName() == null ? "" : nd.getName().toJCRName(nsResolver);
  -	    elem.setAttribute(NAME_ATTRIBUTE, name);
  -	    // requiredPrimaryTypes
  -	    StringBuffer requiredPrimaryTypes = new StringBuffer();
  -	    qNames = nd.getRequiredPrimaryTypes();
  -	    for (int j = 0; j < qNames.length; j++) {
  -		if (requiredPrimaryTypes.length() > 0) {
  -		    requiredPrimaryTypes.append(",");
  +		elem.setAttribute(DEFAULTVALUES_ATTRIBUTE, defaultValues.toString());
  +		// autoCreate
  +		String autoCreate = elem.getAttributeValue(AUTOCREATE_ATTRIBUTE);
  +		if (autoCreate != null && autoCreate.length() > 0) {
  +		    pd.setAutoCreate(Boolean.valueOf(autoCreate).booleanValue());
  +		}
  +		// mandatory
  +		elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(pd.isMandatory()));
  +		// onParentVersion
  +		elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(pd.getOnParentVersion()));
  +		// protected
  +		elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(pd.isProtected()));
  +		// primaryItem
  +		elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(pd.isPrimaryItem()));
  +		// multiple
  +		elem.setAttribute(MULTIPLE_ATTRIBUTE, Boolean.toString(pd.isMultiple()));
  +	    }
  +
  +	    // child-node definitions
  +	    ChildNodeDef[] nda = ntd.getChildNodeDefs();
  +	    for (int i = 0; i < nda.length; i++) {
  +		ChildNodeDef nd = nda[i];
  +		Element elem = new Element(CHILDNODEDEF_ELEMENT_NAME);
  +		ntElem.addContent(elem);
  +
  +		// name
  +		String name = nd.getName() == null ? "" : nd.getName().toJCRName(nsResolver);
  +		elem.setAttribute(NAME_ATTRIBUTE, name);
  +		// requiredPrimaryTypes
  +		StringBuffer requiredPrimaryTypes = new StringBuffer();
  +		qNames = nd.getRequiredPrimaryTypes();
  +		for (int j = 0; j < qNames.length; j++) {
  +		    if (requiredPrimaryTypes.length() > 0) {
  +			requiredPrimaryTypes.append(",");
  +		    }
  +		    requiredPrimaryTypes.append(qNames[j].toJCRName(nsResolver));
   		}
  -		requiredPrimaryTypes.append(qNames[j].toJCRName(nsResolver));
  -	    }
  -	    elem.setAttribute(REQUIREDPRIMARYTYPES_ATTRIBUTE, requiredPrimaryTypes.toString());
  -	    // defaultPrimaryType
  -	    String defaultPrimaryType = nd.getDefaultPrimaryType() == null ? "" : nd.getDefaultPrimaryType().toJCRName(nsResolver);
  -	    elem.setAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType);
  -	    // autoCreate
  -	    elem.setAttribute(AUTOCREATE_ATTRIBUTE, Boolean.toString(nd.isAutoCreate()));
  -	    // mandatory
  -	    elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(nd.isMandatory()));
  -	    // onParentVersion
  -	    elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(nd.getOnParentVersion()));
  -	    // protected
  -	    elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(nd.isProtected()));
  -	    // primaryItem
  -	    elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(nd.isPrimaryItem()));
  -	    // sameNameSibs
  -	    elem.setAttribute(SAMENAMESIBS_ATTRIBUTE, Boolean.toString(nd.allowSameNameSibs()));
  +		elem.setAttribute(REQUIREDPRIMARYTYPES_ATTRIBUTE, requiredPrimaryTypes.toString());
  +		// defaultPrimaryType
  +		String defaultPrimaryType = nd.getDefaultPrimaryType() == null ? "" : nd.getDefaultPrimaryType().toJCRName(nsResolver);
  +		elem.setAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType);
  +		// autoCreate
  +		elem.setAttribute(AUTOCREATE_ATTRIBUTE, Boolean.toString(nd.isAutoCreate()));
  +		// mandatory
  +		elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(nd.isMandatory()));
  +		// onParentVersion
  +		elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(nd.getOnParentVersion()));
  +		// protected
  +		elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(nd.isProtected()));
  +		// primaryItem
  +		elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(nd.isPrimaryItem()));
  +		// sameNameSibs
  +		elem.setAttribute(SAMENAMESIBS_ATTRIBUTE, Boolean.toString(nd.allowSameNameSibs()));
  +	    }
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace";
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
   	}
       }
   }
  
  
  
  1.9       +19 -10    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeImpl.java
  
  Index: NodeTypeImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- NodeTypeImpl.java	2 Aug 2004 16:21:50 -0000	1.8
  +++ NodeTypeImpl.java	30 Aug 2004 16:15:16 -0000	1.9
  @@ -16,10 +16,7 @@
   package org.apache.slide.jcr.core.nodetype;
   
   import org.apache.log4j.Logger;
  -import org.apache.slide.jcr.core.InternalValue;
  -import org.apache.slide.jcr.core.NamespaceResolver;
  -import org.apache.slide.jcr.core.NoPrefixDeclaredException;
  -import org.apache.slide.jcr.core.QName;
  +import org.apache.slide.jcr.core.*;
   
   import javax.jcr.PropertyType;
   import javax.jcr.RepositoryException;
  @@ -286,7 +283,7 @@
   	    return ntd.getName().toJCRName(nsResolver);
   	} catch (NoPrefixDeclaredException npde) {
   	    // should never get here
  -	    log.error("invalid node type name", npde);
  +	    log.error("encountered unregistered namespace in node type name", npde);
   	    return ntd.getName().toString();
   	}
       }
  @@ -390,9 +387,12 @@
   	    InternalValue internalValue = InternalValue.create(value, nsResolver);
   	    checkSetPropertyValueConstraints(def, new InternalValue[]{internalValue});
   	    return true;
  +	} catch (BaseException be) {
  +	    // implementation specific exception, fall through
   	} catch (RepositoryException re) {
  -	    return false;
  +	    // fall through
   	}
  +	return false;
       }
   
       /**
  @@ -402,9 +402,12 @@
   	try {
   	    ent.checkAddNodeConstraints(QName.fromJCRName(childNodeName, nsResolver));
   	    return true;
  +	} catch (BaseException be) {
  +	    // implementation specific exception, fall through
   	} catch (RepositoryException re) {
  -	    return false;
  +	    // fall through
   	}
  +	return false;
       }
   
       /**
  @@ -414,9 +417,12 @@
   	try {
   	    ent.checkAddNodeConstraints(QName.fromJCRName(childNodeName, nsResolver), QName.fromJCRName(nodeTypeName, nsResolver));
   	    return true;
  +	} catch (BaseException be) {
  +	    // implementation specific exception, fall through
   	} catch (RepositoryException re) {
  -	    return false;
  +	    // fall through
   	}
  +	return false;
       }
   
       /**
  @@ -426,9 +432,12 @@
   	try {
   	    ent.checkRemoveItemConstraints(QName.fromJCRName(itemName, nsResolver));
   	    return true;
  +	} catch (BaseException be) {
  +	    // implementation specific exception, fall through
   	} catch (RepositoryException re) {
  -	    return false;
  +	    // fall through
   	}
  +	return false;
       }
   
       /**
  
  
  
  1.12      +4 -1      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeManagerImpl.java
  
  Index: NodeTypeManagerImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeManagerImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- NodeTypeManagerImpl.java	2 Aug 2004 16:21:50 -0000	1.11
  +++ NodeTypeManagerImpl.java	30 Aug 2004 16:15:16 -0000	1.12
  @@ -20,6 +20,7 @@
   import org.apache.slide.jcr.core.NamespaceResolver;
   import org.apache.slide.jcr.core.QName;
   import org.apache.slide.jcr.core.UnknownPrefixException;
  +import org.apache.slide.jcr.core.IllegalNameException;
   import org.apache.slide.jcr.util.IteratorHelper;
   
   import javax.jcr.RepositoryException;
  @@ -188,6 +189,8 @@
   	    return getNodeType(QName.fromJCRName(nodeTypeName, nsResolver));
   	} catch (UnknownPrefixException upe) {
   	    throw new NoSuchNodeTypeException(nodeTypeName, upe);
  +	} catch (IllegalNameException ine) {
  +	    throw new NoSuchNodeTypeException(nodeTypeName, ine);
   	}
       }
   
  
  
  
  1.10      +2 -2      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/PropertyDefImpl.java
  
  Index: PropertyDefImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/PropertyDefImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PropertyDefImpl.java	27 Aug 2004 09:28:47 -0000	1.9
  +++ PropertyDefImpl.java	30 Aug 2004 16:15:16 -0000	1.10
  @@ -113,7 +113,7 @@
   	    return name.toJCRName(nsResolver);
   	} catch (NoPrefixDeclaredException npde) {
   	    // should never get here
  -	    log.error("invalid property name", npde);
  +	    log.error("encountered unregistered namespace in property name", npde);
   	    // not correct, but an acceptable fallback
   	    return propDef.getName().toString();
   	}
  
  
  
  1.9       +10 -2     jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/EventImpl.java
  
  Index: EventImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/EventImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- EventImpl.java	27 Aug 2004 09:28:48 -0000	1.8
  +++ EventImpl.java	30 Aug 2004 16:15:17 -0000	1.9
  @@ -17,6 +17,7 @@
   
   import org.apache.log4j.Logger;
   import org.apache.slide.jcr.core.ItemManager;
  +import org.apache.slide.jcr.core.NoPrefixDeclaredException;
   import org.apache.slide.jcr.core.NodeId;
   import org.apache.slide.jcr.core.SessionImpl;
   
  @@ -91,7 +92,14 @@
        * @see Event#getChildName()
        */
       public String getChildName() throws RepositoryException {
  -	return eventState.getChildItemQName().toJCRName(session.getNamespaceResolver());
  +	try {
  +	    return eventState.getChildItemQName().toJCRName(session.getNamespaceResolver());
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace in name";
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
  +	}
       }
   
       /**
  
  
  
  1.10      +1 -1      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/ObservationManagerFactory.java
  
  Index: ObservationManagerFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/ObservationManagerFactory.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ObservationManagerFactory.java	27 Aug 2004 09:28:48 -0000	1.9
  +++ ObservationManagerFactory.java	30 Aug 2004 16:15:17 -0000	1.10
  @@ -228,7 +228,7 @@
   	    if (nodeTypeName == null) {
   		nodeTypes = null;
   	    } else {
  -		NodeTypeManager ntMgr = session.getWorkspace().getNodeTypeManager();
  +		NodeTypeManager ntMgr = session.getNodeTypeManager();
   		nodeTypes = new NodeType[nodeTypeName.length];
   		for (int i = 0; i < nodeTypes.length; i++) {
   		    nodeTypes[i] = ntMgr.getNodeType(nodeTypeName[i]);
  
  
  
  1.9       +7 -10     jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/FrozenNode.java
  
  Index: FrozenNode.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/FrozenNode.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FrozenNode.java	27 Aug 2004 09:28:49 -0000	1.8
  +++ FrozenNode.java	30 Aug 2004 16:15:17 -0000	1.9
  @@ -159,14 +159,13 @@
        * @param prop
        * @throws RepositoryException
        */
  -    private void copy(Property prop) throws RepositoryException {
  -	QName name = QName.fromJCRName(prop.getName(), session.getNamespaceResolver());
  +    private void copy(PropertyImpl prop) throws RepositoryException {
   	Value[] values = prop.getValues();
   	InternalValue[] ivalues = new InternalValue[values.length];
   	for (int i = 0; i < values.length; i++) {
   	    ivalues[i] = InternalValue.create(values[i], session.getNamespaceResolver());
   	}
  -	internalSetProperty(name, ivalues);
  +	internalSetProperty(prop.getQName(), ivalues);
       }
   
       /**
  @@ -177,9 +176,8 @@
        */
       private void version(NodeImpl node) throws RepositoryException {
   	// create nt:frozenVersionableChild (not defined yet)
  -	NodeTypeImpl nt = (NodeTypeImpl)
  -		session.getWorkspace().getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN_VERSIONABLE_CHILD.toJCRName(session.getNamespaceResolver()));
  -	QName name = QName.fromJCRName(node.getName(), session.getNamespaceResolver());
  +	NodeTypeImpl nt = session.getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN_VERSIONABLE_CHILD);
  +	QName name = node.getQName();
   	NodeDefImpl def = getApplicableChildNodeDef(name, nt.getQName());
   	NodeImpl newChild = createChildNode(name, def, nt, null);
   	newChild.internalSetProperty(VersionImpl.PROPNAME_VERSION_HISTORY,
  @@ -197,9 +195,8 @@
        * @throws RepositoryException
        */
       private void copy(NodeImpl node) throws RepositoryException {
  -	NodeTypeImpl nt = (NodeTypeImpl)
  -		session.getWorkspace().getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN.toJCRName(session.getNamespaceResolver()));
  -	QName name = QName.fromJCRName(node.getName(), session.getNamespaceResolver());
  +	NodeTypeImpl nt = session.getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN);
  +	QName name = node.getQName();
   	NodeDefImpl def = getApplicableChildNodeDef(name, nt.getQName());
   	FrozenNode newChild = (FrozenNode) createChildNode(name, def, nt, null);
   	newChild.createFrozenState((NodeImpl) node);
  
  
  
  1.8       +2 -2      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionHistoryImpl.java
  
  Index: VersionHistoryImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionHistoryImpl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- VersionHistoryImpl.java	27 Aug 2004 09:28:49 -0000	1.7
  +++ VersionHistoryImpl.java	30 Aug 2004 16:15:17 -0000	1.8
  @@ -84,7 +84,7 @@
        * @see VersionHistory#getRootVersion()
        */
       public Version getRootVersion() throws RepositoryException {
  -	return (Version) getNode(NODENAME_ROOTVERSION.toJCRName(session.getNamespaceResolver()));
  +	return (Version) getNode(NODENAME_ROOTVERSION);
       }
   
       /**
  
  
  
  1.10      +5 -5      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionImpl.java
  
  Index: VersionImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- VersionImpl.java	27 Aug 2004 09:28:49 -0000	1.9
  +++ VersionImpl.java	30 Aug 2004 16:15:17 -0000	1.10
  @@ -84,15 +84,15 @@
        */
       public Calendar getCreated() throws RepositoryException {
   	// no check for NULL needed since its mandatory
  -	return getProperty(PROPNAME_CREATED.toJCRName(session.getNamespaceResolver())).getDate();
  +	return getProperty(PROPNAME_CREATED).getDate();
       }
   
       /**
        * @see Version#getVersionLabels()
        */
       public String[] getVersionLabels() throws RepositoryException {
  -	if (hasProperty(PROPNAME_VERSION_LABELS.toJCRName(session.getNamespaceResolver()))) {
  -	    Value[] values = getProperty(PROPNAME_VERSION_LABELS.toJCRName(session.getNamespaceResolver())).getValues();
  +	if (hasProperty(PROPNAME_VERSION_LABELS)) {
  +	    Value[] values = getProperty(PROPNAME_VERSION_LABELS).getValues();
   	    if (values != null) {
   		String[] labels = new String[values.length];
   		for (int i = 0; i < values.length; i++) {
  @@ -150,7 +150,7 @@
   	// check history first
   	getHistory().removeVersionLabel(label);
   
  -	Value[] oldValues = getProperty(PROPNAME_VERSION_LABELS.toJCRName(session.getNamespaceResolver())).getValues();
  +	Value[] oldValues = getProperty(PROPNAME_VERSION_LABELS).getValues();
   	InternalValue[] newValues = new InternalValue[oldValues.length - 1];
   	int j = 0;
   	for (int i = 0; i < oldValues.length; i++) {
  
  
  
  1.10      +18 -15    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionManager.java
  
  Index: VersionManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionManager.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- VersionManager.java	27 Aug 2004 09:28:49 -0000	1.9
  +++ VersionManager.java	30 Aug 2004 16:15:17 -0000	1.10
  @@ -46,7 +46,7 @@
       /**
        * the root node of the version histories
        */
  -    private final Node historyRoot;
  +    private final NodeImpl historyRoot;
   
       /**
        * Creates a new VersionManager.
  @@ -58,14 +58,13 @@
   	this.session = session;
   
   	// check for versionhistory root
  -	Node systemRoot = ((RepositoryImpl) session.getRepository()).getSystemRootNode(session);
  -	if (!systemRoot.hasNode(VERSION_HISTORY_ROOT_NAME.toJCRName(session.getNamespaceResolver()))) {
  +	NodeImpl systemRoot = ((RepositoryImpl) session.getRepository()).getSystemRootNode(session);
  +	if (!systemRoot.hasNode(VERSION_HISTORY_ROOT_NAME)) {
   	    // if not exist, create
  -	    systemRoot.addNode(VERSION_HISTORY_ROOT_NAME.toJCRName(session.getNamespaceResolver()),
  -		    NodeTypeRegistry.NT_UNSTRUCTURED.toJCRName(session.getNamespaceResolver()));
  +	    systemRoot.addNode(VERSION_HISTORY_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
   	    systemRoot.save();
   	}
  -	historyRoot = systemRoot.getNode(VERSION_HISTORY_ROOT_NAME.toJCRName(session.getNamespaceResolver()));
  +	historyRoot = systemRoot.getNode(VERSION_HISTORY_ROOT_NAME);
       }
   
       /**
  @@ -79,15 +78,15 @@
   	    throws RepositoryException {
   
   	// check if history already exists
  -	String relPath = node.getUUID();
  -	if (historyRoot.hasNode(relPath)) {
  +	QName historyNodeName = new QName(NamespaceRegistryImpl.NS_DEFAULT_URI, node.getUUID());
  +	if (historyRoot.hasNode(historyNodeName)) {
   	    //throw new RepositoryException("Unable to initialize version history. Already exists");
  -	    historyRoot.remove(relPath);
  +	    historyRoot.getNode(historyNodeName).remove(".");
   	}
   
   	// create new history node
  -	VersionHistoryImpl vh = VersionHistoryImpl.create((NodeImpl) historyRoot.addNode(relPath,
  -		NodeTypeRegistry.NT_VERSION_HISTORY.toJCRName(session.getNamespaceResolver())));
  +	VersionHistoryImpl vh =	VersionHistoryImpl.create(historyRoot.addNode(historyNodeName,
  +		NodeTypeRegistry.NT_VERSION_HISTORY));
   
   	// and initialize the root version
   	((VersionImpl) vh.getRootVersion()).initFrozenState(node);
  @@ -95,7 +94,7 @@
   	// save new history
   	historyRoot.save();
   
  -	// must aquire version history wich session in node
  +	// must aquire version history with the node's session
   	return VersionHistoryImpl.create((NodeImpl) node.getSession().getNodeByUUID(vh.getUUID()));
       }
   
  @@ -136,7 +135,7 @@
   	//  This causes the following series of events:
   
   	// 0. collect some values
  -	// todo: simplyfy, as soon as mandatroy mv cannot return null
  +	// todo: simplify, as soon as mandatory mv cannot return null
   	Value[] values = node.hasProperty(VersionImpl.PROPNAME_PREDECESSORS)
   		? node.getProperty(VersionImpl.PROPNAME_PREDECESSORS).getValues()
   		: null;
  @@ -218,11 +217,15 @@
   	    // (is done before)
   	    vh.save();
   	    return v;
  -
   	} catch (RepositoryException e) {
   	    log.error("Aborting checkin. Error while creating version: " + e.toString());
   	    vh.refresh(false);
   	    throw e;
  +	} catch (NoPrefixDeclaredException npde) {
  +	    String msg = "Aborting checkin. Error while creating version: " + npde.toString();
  +	    log.error(msg, npde);
  +	    vh.refresh(false);
  +	    throw new RepositoryException(msg, npde);
   	}
       }
   
  
  
  
  1.3       +29 -16    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewImportHandler.java
  
  Index: DocViewImportHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewImportHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DocViewImportHandler.java	27 Aug 2004 09:28:49 -0000	1.2
  +++ DocViewImportHandler.java	30 Aug 2004 16:15:18 -0000	1.3
  @@ -16,16 +16,16 @@
   package org.apache.slide.jcr.core.xml;
   
   import org.apache.log4j.Logger;
  +import org.apache.slide.jcr.core.*;
   import org.apache.slide.jcr.core.nodetype.NodeTypeRegistry;
  -import org.apache.slide.jcr.core.SessionImpl;
  -import org.apache.slide.jcr.core.NodeImpl;
  -import org.apache.slide.jcr.core.QName;
   import org.xml.sax.Attributes;
   import org.xml.sax.ContentHandler;
   import org.xml.sax.SAXException;
   import org.xml.sax.helpers.DefaultHandler;
   
   import javax.jcr.RepositoryException;
  +import javax.jcr.StringValue;
  +import javax.jcr.Value;
   import java.util.Stack;
   
   /**
  @@ -54,28 +54,40 @@
        */
       public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
   	try {
  -	    String nodeName;
  +	    QName nodeName;
   	    if (qName == null || "".equals(qName)) {
  -		nodeName = new QName(namespaceURI, localName).toJCRName(session.getNamespaceResolver());
  +		nodeName = new QName(namespaceURI, localName);
   	    } else {
  -		nodeName = qName;
  +		try {
  +		    nodeName = QName.fromJCRName(qName, session.getNamespaceResolver());
  +		} catch (IllegalNameException ine) {
  +		    throw new SAXException("illegal node name: " + qName, ine);
  +		} catch (UnknownPrefixException upe) {
  +		    throw new SAXException("illegal node name: " + qName, upe);
  +		}
   	    }
   
   	    // @todo how should 'system' properties be handled in document view (e.g. jcr:primaryType,jcr:mixinTypes, jcr:uuid)?
   	    NodeImpl currentParent = (NodeImpl) parents.peek();
  -	    currentParent = (NodeImpl) currentParent.addNode(nodeName, NodeTypeRegistry.NT_UNSTRUCTURED.toJCRName(session.getNamespaceResolver()));
  +	    currentParent = (NodeImpl) currentParent.addNode(nodeName, NodeTypeRegistry.NT_UNSTRUCTURED);
   	    parents.push(currentParent);
   
   	    // properties
   	    for (int i = 0; i < atts.getLength(); i++) {
  -		String propName;
  +		QName propName;
   		if (atts.getQName(i) == null || "".equals(atts.getQName(i))) {
  -		    propName = new QName(atts.getURI(i), atts.getLocalName(i)).toJCRName(session.getNamespaceResolver());
  +		    propName = new QName(atts.getURI(i), atts.getLocalName(i));
   		} else {
  -		    propName = atts.getQName(i);
  +		    try {
  +			propName = QName.fromJCRName(atts.getQName(i), session.getNamespaceResolver());
  +		    } catch (IllegalNameException ine) {
  +			throw new SAXException("illegal property name: " + atts.getQName(i), ine);
  +		    } catch (UnknownPrefixException upe) {
  +			throw new SAXException("illegal property name: " + atts.getQName(i), upe);
  +		    }
   		}
  -		String value = atts.getValue(i);
  -		currentParent.setProperty(propName, value);
  +		StringValue val = new StringValue(atts.getValue(i));
  +		currentParent.setProperty(propName, new Value[]{val});
   	    }
   	} catch (RepositoryException re) {
   	    throw new SAXException(re);
  @@ -91,9 +103,10 @@
   	// (need to store as node in order to maintain ordering)
   	try {
   	    NodeImpl currentParent = (NodeImpl) parents.peek();
  -	    NodeImpl txtNode = (NodeImpl) currentParent.addNode(DocViewSAXEventGenerator.NODENAME_XMLTEXT.toJCRName(session.getNamespaceResolver()));
  -	    txtNode.setProperty(DocViewSAXEventGenerator.PROPNAME_XMLCHARACTERS.toJCRName(session.getNamespaceResolver()),
  -		    new String(ch, start, length));
  +	    NodeImpl txtNode = (NodeImpl) currentParent.addNode(DocViewSAXEventGenerator.NODENAME_XMLTEXT);
  +	    StringValue val = new StringValue(new String(ch, start, length));
  +	    txtNode.setProperty(DocViewSAXEventGenerator.PROPNAME_XMLCHARACTERS,
  +		    new Value[]{val});
   	} catch (RepositoryException re) {
   	    throw new SAXException(re);
   	}
  
  
  
  1.2       +44 -15    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewSAXEventGenerator.java
  
  Index: DocViewSAXEventGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewSAXEventGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DocViewSAXEventGenerator.java	24 Aug 2004 09:51:55 -0000	1.1
  +++ DocViewSAXEventGenerator.java	30 Aug 2004 16:15:18 -0000	1.2
  @@ -129,11 +129,18 @@
   
   	    // element name
   	    String elemName;
  -	    if (state.getParentUUIDs().size() == 0) {
  -		// root node needs a name
  -		elemName = NODENAME_ROOT.toJCRName(nsReg);
  -	    } else {
  -		elemName = name.toJCRName(nsReg);
  +	    try {
  +		if (state.getParentUUIDs().size() == 0) {
  +		    // root node needs a name
  +		    elemName = NODENAME_ROOT.toJCRName(nsReg);
  +		} else {
  +		    elemName = name.toJCRName(nsReg);
  +		}
  +	    } catch (NoPrefixDeclaredException npde) {
  +		// should never get here...
  +		String msg = "internal error: encountered unregistered namespace";
  +		log.error(msg, npde);
  +		throw new RepositoryException(msg, npde);
   	    }
   	    if (!XMLChar.isValidName(elemName)) {
   		throw new InvalidSerializedDataException("the node name is not a valid xml element name: " + elemName);
  @@ -146,7 +153,15 @@
   		PropertyState propState = (PropertyState) iter.next();
   		QName propName = propState.getName();
   		// attribute name
  -		String attrName = propState.getName().toJCRName(nsReg);
  +		String attrName;
  +		try {
  +		    attrName = propName.toJCRName(nsReg);
  +		} catch (NoPrefixDeclaredException npde) {
  +		    // should never get here...
  +		    String msg = "internal error: encountered unregistered namespace";
  +		    log.error(msg, npde);
  +		    throw new RepositoryException(msg, npde);
  +		}
   		if (!XMLChar.isValidName(attrName)) {
   		    throw new InvalidSerializedDataException("the property name is not a valid xml attribute name: " + attrName);
   		}
  @@ -157,7 +172,14 @@
   		InternalValue val = propState.getValues()[0];
   		if (type == PropertyType.BINARY) {
   		    if (binaryAsLink) {
  -			attrValue = hierMgr.getPath(new PropertyId(propState.getParentUUID(), propState.getName())).toJCRPath(nsReg);
  +			try {
  +			    attrValue = hierMgr.getPath(new PropertyId(propState.getParentUUID(), propState.getName())).toJCRPath(nsReg);
  +			} catch (NoPrefixDeclaredException npde) {
  +			    // should never get here...
  +			    String msg = "internal error: encountered unregistered namespace";
  +			    log.error(msg, npde);
  +			    throw new RepositoryException(msg, npde);
  +			}
   		    } else {
   			// binary data, base64 encoding required
   			BLOBFileValue blob = (BLOBFileValue) val.internalValue();
  @@ -181,7 +203,7 @@
   		} else {
   		    attrValue = val.toJCRValue(nsReg).getString();
   		}
  -		attrs.addAttribute(propName.getNamespaceURI(), propName.getLocalName(), propName.toJCRName(nsReg), CDATA_TYPE, attrValue);
  +		attrs.addAttribute(propName.getNamespaceURI(), propName.getLocalName(), attrName, CDATA_TYPE, attrValue);
   	    }
   	    // start element (node)
   	    contentHandler.startElement(name.getNamespaceURI(), name.getLocalName(), elemName, attrs);
  @@ -200,11 +222,18 @@
   	}
   	// element name
   	String elemName;
  -	if (state.getParentUUIDs().size() == 0) {
  -	    // root node needs a name
  -	    elemName = NODENAME_ROOT.toJCRName(nsReg);
  -	} else {
  -	    elemName = name.toJCRName(nsReg);
  +	try {
  +	    if (state.getParentUUIDs().size() == 0) {
  +		// root node needs a name
  +		elemName = NODENAME_ROOT.toJCRName(nsReg);
  +	    } else {
  +		elemName = name.toJCRName(nsReg);
  +	    }
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace";
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
   	}
   
   	// end element (node)
  @@ -227,7 +256,7 @@
   	InternalValue[] values = state.getValues();
   	if (values != null && values.length > 0) {
   	    if (values.length != 1) {
  -		throw new InvalidSerializedDataException("unable to serialize multi-valued property in document view: " + state.getName().toJCRName(nsReg));
  +		throw new InvalidSerializedDataException("unable to serialize multi-valued property in document view: " + state.getName().getLocalName());
   	    }
   	    if (values[0] != null) {
   		props.add(state);
  
  
  
  1.3       +6 -3      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/ImportHandler.java
  
  Index: ImportHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/ImportHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ImportHandler.java	27 Aug 2004 09:28:49 -0000	1.2
  +++ ImportHandler.java	30 Aug 2004 16:15:18 -0000	1.3
  @@ -134,8 +134,11 @@
   	    } else {
   		try {
   		    nsURI = QName.fromJCRName(qName, session.getNamespaceResolver()).getNamespaceURI();
  -		} catch (RepositoryException re) {
  -		    throw new SAXException("failed to determine namespace of element " + qName, re);
  +		} catch (BaseException e) {
  +		    // should never happen...
  +		    String msg = "internal error: failed to parse/resolve element name " + qName;
  +		    log.error(msg, e);
  +		    throw new SAXException(msg, e);
   		}
   	    }
   	    systemViewXML = NamespaceRegistryImpl.NS_SV_URI.equals(nsURI);
  
  
  
  1.3       +59 -25    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewImportHandler.java
  
  Index: SysViewImportHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewImportHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SysViewImportHandler.java	27 Aug 2004 09:28:49 -0000	1.2
  +++ SysViewImportHandler.java	30 Aug 2004 16:15:18 -0000	1.3
  @@ -19,6 +19,7 @@
   import org.apache.slide.jcr.util.Base64;
   import org.apache.slide.jcr.util.ValueHelper;
   import org.apache.slide.jcr.core.*;
  +import org.apache.slide.jcr.core.nodetype.NodeTypeImpl;
   import org.xml.sax.ContentHandler;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
  @@ -78,8 +79,15 @@
   		nsURI = namespaceURI;
   		elemName = localName;
   	    } else {
  -		nsURI = QName.fromJCRName(qName, session.getNamespaceResolver()).getNamespaceURI();
  -		elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
  +		try {
  +		    nsURI = QName.fromJCRName(qName, session.getNamespaceResolver()).getNamespaceURI();
  +		    elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
  +		} catch (BaseException e) {
  +		    // should never happen...
  +		    String msg = "internal error: failed to parse/resolve element name " + qName;
  +		    log.error(msg, e);
  +		    throw new SAXException(msg, e);
  +		}
   	    }
   	    // check namespace
   	    if (!NamespaceRegistryImpl.NS_SV_URI.equals(nsURI)) {
  @@ -89,7 +97,7 @@
   	    if (SysViewSAXEventGenerator.NODE_ELEMENT.equals(elemName)) {
   		// sv:node element
   
  -		// node name (sv:name attribute)
  +		// node name (value of sv:name attribute)
   		String name = atts.getValue(SysViewSAXEventGenerator.NS_SV_URI, SysViewSAXEventGenerator.NAME_ATTRIBUTE);
   		if (name == null) {
   		    // try qualified name
  @@ -108,7 +116,13 @@
   		// push new ImportState instance onto the stack
   		ImportState state = new ImportState();
   		state.parent = current.node;
  -		state.nodeName = QName.fromJCRName(name, session.getNamespaceResolver());
  +		try {
  +		    state.nodeName = QName.fromJCRName(name, session.getNamespaceResolver());
  +		} catch (IllegalNameException ine) {
  +		    throw new SAXException(new InvalidSerializedDataException("illegal node name: " + name, ine));
  +		} catch (UnknownPrefixException upe) {
  +		    throw new SAXException(new InvalidSerializedDataException("illegal node name: " + name, upe));
  +		}
   		stateStack.push(state);
   	    } else if (SysViewSAXEventGenerator.PROPERTY_ELEMENT.equals(elemName)) {
   		// sv:property element
  @@ -116,7 +130,7 @@
   		// reset temp fields
   		currentPropValues = new ArrayList();
   
  -		// property name (sv:name attribute)
  +		// property name (value of sv:name attribute)
   		String name = atts.getValue(SysViewSAXEventGenerator.NS_SV_URI, SysViewSAXEventGenerator.NAME_ATTRIBUTE);
   		if (name == null) {
   		    // try qualified name
  @@ -125,7 +139,13 @@
   		if (name == null) {
   		    throw new SAXException(new InvalidSerializedDataException("missing mandatory sv:name attributeof element sv:property"));
   		}
  -		currentPropName = QName.fromJCRName(name, session.getNamespaceResolver());
  +		try {
  +		    currentPropName = QName.fromJCRName(name, session.getNamespaceResolver());
  +		} catch (IllegalNameException ine) {
  +		    throw new SAXException(new InvalidSerializedDataException("illegal property name: " + name, ine));
  +		} catch (UnknownPrefixException upe) {
  +		    throw new SAXException(new InvalidSerializedDataException("illegal property name: " + name, upe));
  +		}
   		// property type (sv:type attribute)
   		String type = atts.getValue(SysViewSAXEventGenerator.NS_SV_URI, SysViewSAXEventGenerator.TYPE_ATTRIBUTE);
   		if (type == null) {
  @@ -168,7 +188,14 @@
   	    if (qName == null || "".equals(qName)) {
   		elemName = localName;
   	    } else {
  -		elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
  +		try {
  +		    elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
  +		} catch (BaseException e) {
  +		    // should never happen...
  +		    String msg = "internal error: failed to parse/resolve element name " + qName;
  +		    log.error(msg, e);
  +		    throw new SAXException(msg, e);
  +		}
   	    }
   	    // check element name
   	    ImportState current = (ImportState) stateStack.peek();
  @@ -186,14 +213,26 @@
   		// check if all system properties (jcr:primaryType, jcr:uuid etc.)
   		// have been collected and create node as necessary
   		if (currentPropName.equals(ItemImpl.PROPNAME_PRIMARYTYPE)) {
  -		    current.primaryType = QName.fromJCRName((String) currentPropValues.get(0), session.getNamespaceResolver());
  +		    try {
  +			current.primaryType = QName.fromJCRName((String) currentPropValues.get(0), session.getNamespaceResolver());
  +		    } catch (IllegalNameException ine) {
  +			throw new SAXException(new InvalidSerializedDataException("illegal node type name: " + currentPropValues.get(0), ine));
  +		    } catch (UnknownPrefixException upe) {
  +			throw new SAXException(new InvalidSerializedDataException("illegal node type name: " + currentPropValues.get(0), upe));
  +		    }
   		} else if (currentPropName.equals(ItemImpl.PROPNAME_MIXINTYPES)) {
   		    if (current.mixinTypes == null) {
   			current.mixinTypes = new ArrayList(currentPropValues.size());
   		    }
   		    for (int i = 0; i < currentPropValues.size(); i++) {
  -			QName mixin = QName.fromJCRName((String) currentPropValues.get(i), session.getNamespaceResolver());
  -			current.mixinTypes.add(mixin);
  +			try {
  +			    QName mixin = QName.fromJCRName((String) currentPropValues.get(i), session.getNamespaceResolver());
  +			    current.mixinTypes.add(mixin);
  +			} catch (IllegalNameException ine) {
  +			    throw new SAXException(new InvalidSerializedDataException("illegal mixin type name: " + currentPropValues.get(i), ine));
  +			} catch (UnknownPrefixException upe) {
  +			    throw new SAXException(new InvalidSerializedDataException("illegal mixin type name: " + currentPropValues.get(i), upe));
  +			}
   		    }
   		} else if (currentPropName.equals(ItemImpl.PROPNAME_UUID)) {
   		    current.uuid = (String) currentPropValues.get(0);
  @@ -231,14 +270,13 @@
   			    vals[i] = ValueHelper.convert(value, currentPropType);
   			}
   		    }
  -		    String name = currentPropName.toJCRName(session.getNamespaceResolver());
  -		    if (current.node.hasProperty(name)) {
  -			PropertyDef def = current.node.getProperty(name).getDefinition();
  +		    if (current.node.hasProperty(currentPropName)) {
  +			PropertyDef def = current.node.getProperty(currentPropName).getDefinition();
   			if (!def.isProtected()) {
  -			    current.node.setProperty(name, vals);
  +			    current.node.setProperty(currentPropName, vals);
   			}
   		    } else {
  -			current.node.setProperty(name, vals);
  +			current.node.setProperty(currentPropName, vals);
   		    }
   		}
   
  @@ -252,7 +290,6 @@
   	    } else {
   		throw new SAXException(new InvalidSerializedDataException("invalid element in system view xml document: " + elemName));
   	    }
  -
   	} catch (RepositoryException re) {
   	    throw new SAXException(re);
   	}
  @@ -267,21 +304,18 @@
   	    // move existing node with given uuid to current position?
   	    // create with new uuid? what about reference values refering to given uuid?
   	}
  -	String nodeName = state.nodeName.toJCRName(session.getNamespaceResolver());
  -	String typeName = state.primaryType.toJCRName(session.getNamespaceResolver());
  -
  -	if (state.parent.hasNode(nodeName)) {
  -	    NodeDef def = state.parent.getNode(nodeName).getDefinition();
  +	if (state.parent.hasNode(state.nodeName)) {
  +	    NodeDef def = state.parent.getNode(state.nodeName).getDefinition();
   	    if (def.isProtected() || def.isAutoCreate()) {
   		// @todo how to handle protected/auto-created child node?
   	    }
   	}
   
  -	state.node = (NodeImpl) state.parent.addNode(nodeName, typeName);
  +	state.node = (NodeImpl) state.parent.addNode(state.nodeName, state.primaryType);
   	if (state.mixinTypes != null) {
   	    for (int i = 0; i < state.mixinTypes.size(); i++) {
  -		String mixinName = ((QName) state.mixinTypes.get(i)).toJCRName(session.getNamespaceResolver());
  -		state.node.addMixin(mixinName);
  +		NodeTypeImpl mixin = session.getNodeTypeManager().getNodeType((QName) state.mixinTypes.get(i));
  +		state.node.addMixin(mixin.getName());
   	    }
   	}
       }
  
  
  
  1.3       +31 -8     jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewSAXEventGenerator.java
  
  Index: SysViewSAXEventGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewSAXEventGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SysViewSAXEventGenerator.java	27 Aug 2004 09:28:49 -0000	1.2
  +++ SysViewSAXEventGenerator.java	30 Aug 2004 16:15:18 -0000	1.3
  @@ -94,11 +94,18 @@
   	AttributesImpl attrs = new AttributesImpl();
   	// name attribute
   	String nodeName;
  -	if (state.getParentUUIDs().size() == 0) {
  -	    // use dummy name for root node
  -	    nodeName = NODENAME_ROOT.toJCRName(nsReg);
  -	} else {
  -	    nodeName = name.toJCRName(nsReg);
  +	try {
  +	    if (state.getParentUUIDs().size() == 0) {
  +		// use dummy name for root node
  +		nodeName = NODENAME_ROOT.toJCRName(nsReg);
  +	    } else {
  +		nodeName = name.toJCRName(nsReg);
  +	    }
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace";
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
   	}
   	attrs.addAttribute(NS_SV_URI, NAME_ATTRIBUTE, NS_SV_PREFIX + ":" + NAME_ATTRIBUTE, CDATA_TYPE, nodeName);
   	// start node element
  @@ -135,7 +142,15 @@
        */
       protected void entering(PropertyState state, int level)
   	    throws RepositoryException, SAXException {
  -	String name = state.getName().toJCRName(nsReg);
  +	String name;
  +	try {
  +	    name = state.getName().toJCRName(nsReg);
  +	} catch (NoPrefixDeclaredException npde) {
  +	    // should never get here...
  +	    String msg = "internal error: encountered unregistered namespace";
  +	    log.error(msg, npde);
  +	    throw new RepositoryException(msg, npde);
  +	}
   	AttributesImpl attrs = new AttributesImpl();
   	// name attribute
   	attrs.addAttribute(NS_SV_URI, NAME_ATTRIBUTE, NS_SV_PREFIX + ":" + NAME_ATTRIBUTE, CDATA_TYPE, name);
  @@ -167,7 +182,15 @@
   		    // characters
   		    if (type == PropertyType.BINARY) {
   			if (binaryAsLink) {
  -			    String path = hierMgr.getPath(new PropertyId(state.getParentUUID(), state.getName())).toJCRPath(nsReg);
  +			    String path;
  +			    try {
  +				path = hierMgr.getPath(new PropertyId(state.getParentUUID(), state.getName())).toJCRPath(nsReg);
  +			    } catch (NoPrefixDeclaredException npde) {
  +				// should never get here...
  +				String msg = "internal error: encountered unregistered namespace";
  +				log.error(msg, npde);
  +				throw new RepositoryException(msg, npde);
  +			    }
   			    char[] chars = path.toCharArray();
   			    contentHandler.characters(chars, 0, chars.length);
   			} else {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org