protected boolean checkResourceName(String resourceName) {
   if (resourceName.indexOf('\\') != -1) return false; // don't allow backslashes
   if (resourceName.indexOf(':') != -1) return false; // don't allow colons
   if (resourceName.indexOf("..") != -1) return false; // don't allow parent indicators
   if ("/".indexOf(resourceName.charAt(0)) != -1) return false; // don't allow absolute paths
   // defer to our file filter
   return strategy.getFilenameFilter().accept(directory, resourceName);
 }
 public List<String> listResourceNames() {
   return FileUtils.listRecursively(directory, strategy.getFilenameFilter());
 }
 public boolean requiresWriteLock(String resourceName) {
   FilenameFilter unlocked = strategy.getUnlockedFilter();
   if (unlocked == null) return true;
   else return !unlocked.accept(null, resourceName);
 }
 public Object getLockTarget() {
   return new File(directory, strategy.getLockFilename());
 }
 public void backupCollection(String backupQualifier) throws IOException {
   synchronized (writeLock) {
     mostRecentBackup = strategy.getBackupHandler(directory).backup(backupQualifier);
   }
 }