/**
  * Find a file database by its name
  *
  * @param name of the file database.
  * @return the found file database or null if none exists.
  */
 public DefaultFileDatabase getFileDatabase(String name) {
   DefaultFileDatabase db = null;
   boolean found = false;
   Iterator<DefaultFileDatabase> iter = fileDatabases.iterator();
   while (iter.hasNext() && !found) {
     DefaultFileDatabase temp = iter.next();
     if (temp.getName().equals(name)) {
       found = true;
       db = temp;
     }
   }
   return db;
 }
  /**
   * Helper method to delete a file Database.
   *
   * @param name the name of the database to delete
   * @return true if the file datbase is deleted.
   */
  public boolean deleteDatabase(String name) {
    DefaultFileDatabase fd = getFileDatabase(name.trim());
    boolean removed = false;

    if (fileDatabases.contains(fd)) {
      FileSystemManager.deleteDirectory(fd.getFullPath());

      if (!fileDatabases.remove(fd)) {
        throw new IllegalStateException(
            "Folder was deleted from file system"
                + "but file database "
                + fd.getName()
                + " could not be removed from database server");
      } else {
        removed = true;
      }
    }
    return removed;
  }
  /**
   * Create a new file database with the specified name and unique folder name.
   *
   * @param displayName name displayed to the user
   * @param name of the file database used when creating the dabase in the file system.
   * @param path of the file database
   * @return the created file database
   * @throws LocationAlreadyExistsException - if the location already exists
   */
  public DefaultFileDatabase createFileDatabase(
      String displayName, String name, String path, String description)
      throws LocationAlreadyExistsException {

    if (path == null) {
      throw new IllegalStateException("The path cannot be null");
    }

    if (name == null) {
      throw new IllegalStateException("the name cannot be null");
    }

    // create the new file database
    DefaultFileDatabase FileDatabaseImpl = new DefaultFileDatabase();
    FileDatabaseImpl.setDisplayName(displayName);
    FileDatabaseImpl.setName(name);
    FileDatabaseImpl.setPath(path);
    FileDatabaseImpl.setFileServer(this);

    // create a folder for this file database
    FileSystemManager.createDirectory(FileDatabaseImpl.getFullPath());

    fileDatabases.add(FileDatabaseImpl);
    return FileDatabaseImpl;
  }
  /**
   * Rename the file database.
   *
   * @param oldName - old name of the file database
   * @param name - new name to give the file database.
   * @return true if the the file database is renamed.
   */
  public boolean renameFileDatabase(String currentName, String newName) {
    boolean renamed = false;
    DefaultFileDatabase fd = getFileDatabase(currentName);
    if (fileDatabases.contains(fd)) {

      // make sure the new folder name does not exist
      File f = new File(fd.getPath() + newName.trim());
      if (!f.exists()) {
        if (!FileSystemManager.renameFile(
            new File(fd.getFullPath()), new File(fd.getPath() + newName))) {
          throw new IllegalStateException("Could not rename file");
        }
        fileDatabases.remove(fd);
      }
      fd.setName(newName);
      fileDatabases.add(fd);

      renamed = true;
    }

    return renamed;
  }