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/06/22 20:03:08 UTC

cvs commit: jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core ItemLifeCycleListener.java ItemManager.java NamespaceRegistryImpl.java NamespaceResolver.java NodeId.java NodeImpl.java NoPrefixDeclaredException.java Path.java PropertyId.java PropertyImpl.java QName.java RepositoryFactory.java RepositoryImpl.java StableWorkspaceDef.java Test.java TicketImpl.java UnknownPrefixException.java WorkspaceDef.java WorkspaceImpl.java

stefan      2004/06/22 11:03:08

  Modified:    proposals/jcrri/src/org/apache/slide/jcr/core/nodetype
                        NodeTypeConflictException.java NodeTypeDef.java
                        NodeTypeImpl.java NodeTypeManagerImpl.java
                        NodeTypeRegistry.java NodeTypeXmlGenerator.java
                        PropDef.java PropertyDefImpl.java
                        ValueConstraint.java
               proposals/jcrri/src/org/apache/slide/jcr/util
                        SAXEventGenerator.java Serializer.java UUID.java
                        ValueHelper.java
               proposals/jcrri/src/org/apache/slide/jcr/core
                        ItemLifeCycleListener.java ItemManager.java
                        NamespaceRegistryImpl.java NamespaceResolver.java
                        NodeId.java NodeImpl.java
                        NoPrefixDeclaredException.java Path.java
                        PropertyId.java PropertyImpl.java QName.java
                        RepositoryFactory.java RepositoryImpl.java
                        StableWorkspaceDef.java Test.java TicketImpl.java
                        UnknownPrefixException.java WorkspaceDef.java
                        WorkspaceImpl.java
  Log:
  jcrri
  
  Revision  Changes    Path
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeConflictException.java
  
  Index: NodeTypeConflictException.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeConflictException.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +10 -13    jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDef.java
  
  Index: NodeTypeDef.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDef.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NodeTypeDef.java	21 Jun 2004 09:37:41 -0000	1.2
  +++ NodeTypeDef.java	22 Jun 2004 18:03:07 -0000	1.3
  @@ -241,26 +241,23 @@
        */
       private void setSupertypes(Property supertypeProp, NamespaceResolver nsResolver)
   	throws RepositoryException  {
  +
  +	ArrayList sList = new ArrayList();
   	if (supertypeProp.hasValue()) {
   	    Value[] values = supertypeProp.getValues();
  -	    ArrayList sList = new ArrayList();
  -	    boolean hasBase = false;
  -	    if (!isMixin()) {
  -		sList.add(NodeTypeRegistry.NT_BASE);
  -		hasBase = true;
  -	    }
   	    for (int i = 0; i < values.length; i++) {
   		String stName = values[i].getString();
  -		// if base was already added >> ignore
  -		if (hasBase && stName.equals(NodeTypeRegistry.NT_BASE.toJCRName(nsResolver))) {
  +		// ignore base, will automatically be added if no supertypes
  +		if (stName.equals(NodeTypeRegistry.NT_BASE.toJCRName(nsResolver))) {
   		    continue;
   		}
   		sList.add(QName.fromJCRName(stName, nsResolver));
   	    }
  -	    setSupertypes((QName[])sList.toArray(new QName[sList.size()]));
  -	} else if (!isMixin()) {
  -	    setSupertypes(new QName[] { NodeTypeRegistry.NT_BASE });
   	}
  +	if (sList.size()==0 && !isMixin()) {
  +	    sList.add(NodeTypeRegistry.NT_BASE);
  +	}
  +	setSupertypes((QName[])sList.toArray(new QName[sList.size()]));
       }
   
       /**
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +8 -5      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeRegistry.java
  
  Index: NodeTypeRegistry.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeRegistry.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NodeTypeRegistry.java	21 Jun 2004 09:37:41 -0000	1.2
  +++ NodeTypeRegistry.java	22 Jun 2004 18:03:07 -0000	1.3
  @@ -757,6 +757,9 @@
   	    InputStream is = null;
   	    if (customNodeTypesResource.exists()) {
   		is = customNodeTypesResource.getInputStream();
  +	    } else {
  +		// make sure path to resource exists
  +		customNodeTypesResource.makeParentDirs();
   	    }
   	    NodeTypeXmlGenerator toXml = new NodeTypeXmlGenerator(is);
   	    toXml.addNodeType(ntd, nsResolver, customNodeTypesResource.getOutputStream());
  @@ -767,9 +770,9 @@
   	} catch (InvalidConstraintException e) {
   	    throw new RepositoryException(e.getMessage());
   	} catch (IOException e) {
  -	    throw new RepositoryException("Cannot create persistent registration for valid node type " + node.getProperty("jcr:name").getString());
  +	    throw new RepositoryException("Cannot create persistent registration for valid node type " + node.getProperty("jcr:nodeTypeName").getString());
   	} catch (FileSystemException e) {
  -	    throw new RepositoryException("Cannot create persistent registration for valid node type " + node.getProperty("jcr:name").getString());
  +	    throw new RepositoryException("Cannot create persistent registration for valid node type " + node.getProperty("jcr:nodeTypeName").getString());
   	}
   	return ent;
       }
  @@ -1045,7 +1048,7 @@
   	try {
   	    NodeTypeDef ntd = new NodeTypeDef(node, nsResolver);
   	    /**
  -	     * Update the additional nt-resource in order to make unregistration
  +	     * Update the custom nt-resource in order to make unregistration
   	     * persistent. Since the node is still present re-registering is possible
   	     * at any time.
   	     */
  
  
  
  1.2       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeXmlGenerator.java
  
  Index: NodeTypeXmlGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeXmlGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/PropDef.java
  
  Index: PropDef.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/PropDef.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/ValueConstraint.java
  
  Index: ValueConstraint.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/ValueConstraint.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/SAXEventGenerator.java
  
  Index: SAXEventGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/SAXEventGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.9       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/Serializer.java
  
  Index: Serializer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/Serializer.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/UUID.java
  
  Index: UUID.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/UUID.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/ValueHelper.java
  
  Index: ValueHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/util/ValueHelper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemLifeCycleListener.java
  
  Index: ItemLifeCycleListener.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemLifeCycleListener.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.4       +0 -0      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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  
  
  
  1.3       +151 -22   jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NamespaceRegistryImpl.java
  
  Index: NamespaceRegistryImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NamespaceRegistryImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NamespaceRegistryImpl.java	21 Jun 2004 09:37:40 -0000	1.2
  +++ NamespaceRegistryImpl.java	22 Jun 2004 18:03:07 -0000	1.3
  @@ -24,11 +24,18 @@
   package org.apache.slide.jcr.core;
   
   import org.apache.log4j.Logger;
  +import org.apache.slide.jcr.fs.FileSystem;
  +import org.apache.slide.jcr.fs.FileSystemResource;
   
   import javax.jcr.NamespaceException;
   import javax.jcr.NamespaceRegistry;
   import javax.jcr.RepositoryException;
   import java.util.HashMap;
  +import java.util.HashSet;
  +import java.util.Properties;
  +import java.util.Iterator;
  +import java.io.OutputStream;
  +import java.io.InputStream;
   
   /**
    * A <code>NamespaceRegistryImpl</code> ...
  @@ -41,6 +48,7 @@
       private static Logger log = Logger.getLogger(NamespaceRegistryImpl.class);
   
       // default namespace (empty uri)
  +    public static final String NS_EMPTY_PREFIX = "";
       public static final String NS_DEFAULT_URI = "";
   
       // reserved namespace for items defined within built-in node types
  @@ -63,27 +71,127 @@
       public static final String NS_SV_PREFIX = "sv";
       public static final String NS_SV_URI = "http://www.jcp.org/jcr/sv/1.0";
   
  +    private static final String NS_REG_RESOURCE = "ns_reg.properties";
  +
  +    private static final HashSet reservedPrefixes = new HashSet();
  +    private static final HashSet reservedURIs = new HashSet();
  +
  +    static {
  +	// predefined (e.g. built-in) prefixes
  +	reservedPrefixes.add(NS_JCR_PREFIX);
  +	reservedPrefixes.add(NS_NT_PREFIX);
  +	reservedPrefixes.add(NS_MIX_PREFIX);
  +	reservedPrefixes.add(NS_PT_PREFIX);
  +	reservedPrefixes.add(NS_SV_PREFIX);
  +	// predefined (e.g. built-in) namespace URI's
  +	reservedURIs.add(NS_JCR_URI);
  +	reservedURIs.add(NS_NT_URI);
  +	reservedURIs.add(NS_MIX_URI);
  +	reservedURIs.add(NS_PT_URI);
  +	reservedURIs.add(NS_SV_URI);
  +    }
  +
       private HashMap prefixToURI = new HashMap();
       private HashMap uriToPrefix = new HashMap();
   
  +    private final FileSystem nsRegStore;
  +
       /**
        * Package private constructor: Constructs a new instance of this class.
  +     * @param nsRegStore
  +     * @throws RepositoryException
        */
  -    NamespaceRegistryImpl() {
  +    NamespaceRegistryImpl(FileSystem nsRegStore) throws RepositoryException {
  +	this.nsRegStore = nsRegStore;
  +	load();
  +    }
  +
  +    private void load() throws RepositoryException {
  +	FileSystemResource propFile = new FileSystemResource(nsRegStore, NS_REG_RESOURCE);
  +	try {
  +	    if (!propFile.exists()) {
  +		// clear existing mappings
  +		prefixToURI.clear();
  +		uriToPrefix.clear();
  +
  +		// default namespace (if no prefix is specified)
  +		prefixToURI.put(NS_EMPTY_PREFIX, NS_DEFAULT_URI);
  +		uriToPrefix.put(NS_DEFAULT_URI, NS_EMPTY_PREFIX);
  +		// declare the predefined mappings
  +		// jcr:
  +		prefixToURI.put(NS_JCR_PREFIX, NS_JCR_URI);
  +		uriToPrefix.put(NS_JCR_URI, NS_JCR_PREFIX);
  +		// nt:
  +		prefixToURI.put(NS_NT_PREFIX, NS_NT_URI);
  +		uriToPrefix.put(NS_NT_URI, NS_NT_PREFIX);
  +		// mix:
  +		prefixToURI.put(NS_MIX_PREFIX, NS_MIX_URI);
  +		uriToPrefix.put(NS_MIX_URI, NS_MIX_PREFIX);
  +		// pt:
  +		prefixToURI.put(NS_PT_PREFIX, NS_PT_URI);
  +		uriToPrefix.put(NS_PT_URI, NS_PT_PREFIX);
  +		// sv:
  +		prefixToURI.put(NS_SV_PREFIX, NS_SV_URI);
  +		uriToPrefix.put(NS_SV_URI, NS_SV_PREFIX);
  +
  +		// persist mappings
  +		store();
  +		return;
  +	    }
  +
  +	    InputStream in = propFile.getInputStream();
  +	    try {
  +		Properties props = new Properties();
  +		props.load(in);
  +
  +		// clear existing mappings
  +		prefixToURI.clear();
  +		uriToPrefix.clear();
  +
  +		// read mappings from properties
  +		Iterator iter = props.keySet().iterator();
  +		while (iter.hasNext()) {
  +		    String prefix = (String) iter.next();
  +		    String uri = props.getProperty(prefix);
  +
  +		    prefixToURI.put(prefix, uri);
  +		    uriToPrefix.put(uri, prefix);
  +		}
  +	    } finally {
  +		in.close();
  +	    }
  +	} catch (Exception e) {
  +	    String msg = "failed to persist namespace registry";
  +	    log.error(msg, e);
  +	    throw new RepositoryException(msg, e);
  +	}
  +    }
  +
  +    private void store() throws RepositoryException {
  +	FileSystemResource propFile = new FileSystemResource(nsRegStore, NS_REG_RESOURCE);
   	try {
  -	    // default namespace (if no prefix is specified)
  -	    registerNamespace("", NS_DEFAULT_URI);
  -	    // declare the predefined mappings
  -	    registerNamespace(NS_JCR_PREFIX, NS_JCR_URI);
  -	    registerNamespace(NS_NT_PREFIX, NS_NT_URI);
  -	    registerNamespace(NS_MIX_PREFIX, NS_MIX_URI);
  -	    registerNamespace(NS_PT_PREFIX, NS_PT_URI);
  -	    registerNamespace(NS_SV_PREFIX, NS_SV_URI);
  -	} catch (RepositoryException re) {
  -	    // should never get here
  -	    String msg = "failed to register predefined namespaces: ";
  -	    log.error(msg, re);
  -	    throw new InternalError(msg + re.getMessage());
  +	    propFile.makeParentDirs();
  +	    OutputStream os = propFile.getOutputStream();
  +	    Properties props = new Properties();
  +
  +	    // store mappings in properties
  +	    Iterator iter = prefixToURI.keySet().iterator();
  +	    while (iter.hasNext()) {
  +		String prefix = (String) iter.next();
  +		String uri = (String) prefixToURI.get(prefix);
  +		props.setProperty(prefix,  uri);
  +	    }
  +
  +	    try {
  +		props.store(os, null);
  +	    } finally {
  +		// make sure stream is closed
  +		os.close();
  +	    }
  +	} catch (Exception e) {
  +	    String msg = "failed to persist namespace registry";
  +	    log.error(msg, e);
  +	    throw new RepositoryException(msg, e);
   	}
       }
   
  @@ -93,15 +201,26 @@
        */
       public void registerNamespace(String prefix, String uri)
   	    throws NamespaceException, RepositoryException {
  -	// @todo implement validations etc according to spec
  -	if (prefixToURI.containsKey(prefix)) {
  -	    throw new NamespaceException("Unable to register namespace " + prefix + ":" + uri + ". Prefix already exists");
  +	if (reservedURIs.contains(uri)) {
  +	    throw new NamespaceException("failed to register namespace " + prefix + " -> " + uri + ": reserved URI");
   	}
  +	if (reservedPrefixes.contains(prefix)) {
  +	    throw new NamespaceException("failed to register namespace " + prefix + " -> " + uri + ": reserved prefix");
  +	}
  +
   	if (uriToPrefix.containsKey(uri)) {
  -	    throw new NamespaceException("Unable to register namespace " + prefix + ":" + uri + ". URI already exists");
  +	    throw new NamespaceException("failed to register namespace " + prefix + " -> " + uri + ": URI already exists");
  +	}
  +	if (prefixToURI.containsKey(prefix)) {
  +	    throw new NamespaceException("failed to register namespace " + prefix + " -> " + uri + ": prefix already exists");
   	}
  +	// @todo implement further validations according to spec
  +
   	prefixToURI.put(prefix, uri);
   	uriToPrefix.put(uri, prefix);
  +
  +	// persist mappings
  +	store();
       }
   
       /**
  @@ -109,13 +228,23 @@
        */
       public void unregisterNamespace(String prefix)
   	    throws NamespaceException, RepositoryException {
  -	// @todo implement validations etc according to spec
  +	if (reservedPrefixes.contains(prefix)) {
  +	    throw new NamespaceException("reserved prefix: " + prefix);
  +	}
  +	if (!prefixToURI.containsKey(prefix)) {
  +	    throw new NamespaceException("unknown prefix: " + prefix);
  +	}
  +	throw new NamespaceException("not yet supported");
  +
  +	// @todo implement further validations according to spec
   /*
   	String uri = getURI(prefix);
   	prefixToURI.remove(prefix);
   	uriToPrefix.remove(uri);
  +
  +	// persist mappings
  +	store();
   */
  -	throw new NamespaceException("not yet supported");
       }
   
       /**
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NamespaceResolver.java
  
  Index: NamespaceResolver.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NamespaceResolver.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NodeId.java
  
  Index: NodeId.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NodeId.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.14      +20 -14    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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- NodeImpl.java	21 Jun 2004 09:37:40 -0000	1.13
  +++ NodeImpl.java	22 Jun 2004 18:03:07 -0000	1.14
  @@ -292,31 +292,37 @@
       protected void onUnlink(NodeState parentState) throws RepositoryException {
   	// modify the state of 'this', i.e. the target node
   	NodeState thisState = (NodeState) getOrCreateTransientItemState();
  -	// remove uuid of this node from target's parent list
  -	thisState.removeParentUUID(parentState.getUUID());
   
  -	// check ref#
  -	if (thisState.getParentUUIDs().isEmpty()) {
  -	    // orphaned node
  +	// check if this node would be orphaned after unlinking it from parent
  +	ArrayList parentUUIDs = new ArrayList(thisState.getParentUUIDs());
  +	parentUUIDs.remove(parentState.getUUID());
  +	boolean orphaned = parentUUIDs.isEmpty();
   
  +	if (orphaned) {
   	    // remove child nodes (recursive)
   	    // use temp array to avoid ConcurrentModificationException
  -	    Collection tmp = new ArrayList(thisState.getChildNodeEntries());
  -	    Iterator iter = tmp.iterator();
  -	    while (iter.hasNext()) {
  -		NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
  +	    ArrayList tmp = new ArrayList(thisState.getChildNodeEntries());
  +	    // remove from tail to avoid problems with same-name siblings
  +	    for (int i = tmp.size() - 1; i >= 0; i--) {
  +		NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) tmp.get(i);
   		removeChildNode(entry.getName(), entry.getIndex());
   	    }
   
   	    // remove properties
   	    // use temp array to avoid ConcurrentModificationException
   	    tmp = new ArrayList(thisState.getPropertyEntries());
  -	    iter = tmp.iterator();
  -	    while (iter.hasNext()) {
  -		NodeState.PropertyEntry entry = (NodeState.PropertyEntry) iter.next();
  +	    // remove from tail to avoid problems with same-name siblings
  +	    for (int i = tmp.size() - 1; i >= 0; i--) {
  +		NodeState.PropertyEntry entry = (NodeState.PropertyEntry) tmp.get(i);
   		removeChildProperty(entry.getName());
   	    }
  +	}
  +
  +	// now actually do unlink this node from specified parent node
  +	// (i.e. remove uuid of parent node from this node's parent list)
  +	thisState.removeParentUUID(parentState.getUUID());
   
  +	if (orphaned) {
   	    // remove this node
   	    itemMgr.removeItem(id);
   	}
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/PropertyId.java
  
  Index: PropertyId.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/PropertyId.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.13      +0 -0      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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.10      +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/RepositoryFactory.java
  
  Index: RepositoryFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/RepositoryFactory.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  
  
  
  1.9       +6 -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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- RepositoryImpl.java	21 Jun 2004 09:37:40 -0000	1.8
  +++ RepositoryImpl.java	22 Jun 2004 18:03:07 -0000	1.9
  @@ -128,11 +128,12 @@
   		}
   	    } else {
   		// create new uuid
  -		rootNodeUUID = new UUID().toString();	// version 4 uuid
  +		UUID rootUUID = new UUID();	// version 4 uuid
  +		rootNodeUUID = rootUUID.toString();	// version 4 uuid
   		try {
   		    // persist uuid of the repository's root node
   		    OutputStream out = uuidFile.getOutputStream();
  -		    out.write(rootNodeUUID.getBytes());
  +		    out.write(rootUUID.getBytes());
   		    out.close();
   		} catch (Exception e) {
   		    String msg = "failed to persist repository state";
  @@ -173,8 +174,7 @@
   	    throw new RepositoryException(msg);
   	}
   
  -	// @todo load global persistent namespace mappings
  -	nsReg = new NamespaceRegistryImpl();
  +	nsReg = new NamespaceRegistryImpl(new BasedFileSystem(repStore, "/namespaces"));
   
   	ntReg = NodeTypeRegistry.create(nsReg, new BasedFileSystem(repStore, "/nodetypes"));
       }
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/StableWorkspaceDef.java
  
  Index: StableWorkspaceDef.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/StableWorkspaceDef.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/Test.java
  
  Index: Test.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/Test.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.9       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/TicketImpl.java
  
  Index: TicketImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/TicketImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  
  
  
  1.3       +0 -0      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/WorkspaceDef.java
  
  Index: WorkspaceDef.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/WorkspaceDef.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  
  1.3       +0 -0      jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/WorkspaceImpl.java
  
  Index: WorkspaceImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/WorkspaceImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  
  
  

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