@Override
  public void validatePlatform() throws InstallException {

    super.validatePlatform();
    try {

      boolean valid = true;

      FileObject catalinaJar = targetLibDir.resolveFile("catalina.jar");

      if (catalinaJar == null
          || !catalinaJar.exists()
          || !catalinaJar.getType().getName().equals(FileType.FILE.getName())) {
        valid = false;
        getPrinter().printErrStatus("CatalinaHome", "Cannot find catalina");
      }

      FileObject serverXml = targetConfDir.resolveFile("server.xml");
      if (serverXml == null
          || !serverXml.exists()
          || !serverXml.getType().getName().equals(FileType.FILE.getName())) {
        valid = false;
        getPrinter().printErrStatus("CatalinaHome", "Cannot find server.xml");
      }

      // TODO : Validate Version ?

      if (!valid)
        throw new InstallException(
            "Target does not seem a " + getTargetPlatform().getDescription() + " install.");

    } catch (IOException e) {
      getPrinter().printErrStatus("CatalinaHome", e.getMessage());
      throw new InstallException(e.getMessage(), e);
    }

    getPrinter().printOkStatus("CatalinaHome");
  }
  @Override
  public boolean backupAgentConfigurations(boolean remove) {
    try {
      super.backupAgentConfigurations(remove);
      // backup jaas.conf
      FileObject jaasConfigFile = targetConfDir.resolveFile("jaas.conf");
      if (jaasConfigFile.exists()) {
        // backup file in the same folder it is installed
        backupFile(jaasConfigFile, jaasConfigFile.getParent());
        if (remove) {
          jaasConfigFile.delete();
        }
      }
      // backup setenv.sh and setenv.bat
      FileObject[] libs = targetBinDir.getChildren();
      for (int i = 0; i < libs.length; i++) {
        FileObject cfgFile = libs[i];

        if (!cfgFile.getType().getName().equals(FileType.FILE.getName())) {
          // ignore folders
          continue;
        }
        if (cfgFile.getName().getBaseName().startsWith("setenv")
            && (cfgFile.getName().getBaseName().endsWith(".sh")
                || cfgFile.getName().getBaseName().endsWith(".bat"))) {
          // backup files in the same folder they're installed in
          backupFile(cfgFile, cfgFile.getParent());
          if (remove) {
            cfgFile.delete();
          }
        }
      }
    } catch (Exception e) {
      getPrinter().printErrStatus("BackupAgentConfigurations", e.getMessage());
      return false;
    }
    return true;
  }