ozeigermann    2003/12/16 16:03:22

  Modified:    src/share/org/apache/slide/store ExtendedStore.java
               src/share/org/apache/slide/macro MacroImpl.java
               src/share/org/apache/slide/structure ObjectNode.java
  Log:
  Added correct caching and removal of Links.
  
  Submitted by: Christophe Lombart
  
  
  Revision  Changes    Path
  1.2       +21 -4     
jakarta-slide/src/share/org/apache/slide/store/ExtendedStore.java
  
  Index: ExtendedStore.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/store/ExtendedStore.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ExtendedStore.java        14 Nov 2003 12:52:52 -0000      1.1
  +++ ExtendedStore.java        17 Dec 2003 00:03:22 -0000      1.2
  @@ -81,6 +81,7 @@
   import org.apache.slide.lock.LockTokenNotFoundException;
   import org.apache.slide.lock.NodeLock;
   import org.apache.slide.security.NodePermission;
  +import org.apache.slide.structure.LinkNode;
   import org.apache.slide.structure.ObjectAlreadyExistsException;
   import org.apache.slide.structure.ObjectNode;
   import org.apache.slide.structure.ObjectNotFoundException;
  @@ -476,6 +477,15 @@
           if (nodeStore.cacheResults()) {
               enlist(this);
               try {
  +                
  +                if (object instanceof LinkNode) {
  +                    // add the link into the "linked" object if it is in the cache
  +                   String linkedUri = ((LinkNode) object).getLinkedUri();
  +                   ObjectNode linkedObject = (ObjectNode) 
objectsCache.get(linkedUri);
  +                   if (linkedObject != null) {
  +                       linkedObject.addLink((LinkNode)object);
  +                   }
  +                }
                   objectsCache.put(uri.toString(), object.cloneObject());
               } finally {
                   delist(this);
  @@ -488,6 +498,13 @@
           if (nodeStore.cacheResults()) {
               enlist(this);
               try {
  +                if (object instanceof LinkNode) {
  +                    // check if the linked object is in the cache, and remove the 
linknode  fromits link vector
  +                    ObjectNode linkedObject = (ObjectNode) 
objectsCache.get(((LinkNode)object).getLinkedUri());
  +                    if (linkedObject !=null) {
  +                        linkedObject.removeLink((LinkNode) object);
  +                    }
  +                }
                   objectsCache.remove(uri.toString());
               } finally {
                   delist(this);
  
  
  
  1.35      +15 -5     jakarta-slide/src/share/org/apache/slide/macro/MacroImpl.java
  
  Index: MacroImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/macro/MacroImpl.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- MacroImpl.java    7 Sep 2003 15:49:47 -0000       1.34
  +++ MacroImpl.java    17 Dec 2003 00:03:22 -0000      1.35
  @@ -794,6 +794,16 @@
                           deleteObject(token, childUri, e, deleteRedirector, 
deleteListener);
                       }
                   }
  +
  +                             // Removing links objects
  +                             if (currentObject.hasLinks()) {
  +                                     Enumeration links = 
currentObject.enumerateLinks();
  +                                     while (links.hasMoreElements()) {
  +                                             String linkUri = 
(String)links.nextElement();
  +                                             deleteObject(token, linkUri, e, 
deleteRedirector, deleteListener);
  +                                     }
  +                             }
  +                
                   
                   // now let the client redirect
                   if (deleteRedirector != null) {
  @@ -808,7 +818,7 @@
                   
                   NodeRevisionDescriptors revisionDescriptors =
                       contentHelper.retrieve(token, currentObject.getUri());
  -                
  +               
                   // remove the associated locks
                   Enumeration locks = lockHelper.enumerateLocks
                       (token, currentObject.getUri(), false);
  
  
  
  1.22      +32 -5     
jakarta-slide/src/share/org/apache/slide/structure/ObjectNode.java
  
  Index: ObjectNode.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/structure/ObjectNode.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- ObjectNode.java   14 Nov 2003 09:11:47 -0000      1.21
  +++ ObjectNode.java   17 Dec 2003 00:03:22 -0000      1.22
  @@ -358,7 +358,16 @@
       public boolean hasChildren() {
           return !(getChildren().isEmpty());
       }
  +
       
  +     /**
  +      * Test if object has links.
  +      *
  +      * @return boolean true if this object has links, false otherwise
  +      */
  +     public boolean hasLinks() {
  +             return !( links.isEmpty());
  +     }    
       /**
        * Return this object's inbound links
        *
  @@ -470,7 +479,16 @@
       public void addChild( ObjectNode child ) {
           addBinding( child.getPath().lastSegment(), child );
       }
  +
       
  +     /**
  +      * Add a link.
  +      * @param   link               an LinkNode
  +      */
  +     public void addLink( LinkNode link ) {
  +          links.add(link.getUri());
  +     }
  +     
       /**
        * Add a new binding.
        * @param    bindingName         a  String
  @@ -514,7 +532,16 @@
           childrenCache = null;
           child.removeParentBinding(bindingName, this);
       }
  -    
  +
  +     /**
  +      * Remove link.
  +      *
  +      * @param link
  +      */
  +     public void removeLink(LinkNode link) {    
  +         links.remove(link.getUri());
  +     }
  +     
       /**
        * Get the path of this object node.
        *
  
  
  

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

Reply via email to