ozeigermann    2004/02/25 07:15:15

  Modified:    src/share/org/apache/slide/store ExtendedStore.java
  Log:
  - Fixed initialization bug when caching it turned off

  - Cleaned code for permission and lock caching
  
  Revision  Changes    Path
  1.7       +61 -73    
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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ExtendedStore.java        25 Feb 2004 13:10:19 -0000      1.6
  +++ ExtendedStore.java        25 Feb 2004 15:15:14 -0000      1.7
  @@ -528,25 +528,11 @@
           if (securityStore.cacheResults()) {
               enlist(this);
               try {
  -                NodePermission tempPermission = permission.cloneObject();
  -                Object value = permissionsCache.get(uri.toString());
  -                if (value == null) {
  -                    // populate the cache with the existing entries
  -                    enumeratePermissions(uri);
  -                    // and check if the cache contains a corresponding entry now
  -                    value = permissionsCache.get(uri.toString());
  -                    if (value == null) {
  -                        // no permissions for the Uri in the cache, so create a new
  -                        // entry
  -                        Vector permissionsVector = new Vector();
  -                        permissionsVector.addElement(tempPermission);
  -                        permissionsCache.put(uri.toString(), permissionsVector);
  -                    }
  -                } else {
  -                    Vector permissionsVector = new Vector((Vector) value);
  -                    permissionsVector.addElement(tempPermission);
  -                    permissionsCache.put(uri.toString(), permissionsVector);
  -                }
  +                Vector permissionsVector = fillPermissionsCache(uri);
  +                // operate on a copy
  +                Vector tempPermissions = (Vector )permissionsVector.clone();
  +                tempPermissions.addElement(permission);
  +                permissionsCache.put(uri.toString(), tempPermissions);
               } finally {
                   delist(this);
               }
  @@ -558,13 +544,11 @@
           if (securityStore.cacheResults()) {
               enlist(this);
               try {
  -                Object value = permissionsCache.get(uri.toString());
  -                Vector permissionsVector = null;
  -                if (value != null) {
  -                    permissionsVector = new Vector((Vector) value);
  -                    permissionsVector.removeElement(permission);
  -                    permissionsCache.put(uri.toString(), permissionsVector);
  -                }
  +                Vector permissionsVector = fillPermissionsCache(uri);
  +                // operate on a copy
  +                Vector tempPermissions = (Vector )permissionsVector.clone();
  +                tempPermissions.removeElement(permission);
  +                permissionsCache.put(uri.toString(), tempPermissions);
               } finally {
                   delist(this);
               }
  @@ -593,20 +577,7 @@
                   enlist(this);
               }
               try {
  -                Object value = permissionsCache.get(uri.toString());
  -                Vector permissionsVector = null;
  -                if (value != null) {
  -                    permissionsVector = (Vector) value;
  -                } else {
  -                    permissionsVector = new Vector();
  -                    Enumeration tempEnum = securityStore.enumeratePermissions(uri);
  -                    while (tempEnum.hasMoreElements()) {
  -                        NodePermission tempPermission = (NodePermission) 
tempEnum.nextElement();
  -                        tempPermission.validate(uri.toString());
  -                        permissionsVector.addElement(tempPermission);
  -                    }
  -                    permissionsCache.put(uri.toString(), permissionsVector);
  -                }
  +                Vector permissionsVector = fillPermissionsCache(uri);
                   return ((Vector) permissionsVector.clone()).elements();
               } finally {
                   if (isForceStoreEnlistment(uri)) {
  @@ -623,15 +594,11 @@
           if (lockStore.cacheResults()) {
               enlist(this);
               try {
  -                Object value = locksCache.get(uri.toString());
  -                Vector locksVector = null;
  -                if (value == null) {
  -                    locksVector = new Vector();
  -                } else {
  -                    locksVector = new Vector((Vector)value);
  -                }
  -                locksVector.addElement(lock.cloneObject());
  -                locksCache.put(uri.toString(), locksVector);
  +                Vector locks = fillLocksCache(uri);
  +                // operate on a copy
  +                Vector tempLocks = (Vector) locks.clone();
  +                tempLocks.addElement(lock.cloneObject());
  +                locksCache.put(uri.toString(), tempLocks);
               } finally {
                   delist(this);
               }
  @@ -646,7 +613,7 @@
                   Object value = locksCache.get(uri.toString());
                   Vector locksVector = null;
                   if (value != null) {
  -                    locksVector = new Vector((Vector)value);
  +                    locksVector = new Vector((Vector) value);
                       boolean wasPresent = locksVector.removeElement(lock);
                       if (!wasPresent) {
                           throw new LockTokenNotFoundException(lock);
  @@ -668,13 +635,13 @@
                   Object value = locksCache.get(uri.toString());
                   Vector locksVector = null;
                   if (value != null) {
  -                    locksVector = new Vector((Vector)value);
  +                    locksVector = new Vector((Vector) value);
                       boolean wasPresent = locksVector.removeElement(lock);
                       if (!wasPresent) {
                           throw new LockTokenNotFoundException(lock);
                       }
  +                    locksCache.put(uri.toString(), locksVector);
                   }
  -                locksCache.put(uri.toString(), locksVector);
               } finally {
                   delist(this);
               }
  @@ -689,13 +656,13 @@
                   Object value = locksCache.get(uri.toString());
                   Vector locksVector = null;
                   if (value != null) {
  -                    locksVector = new Vector((Vector)value);
  +                    locksVector = new Vector((Vector) value);
                       boolean wasPresent = locksVector.removeElement(lock);
                       if (!wasPresent) {
                           throw new LockTokenNotFoundException(lock);
                       }
  +                    locksCache.put(uri.toString(), locksVector);
                   }
  -                locksCache.put(uri.toString(), locksVector);
               } finally {
                   delist(this);
               }
  @@ -708,21 +675,8 @@
                   enlist(this);
               }
               try {
  -                Object value = locksCache.get(uri.toString());
  -                Vector locksVector = null;
  -                if (value == null) {
  -                    locksVector = new Vector();
  -                    Enumeration lockList = lockStore.enumerateLocks(uri);
  -                    while (lockList.hasMoreElements()) {
  -                        NodeLock tempLock = (NodeLock) lockList.nextElement();
  -                        tempLock.validate(uri.toString());
  -                        locksVector.addElement(tempLock);
  -                    }
  -                    locksCache.put(uri.toString(), locksVector);
  -                } else {
  -                    locksVector = (Vector) value;
  -                }
  -                return ((Vector) locksVector.clone()).elements();
  +                Vector locks = fillLocksCache(uri);
  +                return ((Vector) locks.clone()).elements();
               } finally {
                   if (isForceStoreEnlistment(uri)) {
                       delist(this);
  @@ -937,6 +891,40 @@
   
       public String toString() {
           return getName() + "(" + getClass().getName() + ")";
  +    }
  +
  +    protected Vector fillPermissionsCache(Uri uri) throws ServiceAccessException {
  +        Vector permissions = (Vector) permissionsCache.get(uri.toString());
  +        if (permissions != null) {
  +            return permissions;
  +        } else {
  +            permissions = new Vector();
  +            Enumeration permissionsList = securityStore.enumeratePermissions(uri);
  +            while (permissionsList.hasMoreElements()) {
  +                NodePermission tempPermission = (NodePermission) 
permissionsList.nextElement();
  +                tempPermission.validate(uri.toString());
  +                permissions.addElement(tempPermission);
  +            }
  +            permissionsCache.put(uri.toString(), permissions);
  +            return permissions;
  +        }
  +    }
  +
  +    protected Vector fillLocksCache(Uri uri) throws ServiceAccessException {
  +        Vector locksVector = (Vector) locksCache.get(uri.toString());
  +        if (locksVector != null) {
  +            return locksVector;
  +        } else {
  +            locksVector = new Vector();
  +            Enumeration lockList = lockStore.enumerateLocks(uri);
  +            while (lockList.hasMoreElements()) {
  +                NodeLock tempLock = (NodeLock) lockList.nextElement();
  +                tempLock.validate(uri.toString());
  +                locksVector.addElement(tempLock);
  +            }
  +            locksCache.put(uri.toString(), locksVector);
  +            return locksVector;
  +        }
       }
   
       //
  
  
  

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

Reply via email to