stefan      2004/06/24 09:31:07

  Modified:    proposals/jcrri ToDo.txt
               proposals/jcrri/src/org/apache/slide/jcr/core
                        HierarchyManager.java ItemImpl.java
                        ItemManager.java NodeImpl.java
               proposals/jcrri/src/org/apache/slide/jcr/core/nodetype
                        nodetypes.xml
               proposals/jcrri/src/org/apache/slide/jcr/core/state
                        TransientItemStateManager.java
  Log:
  jcrri
  
  Revision  Changes    Path
  1.3       +1 -0      jakarta-slide/proposals/jcrri/ToDo.txt
  
  Index: ToDo.txt
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/jcrri/ToDo.txt,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ToDo.txt  22 Jun 2004 18:04:00 -0000      1.2
  +++ ToDo.txt  24 Jun 2004 16:31:06 -0000      1.3
  @@ -60,6 +60,7 @@
     - trap JVM shutdown in RepositoryFactory? (Runtime#addShutdownHook)
   - ItemState: hide STATUS_* flags, use set* and is* methods instead
   - javaDoc, javaDoc, javaDoc
  +- logging: use commons logginh instead of log4j
   - logging: remove unnecessary output, check log categories/verbosity, 
     use 'debug' whenever possible
       
  
  
  
  1.5       +3 -3      
jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManager.java
  
  Index: HierarchyManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HierarchyManager.java     22 Jun 2004 18:03:24 -0000      1.4
  +++ HierarchyManager.java     24 Jun 2004 16:31:06 -0000      1.5
  @@ -57,7 +57,7 @@
        * @throws ItemNotFoundException
        * @throws RepositoryException
        */
  -    public QName getName(NodeId id) throws ItemNotFoundException, 
RepositoryException;
  +    public QName getName(ItemId id) throws ItemNotFoundException, 
RepositoryException;
   
       /**
        * @param id
  
  
  
  1.5       +72 -4     
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ItemImpl.java     22 Jun 2004 18:03:24 -0000      1.4
  +++ ItemImpl.java     24 Jun 2004 16:31:06 -0000      1.5
  @@ -694,6 +694,74 @@
            return;
        }
   
  +     // check that parent node is also included in the dirty items list
  +     // if dirty node was removed or added (adding/removing a parent/child
  +     // link requires that both parent and child are saved)
  +     Iterator iter = dirty.iterator();
  +     while (iter.hasNext()) {
  +         transientState = (ItemState) iter.next();
  +         if (transientState.isNode()) {
  +             // check if the parent list of the node
  +             // has been modified
  +             NodeState newState = (NodeState) transientState;
  +             NodeState oldState = (NodeState) transientState.getOverlayedState();
  +             if (oldState != null) {
  +                 List oldParentList = oldState.getParentUUIDs();
  +                 List newParentList = newState.getParentUUIDs();
  +                 if (!newParentList.equals(oldParentList)) {
  +                     // the parent list of this node has been modified;
  +                     // removed parents
  +                     ArrayList diff = new ArrayList(oldParentList);
  +                     if (diff.removeAll(newParentList)) {
  +                         for (int i = 0; i < diff.size(); i++) {
  +                             NodeId id = new NodeId((String) diff.get(i));
  +                             NodeState parentState = null;
  +                             try {
  +                                 parentState = (NodeState) 
itemMgr.getTransientStateMgr().getItemState(id);
  +                             } catch (NoSuchItemStateException nsise) {
  +                                 // should never get here...
  +                                 String msg = "inconsistency: no transient state 
found for " + itemMgr.safeGetJCRPath(id);
  +                                 log.error(msg);
  +                                 throw new RepositoryException(msg);
  +                             }
  +                             // check if parent is also going to be saved
  +                             if (!dirty.contains(parentState)) {
  +                                 // need to save the parent too
  +                                 String msg = itemMgr.safeGetJCRPath(id) + " needs 
to be saved also.";
  +                                 log.error(msg);
  +                                 throw new RepositoryException(msg);
  +                             }
  +                         }
  +                     }
  +                     // added parents
  +                     diff.clear();
  +                     diff.addAll(newParentList);
  +                     if (diff.removeAll(oldParentList)) {
  +                         for (int i = 0; i < diff.size(); i++) {
  +                             NodeId id = new NodeId((String) diff.get(i));
  +                             NodeState parentState = null;
  +                             try {
  +                                 parentState = (NodeState) 
itemMgr.getTransientStateMgr().getItemState(id);
  +                             } catch (NoSuchItemStateException nsise) {
  +                                 // should never get here...
  +                                 String msg = "internal error: no transient state 
found for " + itemMgr.safeGetJCRPath(id);
  +                                 log.error(msg);
  +                                 throw new RepositoryException(msg);
  +                             }
  +                             // check if parent is also going to be saved
  +                             if (!dirty.contains(parentState)) {
  +                                 // need to save the parent too
  +                                 String msg = itemMgr.safeGetJCRPath(id) + " needs 
to be saved also.";
  +                                 log.error(msg);
  +                                 throw new RepositoryException(msg);
  +                             }
  +                         }
  +                     }
  +                 }
  +             }
  +         }
  +     }
  +
        // validate access and node type constraints
        // (this will also validate child removals)
        validateTransientItems(dirty.iterator());
  @@ -702,7 +770,7 @@
            // build list of transient descendents in the attic
            // (i.e. those marked as 'removed')
            ArrayList removed = new ArrayList();
  -         Iterator iter = 
itemMgr.getTransientStateMgr().getDescendantItemStatesInAttic(id);
  +         iter = itemMgr.getTransientStateMgr().getDescendantItemStatesInAttic(id);
            while (iter.hasNext()) {
                transientState = (ItemState) iter.next();
                // check if stale
  @@ -737,7 +805,7 @@
        persistTransientItems(dirty.iterator());
   
        // now it is safe to dispose the transient states
  -     Iterator iter = dirty.iterator();
  +     iter = dirty.iterator();
        while (iter.hasNext()) {
            transientState = (ItemState) iter.next();
            // dispose the transient state, it is no longer used
  
  
  
  1.5       +31 -25    
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ItemManager.java  22 Jun 2004 18:03:07 -0000      1.4
  +++ ItemManager.java  24 Jun 2004 16:31:06 -0000      1.5
  @@ -773,33 +773,39 @@
       }
   
       /**
  -     * @see HierarchyManager#getName(NodeId)
  +     * @see HierarchyManager#getName(ItemId)
        */
  -    public QName getName(NodeId id) throws ItemNotFoundException, 
RepositoryException {
  -     NodeState parentState;
  -     try {
  -         NodeState nodeState = (NodeState) getItemState(id);
  -         String parentUUID = nodeState.getParentUUID();
  -         if (parentUUID == null) {
  -             // this is the root or an orphaned node
  -             // FIXME
  -             return new QName(NamespaceRegistryImpl.NS_DEFAULT_URI, "");
  +    public QName getName(ItemId itemId) throws ItemNotFoundException, 
RepositoryException {
  +     if (itemId.denotesNode()) {
  +         NodeId nodeId = (NodeId) itemId;
  +         NodeState parentState;
  +         try {
  +             NodeState nodeState = (NodeState) getItemState(nodeId);
  +             String parentUUID = nodeState.getParentUUID();
  +             if (parentUUID == null) {
  +                 // this is the root or an orphaned node
  +                 // FIXME
  +                 return new QName(NamespaceRegistryImpl.NS_DEFAULT_URI, "");
  +             }
  +             parentState = (NodeState) getItemState(new NodeId(parentUUID));
  +         } catch (NoSuchItemStateException nsise) {
  +             String msg = "failed to resolve name of " + nodeId;
  +             log.error(msg, nsise);
  +             throw new RepositoryException(msg, nsise);
            }
  -         parentState = (NodeState) getItemState(new NodeId(parentUUID));
  -     } catch (NoSuchItemStateException nsise) {
  -         String msg = "failed to resolve name of " + id;
  -         log.error(msg, nsise);
  -         throw new RepositoryException(msg, nsise);
  -     }
   
  -     List entries = parentState.getChildNodeEntries(id.getUUID());
  -     if (entries.size() == 0) {
  -         String msg = "failed to resolve name of " + id;
  -         log.error(msg);
  -         throw new RepositoryException(msg);
  +         List entries = parentState.getChildNodeEntries(nodeId.getUUID());
  +         if (entries.size() == 0) {
  +             String msg = "failed to resolve name of " + nodeId;
  +             log.error(msg);
  +             throw new RepositoryException(msg);
  +         }
  +         NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) entries.get(0);
  +         return entry.getName();
  +     } else {
  +         PropertyId propId = (PropertyId) itemId;
  +         return propId.getName();
        }
  -     NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) entries.get(0);
  -     return entry.getName();
       }
   
       /**
  
  
  
  1.15      +3 -3      
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.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- NodeImpl.java     22 Jun 2004 18:03:07 -0000      1.14
  +++ NodeImpl.java     24 Jun 2004 16:31:06 -0000      1.15
  @@ -469,7 +469,7 @@
        }
   
        //QName name = getPrimaryPath().getNameElement().getName();
  -     QName name = itemMgr.getName((NodeId) id);
  +     QName name = itemMgr.getName(id);
        return name.toJCRName(ticket.getNamespaceResolver());
       }
   
  
  
  
  1.3       +2 -2      
jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/nodetypes.xml
  
  Index: nodetypes.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/nodetypes.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- nodetypes.xml     21 Jun 2004 09:37:41 -0000      1.2
  +++ nodetypes.xml     24 Jun 2004 16:31:07 -0000      1.3
  @@ -80,7 +80,7 @@
       </nodeType>
       <nodeType name="nt:childNodeDef" mixin="false" orderableChildNodes="false" 
supertypes="nt:base">
        <propertyDef name="jcr:name" type="String" valueConstraint="" defaultValue="" 
autoCreate="true" mandatory="true" onParentVersion="COPY" protected="false" 
primaryItem="false" multiple="false"/>
  -     <propertyDef name="jcr:requiredPrimaryTypes" type="String" valueConstraint="" 
defaultValue="" autoCreate="true" mandatory="true" onParentVersion="COPY" 
protected="false" primaryItem="false" multiple="true"/>
  +     <propertyDef name="jcr:requiredPrimaryTypes" type="String" valueConstraint="" 
defaultValue="nt:base" autoCreate="true" mandatory="true" onParentVersion="COPY" 
protected="false" primaryItem="false" multiple="true"/>
        <propertyDef name="jcr:defaultPrimaryType" type="String" valueConstraint="" 
defaultValue="" autoCreate="true" mandatory="true" onParentVersion="COPY" 
protected="false" primaryItem="false" multiple="false"/>
        <propertyDef name="jcr:autoCreate" type="Boolean" valueConstraint="" 
defaultValue="" autoCreate="true" mandatory="true" onParentVersion="COPY" 
protected="false" primaryItem="false" multiple="false"/>
        <propertyDef name="jcr:mandatory" type="Boolean" valueConstraint="" 
defaultValue="" autoCreate="true" mandatory="true" onParentVersion="COPY" 
protected="false" primaryItem="false" multiple="false"/>
  @@ -102,7 +102,7 @@
        <propertyDef name="jcr:frozenMixinTypes" type="String" valueConstraint="" 
defaultValue="" autoCreate="false" mandatory="false" onParentVersion="ABORT" 
protected="true" primaryItem="false" multiple="true"/>
        <propertyDef name="jcr:frozenUUID" type="String" valueConstraint="" 
defaultValue="" autoCreate="true" mandatory="true" onParentVersion="ABORT" 
protected="true" primaryItem="false" multiple="false"/>
        <propertyDef name="" type="Undefined" valueConstraint="" defaultValue="" 
autoCreate="false" mandatory="false" onParentVersion="ABORT" protected="true" 
primaryItem="false" multiple="true"/>
  -     <childNodeDef name="" requiredPrimaryTypes="" defaultPrimaryType="" 
autoCreate="false" mandatory="false" onParentVersion="ABORT" protected="false" 
primaryItem="false" sameNameSibs="true"/>
  +     <childNodeDef name="" requiredPrimaryTypes="nt:base" defaultPrimaryType="" 
autoCreate="false" mandatory="false" onParentVersion="ABORT" protected="false" 
primaryItem="false" sameNameSibs="true"/>
       </nodeType>
       <nodeType name="nt:query" mixin="false" orderableChildNodes="false" 
supertypes="nt:base">
        <propertyDef name="jcr:statement" type="String" valueConstraint="" 
defaultValue="" autoCreate="false" mandatory="false" onParentVersion="COPY" 
protected="false" primaryItem="false" multiple="false"/>
  
  
  
  1.6       +17 -2     
jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/state/TransientItemStateManager.java
  
  Index: TransientItemStateManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/state/TransientItemStateManager.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TransientItemStateManager.java    22 Jun 2004 18:02:33 -0000      1.5
  +++ TransientItemStateManager.java    24 Jun 2004 16:31:07 -0000      1.6
  @@ -72,6 +72,21 @@
                    // recurse
                    collectDescendantItemStates(childId, descendents);
                }
  +             // also add transient child nodes that have been unlinked from
  +             // the specified parent node but are not orphaned yet (i.e.
  +             // they are still linked to at least one other parent node)
  +             if (isCached(parentId)) {
  +                 NodeState parentState = (NodeState) retrieve(parentId);
  +                 Iterator iter = 
parentState.getRemovedChildNodeEntries().iterator();
  +                 while (iter.hasNext()) {
  +                     // removed child nodes
  +                     NodeState.ChildNodeEntry cne = (NodeState.ChildNodeEntry) 
iter.next();
  +                     NodeId removedChildId = new NodeId(cne.getUUID());
  +                     if (isCached(removedChildId)) {
  +                         descendents.add(retrieve(removedChildId));
  +                     }
  +                 }
  +             }
            }
        } catch (RepositoryException re) {
            log.warn("inconsistent hierarchy state", re);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to