CleanUtil.java

/*
 * Copyright (C) 2016 B3Partners B.V.
 */
package nl.b3p.brmo.test.util.database.dbunit;

import java.sql.SQLException;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.DefaultDataSet;
import org.dbunit.dataset.DefaultTable;
import org.dbunit.operation.DatabaseOperation;

/**
 * DBunit utility om databases leeg te maken.
 *
 * @author mprins
 */
public final class CleanUtil {

  /** private by design. */
  private CleanUtil() {}

  /**
   * leegt de BRK tabellen in het RSGB schema. kan worden gebruikt in een {@code @After} van een
   * test case.
   *
   * @param rsgb database welke geleegd moet worden
   * @param deleteBrondocument {@code true} als brondocumenten ook verwijderd moeten worden
   * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
   * @throws java.sql.SQLException als er iets misgaat in de database
   */
  public static void cleanRSGB_BRK(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
      throws DatabaseUnitException, SQLException {

    if (deleteBrondocument) {
      DatabaseOperation.TRUNCATE_TABLE.execute(
          rsgb, new DefaultDataSet(new DefaultTable[] {new DefaultTable("brondocument")}));
    }
    /* cleanup rsgb, doet:
           DELETE FROM herkomst_metadata;
           DELETE FROM zak_recht;
           DELETE FROM ingeschr_niet_nat_prs;
           ...
           DELETE FROM kad_perceel_archief;
           DELETE FROM kad_perceel;
           DELETE FROM kad_onrrnd_zk_archief;
           DELETE FROM kad_onrrnd_zk;
    dus omgekeerde volgorde tov. onderstaande array
    */
    DatabaseOperation.DELETE_ALL.execute(
        rsgb,
        new DefaultDataSet(
            new DefaultTable[] {
              new DefaultTable("kad_onrrnd_zk"),
              new DefaultTable("kad_onrrnd_zk_his_rel"),
              new DefaultTable("kad_onrrnd_zk_aantek"),
              new DefaultTable("kad_onrrnd_zk_archief"),
              new DefaultTable("kad_onrrnd_zk_aantek_archief"),
              new DefaultTable("kad_perceel"),
              new DefaultTable("kad_perceel_archief"),
              new DefaultTable("subject"),
              new DefaultTable("prs"),
              new DefaultTable("nat_prs"),
              new DefaultTable("ingeschr_nat_prs"),
              new DefaultTable("niet_ingezetene"),
              new DefaultTable("ander_nat_prs"),
              new DefaultTable("niet_nat_prs"),
              new DefaultTable("ingeschr_niet_nat_prs"),
              new DefaultTable("app_re"),
              new DefaultTable("app_re_archief"),
              new DefaultTable("zak_recht"),
              new DefaultTable("zak_recht_archief"),
              new DefaultTable("zak_recht_aantek"),
              new DefaultTable("benoemd_obj_kad_onrrnd_zk"),
              new DefaultTable("herkomst_metadata"),
              // schemaspy geeft de volgende volgorde
              //  new DefaultTable("subject"),
              //  new DefaultTable("prs"),
              //  new DefaultTable("kad_onrrnd_zk"),
              //  new DefaultTable("kad_perceel"),
              //  new DefaultTable("niet_nat_prs"),
              //  new DefaultTable("nat_prs"),
              //  new DefaultTable("ingeschr_nat_prs"),
              //  new DefaultTable("app_re"),
              //  new DefaultTable("zak_recht"),
              //  new DefaultTable("ander_btnlnds_niet_nat_prs"),
              //  new DefaultTable("ander_nat_prs"),
              //  new DefaultTable("benoemd_obj_kad_onrrnd_zk"),
              //  new DefaultTable("ingeschr_niet_nat_prs"),
              //  new DefaultTable("kad_onrrnd_zk_his_rel"),
              //  new DefaultTable("niet_ingezetene"),
              //  new DefaultTable("app_re_kad_perceel"),
              //  new DefaultTable("ingezetene"),
              //  new DefaultTable("kad_onrrnd_zk_aantek"),
              //  new DefaultTable("kad_onrrnd_zk_kad_onrrnd_zk"),
              //  new DefaultTable("zak_recht_aantek"),
              //  new DefaultTable("app_re_archief"),
              //  new DefaultTable("app_re_kad_perceel_archief"),
              ////  new DefaultTable("brondocument"),
              //  new DefaultTable("kad_onrrnd_zk_aantek_archief"),
              //  new DefaultTable("kad_onrrnd_zk_archief"),
              //  new DefaultTable("kad_onrrnd_zk_kad_onrr_archief"),
              //  new DefaultTable("kad_perceel_archief"),
              //  new DefaultTable("zak_recht_archief"),
            }));
  }

  /**
   * leegt de BRK 2 tabellen in het BRK schema. kan worden gebruikt in een {@code @After} van een
   * test case.
   *
   * @param rsgbbrk database welke geleegd moet worden moeten worden
   * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
   * @throws java.sql.SQLException als er iets misgaat in de database
   */
  public static void cleanRSGB_BRK2(final IDatabaseConnection rsgbbrk)
      throws DatabaseUnitException, SQLException {

    DatabaseOperation.DELETE_ALL.execute(
        rsgbbrk,
        new DefaultDataSet(
            new DefaultTable[] {
              // TODO mogelijk de volgorde nog aanpassen
              new DefaultTable("onroerendezaak"),
              new DefaultTable("nietnatuurlijkpersoon"),
              new DefaultTable("adres"),
              new DefaultTable("natuurlijkpersoon"),
              new DefaultTable("stuk"),
              new DefaultTable("stukdeel"),
              new DefaultTable("persoon"),
              new DefaultTable("recht"),
              new DefaultTable("publiekrechtelijkebeperking"),
              new DefaultTable("onroerendezaakbeperking_archief"),
              new DefaultTable("onroerendezaakfiliatie"),
              new DefaultTable("recht_isbeperkttot"),
              new DefaultTable("objectlocatie"),
              new DefaultTable("onroerendezaakbeperking"),
              new DefaultTable("recht_aantekeningrecht"),
              new DefaultTable("recht_archief"),
              new DefaultTable("recht_isbelastmet"),
              new DefaultTable("appartementsrecht"),
              new DefaultTable("appartementsrecht_archief"),
              new DefaultTable("objectlocatie_archief"),
              new DefaultTable("onroerendezaak_archief"),
              new DefaultTable("perceel"),
              new DefaultTable("perceel_archief"),
              new DefaultTable("recht_aantekeningrecht_archief"),
              new DefaultTable("recht_isbelastmet_archief"),
              new DefaultTable("recht_isbeperkttot_archief"),
            }));
  }

  /**
   * Leeg de subject en onderliggende tabellen die betrokken zijn bij BRP.
   *
   * @param rsgb database welke geleegd moet worden
   * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
   * @throws java.sql.SQLException als er iets misgaat in de database
   */
  public static void cleanRSGB_BRP(final IDatabaseConnection rsgb)
      throws DatabaseUnitException, SQLException {
    CleanUtil.cleanRSGB_BRP(rsgb, true);
  }

  /**
   * Leeg de subject en onderliggende tabellen die betrokken zijn bij BRP. NB. deze cleanup is niet
   * bijzonder slim, alle (natuurlijke) personen worden verwijderd, dus ook uit brk.
   *
   * @param rsgb database welke geleegd moet worden
   * @param deleteBrondocument {@code true} als brondocumenten ook verwijderd moeten worden
   * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
   * @throws java.sql.SQLException als er iets misgaat in de database
   */
  public static void cleanRSGB_BRP(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
      throws DatabaseUnitException, SQLException {
    if (deleteBrondocument) {
      DatabaseOperation.DELETE_ALL.execute(
          rsgb, new DefaultDataSet(new DefaultTable[] {new DefaultTable("brondocument")}));
    }
    /* cleanup rsgb, doet:

     DELETE FROM herkomst_metadata;
     ...
     DELETE FROM subject;
    dus omgekeerde volgorde tov. onderstaande array
     */
    DatabaseOperation.DELETE_ALL.execute(
        rsgb,
        new DefaultDataSet(
            new DefaultTable[] {
              new DefaultTable("subject"),
              new DefaultTable("prs"),
              new DefaultTable("nat_prs"),
              new DefaultTable("ingeschr_nat_prs"),
              new DefaultTable("niet_ingezetene"),
              new DefaultTable("ander_nat_prs"),
              new DefaultTable("niet_nat_prs"),
              new DefaultTable("ingeschr_niet_nat_prs"),
              new DefaultTable("ouder_kind_rel"),
              new DefaultTable("huw_ger_partn"),
              new DefaultTable("herkomst_metadata")
            }));
  }

  /**
   * ruimt personen en kvk tabellen op.
   *
   * @param rsgb database welke opgeruimd moet worden
   * @throws DatabaseUnitException als er een DBunit fout optreedt
   * @throws SQLException als er iets misgaat in de database
   */
  public static void cleanRSGB_NHR(final IDatabaseConnection rsgb)
      throws DatabaseUnitException, SQLException {
    cleanRSGB_NHR(rsgb, true);
  }

  /**
   * ruimt personen en kvk tabellen op (en ook BRP tabellen).
   *
   * @param rsgb database welke opgeruimd moet worden
   * @param deleteBrondocument {@code true} als brondocumenten ook verwijderd
   * @throws DatabaseUnitException als er iets mis gaat met DBunit, bijv verkeerde volgorde van
   *     verwijderen
   * @throws SQLException als er iets mis gaat met uitvieren van de deletes
   */
  public static void cleanRSGB_NHR(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
      throws DatabaseUnitException, SQLException {

    DatabaseOperation.DELETE_ALL.execute(
        rsgb,
        new DefaultDataSet(
            new DefaultTable[] {
              new DefaultTable("sbi_activiteit"),
              new DefaultTable("functionaris"),
              new DefaultTable("ondrnmng"),
              new DefaultTable("maatschapp_activiteit"),
              new DefaultTable("vestg"),
              new DefaultTable("vestg_activiteit"),
              new DefaultTable("vestg_naam"),
              new DefaultTable("ander_btnlnds_niet_nat_prs"),
            }));
    cleanRSGB_BRP(rsgb, deleteBrondocument);
  }

  /**
   * ruimt WOZ en subject tabellen op (dus ook BRP tabellen).
   *
   * @param rsgb database welke opgeruimd moet worden
   * @param deleteBrondocument {@code true} als alle brondocumenten ook verwijderd moeten worden
   * @throws DatabaseUnitException als er iets mis gaat met DBunit, bijv verkeerde volgorde van
   *     verwijderen
   * @throws SQLException als er iets mis gaat met uitvieren van de deletes
   */
  public static void cleanRSGB_WOZ(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
      throws DatabaseUnitException, SQLException {

    DatabaseOperation.DELETE_ALL.execute(
        rsgb,
        new DefaultDataSet(
            new DefaultTable[] {
              new DefaultTable("woz_obj"),
              new DefaultTable("woz_deelobj"),
              new DefaultTable("woz_waarde"),
              new DefaultTable("woz_omvat"),
              new DefaultTable("woz_belang"),
              new DefaultTable("woz_deelobj_archief"),
              new DefaultTable("woz_obj_archief"),
              new DefaultTable("woz_waarde_archief"),
              new DefaultTable("locaand_adres"),
              new DefaultTable("locaand_openb_rmte"),
            }));
    // WOZ bevat ook vestigingen, NHR leegt ook BRP
    cleanRSGB_NHR(rsgb, deleteBrondocument);
  }

  /**
   * leegt de bericht, laadproces en job tabellen en de automatsiche processen in het staging
   * schema. kan worden gebruikt in een {@code @After} van een test case.
   *
   * @param staging database welke geleegd moet worden
   * @param includeProcessen {@code true} als alle automatische processen ook verwijderd moeten
   *     worden
   * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
   * @throws java.sql.SQLException als er iets misgaat in de database
   */
  public static void cleanSTAGING(final IDatabaseConnection staging, final boolean includeProcessen)
      throws DatabaseUnitException, SQLException {
    if (includeProcessen) {
      DatabaseOperation.DELETE_ALL.execute(
          staging,
          new DefaultDataSet(
              new DefaultTable[] {
                new DefaultTable("automatisch_proces"),
                new DefaultTable("automatisch_proces_config")
              }));
    }
    DatabaseOperation.DELETE_ALL.execute(
        staging,
        new DefaultDataSet(
            new DefaultTable[] {
              new DefaultTable("laadproces"), new DefaultTable("bericht"), new DefaultTable("job")
            }));
  }
}