Example #1
0
 /**
  * Get the container which security callback affects this item. This searches up the path of
  * parents to see wether it can find any container with a callback. If no callback can be found,
  * null is returned.
  *
  * @param vfsItem
  * @return
  */
 public static VFSContainer findInheritingSecurityCallbackContainer(VFSItem vfsItem) {
   if (vfsItem == null) return null;
   // first resolve delegates of any NamedContainers to get the actual container (might be a
   // MergeSource)
   if (vfsItem instanceof NamedContainerImpl)
     return findInheritingSecurityCallbackContainer(((NamedContainerImpl) vfsItem).getDelegate());
   // special treatment for MergeSource
   if (vfsItem instanceof MergeSource) {
     MergeSource mergeSource = (MergeSource) vfsItem;
     VFSContainer rootWriteContainer = mergeSource.getRootWriteContainer();
     if (rootWriteContainer != null && rootWriteContainer.getLocalSecurityCallback() != null) {
       // if the root write container has a security callback set, it will always override
       // any local securitycallback set on the mergesource
       return rootWriteContainer;
     } else if (mergeSource.getLocalSecurityCallback() != null) {
       return mergeSource;
     } else if (mergeSource.getParentContainer() != null) {
       return findInheritingSecurityCallbackContainer(mergeSource.getParentContainer());
     }
   } else {
     if ((vfsItem instanceof VFSContainer) && (vfsItem.getLocalSecurityCallback() != null))
       return (VFSContainer) vfsItem;
     if (vfsItem.getParentContainer() != null)
       return findInheritingSecurityCallbackContainer(vfsItem.getParentContainer());
   }
   return null;
 }