Exemplo n.º 1
0
  private void uninstall(PackageModel model, Map<String, DatabaseAction> associatedDatabases) {
    progress.status("Uninstallation process is running...", 1, LogLevel.INFO);
    String ofr = model.getName() + PackageFileType.PACKAGE_OFR.getDotExtension();
    try {
      InputStream stream =
          OPFEngine.FileStoreService.download(
              OpenFlame.FILESTORE_BASE,
              ofr,
              helper.getVersion(),
              model.getId().toString(),
              model.getDatabaseVersion().toString());
      InputStream xml = ArchiveUtils.getFile(stream, PackageFileType.PACKAGE_XML.getOfrFileName());
      IPackageDescriptor descriptor = packageInstallationService.getPackageDescriptor(xml);
      IOUtils.closeQuietly(xml);
      IOUtils.closeQuietly(stream);

      Map<String, List<String>> tablesMap =
          packageInstallationService.generateSQLTables(descriptor);
      int droppedDatabases = 0;
      for (Map.Entry<String, DatabaseAction> entry : associatedDatabases.entrySet()) {
        String lookup = entry.getKey();
        DatabaseAction databaseAction = entry.getValue();
        if (DatabaseActionType.DROP.equals(databaseAction.getAction())) {
          Database database = databaseAction.getDatabase();

          List<String> tables = tablesMap.get(lookup);
          if (tables != null && tables.size() != 0) {
            databaseManager.dropTables(database, tables);

            progress.status(
                "... database '" + database.getUrlPath() + "' dropping process is running",
                2,
                LogLevel.DEBUG);
            databaseManager.dropDatabase(database);
            progress.status(
                "database '" + database.getUrlPath() + "' dropping process has been finished",
                1,
                LogLevel.DEBUG);
            droppedDatabases++;
          }
        }
      }
      if (droppedDatabases > 0) {
        progress.status("all tables have been dropped.", 1, LogLevel.DEBUG);
      }
    } catch (IOException e) {
      logger.error(e.getMessage(), e);
    }
  }