@Override
  public void pruneHistory(long maxHistoryLength, ProgressDelegate progress) {
    VFSContainer versionsContainer = getRootVersionsContainer();
    if (!versionsContainer.exists()) {
      return;
    }
    // delete folder without versioning first

    int count = 0;
    String[] excludedRootFolders = new String[] {"tmp", "scorm", "forum", "portfolio"};
    for (String excludedRootFolder : excludedRootFolders) {
      VFSItem excludedContainer = versionsContainer.resolve(excludedRootFolder);
      if (excludedContainer instanceof LocalFolderImpl) {
        File excludedFile = ((LocalFolderImpl) excludedContainer).getBasefile();
        FileUtils.deleteQuietly(excludedFile);
        if (progress != null) progress.setInfo(excludedContainer.getName());
      }
      if (progress != null) progress.setActual(++count);
    }

    if (maxHistoryLength < 0) {
      // nothing to do
    } else if (maxHistoryLength == 0 && versionsContainer instanceof LocalFolderImpl) {
      // delete all the stuff
      FileUtils.deleteQuietly(((LocalFolderImpl) versionsContainer).getBasefile());
    } else {
      pruneVersionHistory(versionsContainer, maxHistoryLength, progress, count);
    }

    if (progress != null) progress.finished();
  }
  private void crawlForOrphans(VFSContainer container, List<OrphanVersion> orphans) {
    if (!container.exists()) {
      return;
    }

    List<VFSItem> children = container.getItems();
    for (VFSItem child : children) {
      if (child instanceof VFSContainer) {
        crawlForOrphans((VFSContainer) child, orphans);
      }
      if (child instanceof VFSLeaf) {
        VFSLeaf versionsLeaf = (VFSLeaf) child;
        if (child.getName().endsWith(".xml")) {
          Versions versions = isOrphan(versionsLeaf);
          if (versions == null) {
            continue;
          } else {
            List<VFSRevision> revisions = versions.getRevisions();
            if (revisions != null) {
              for (VFSRevision revision : revisions) {
                if (revision instanceof RevisionFileImpl) {
                  ((RevisionFileImpl) revision).setContainer(container);
                }
              }
            }
          }
          File originalFile = reversedOriginFile(child);
          if (!originalFile.exists()) {
            VFSLeaf orphan = new LocalFileImpl(originalFile);
            orphans.add(new OrphanVersion(orphan, versionsLeaf, versions));
          }
        }
      }
    }
  }
 @Test
 public void testGenerateDir() {
   String uuid = UUID.randomUUID().toString();
   String dir = qpoolFileStorage.generateDir(uuid);
   Assert.assertNotNull(dir);
   VFSContainer container = qpoolFileStorage.getContainer(dir);
   Assert.assertTrue(container.exists());
 }
 @Override
 public int countDirectories() {
   VFSContainer versionsContainer = getRootVersionsContainer();
   if (versionsContainer.exists()) {
     return countDirectories(versionsContainer);
   }
   return 0;
 }