View Javadoc
1   /*
2    * Copyright (C) 2016 B3Partners B.V.
3    */
4   package nl.b3p.brmo.test.util.database.dbunit;
5   
6   import java.sql.SQLException;
7   import org.dbunit.DatabaseUnitException;
8   import org.dbunit.database.IDatabaseConnection;
9   import org.dbunit.dataset.DefaultDataSet;
10  import org.dbunit.dataset.DefaultTable;
11  import org.dbunit.operation.DatabaseOperation;
12  
13  /**
14   * DBunit utility om databases leeg te maken.
15   *
16   * @author mprins
17   */
18  public final class CleanUtil {
19  
20    /** private by design. */
21    private CleanUtil() {}
22  
23    /**
24     * leegt de BRK tabellen in het RSGB schema. kan worden gebruikt in een {@code @After} van een
25     * test case.
26     *
27     * @param rsgb database welke geleegd moet worden
28     * @param deleteBrondocument {@code true} als brondocumenten ook verwijderd moeten worden
29     * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
30     * @throws java.sql.SQLException als er iets misgaat in de database
31     */
32    public static void cleanRSGB_BRK(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
33        throws DatabaseUnitException, SQLException {
34  
35      if (deleteBrondocument) {
36        DatabaseOperation.TRUNCATE_TABLE.execute(
37            rsgb, new DefaultDataSet(new DefaultTable[] {new DefaultTable("brondocument")}));
38      }
39      /* cleanup rsgb, doet:
40             DELETE FROM herkomst_metadata;
41             DELETE FROM zak_recht;
42             DELETE FROM ingeschr_niet_nat_prs;
43             ...
44             DELETE FROM kad_perceel_archief;
45             DELETE FROM kad_perceel;
46             DELETE FROM kad_onrrnd_zk_archief;
47             DELETE FROM kad_onrrnd_zk;
48      dus omgekeerde volgorde tov. onderstaande array
49      */
50      DatabaseOperation.DELETE_ALL.execute(
51          rsgb,
52          new DefaultDataSet(
53              new DefaultTable[] {
54                new DefaultTable("kad_onrrnd_zk"),
55                new DefaultTable("kad_onrrnd_zk_his_rel"),
56                new DefaultTable("kad_onrrnd_zk_aantek"),
57                new DefaultTable("kad_onrrnd_zk_archief"),
58                new DefaultTable("kad_onrrnd_zk_aantek_archief"),
59                new DefaultTable("kad_perceel"),
60                new DefaultTable("kad_perceel_archief"),
61                new DefaultTable("subject"),
62                new DefaultTable("prs"),
63                new DefaultTable("nat_prs"),
64                new DefaultTable("ingeschr_nat_prs"),
65                new DefaultTable("niet_ingezetene"),
66                new DefaultTable("ander_nat_prs"),
67                new DefaultTable("niet_nat_prs"),
68                new DefaultTable("ingeschr_niet_nat_prs"),
69                new DefaultTable("app_re"),
70                new DefaultTable("app_re_archief"),
71                new DefaultTable("zak_recht"),
72                new DefaultTable("zak_recht_archief"),
73                new DefaultTable("zak_recht_aantek"),
74                new DefaultTable("benoemd_obj_kad_onrrnd_zk"),
75                new DefaultTable("herkomst_metadata"),
76                // schemaspy geeft de volgende volgorde
77                //  new DefaultTable("subject"),
78                //  new DefaultTable("prs"),
79                //  new DefaultTable("kad_onrrnd_zk"),
80                //  new DefaultTable("kad_perceel"),
81                //  new DefaultTable("niet_nat_prs"),
82                //  new DefaultTable("nat_prs"),
83                //  new DefaultTable("ingeschr_nat_prs"),
84                //  new DefaultTable("app_re"),
85                //  new DefaultTable("zak_recht"),
86                //  new DefaultTable("ander_btnlnds_niet_nat_prs"),
87                //  new DefaultTable("ander_nat_prs"),
88                //  new DefaultTable("benoemd_obj_kad_onrrnd_zk"),
89                //  new DefaultTable("ingeschr_niet_nat_prs"),
90                //  new DefaultTable("kad_onrrnd_zk_his_rel"),
91                //  new DefaultTable("niet_ingezetene"),
92                //  new DefaultTable("app_re_kad_perceel"),
93                //  new DefaultTable("ingezetene"),
94                //  new DefaultTable("kad_onrrnd_zk_aantek"),
95                //  new DefaultTable("kad_onrrnd_zk_kad_onrrnd_zk"),
96                //  new DefaultTable("zak_recht_aantek"),
97                //  new DefaultTable("app_re_archief"),
98                //  new DefaultTable("app_re_kad_perceel_archief"),
99                ////  new DefaultTable("brondocument"),
100               //  new DefaultTable("kad_onrrnd_zk_aantek_archief"),
101               //  new DefaultTable("kad_onrrnd_zk_archief"),
102               //  new DefaultTable("kad_onrrnd_zk_kad_onrr_archief"),
103               //  new DefaultTable("kad_perceel_archief"),
104               //  new DefaultTable("zak_recht_archief"),
105             }));
106   }
107 
108   /**
109    * leegt de BRK 2 tabellen in het BRK schema. kan worden gebruikt in een {@code @After} van een
110    * test case.
111    *
112    * @param rsgbbrk database welke geleegd moet worden moeten worden
113    * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
114    * @throws java.sql.SQLException als er iets misgaat in de database
115    */
116   public static void cleanRSGB_BRK2(final IDatabaseConnection rsgbbrk)
117       throws DatabaseUnitException, SQLException {
118 
119     DatabaseOperation.DELETE_ALL.execute(
120         rsgbbrk,
121         new DefaultDataSet(
122             new DefaultTable[] {
123               // TODO mogelijk de volgorde nog aanpassen
124               new DefaultTable("onroerendezaak"),
125               new DefaultTable("nietnatuurlijkpersoon"),
126               new DefaultTable("adres"),
127               new DefaultTable("natuurlijkpersoon"),
128               new DefaultTable("stuk"),
129               new DefaultTable("stukdeel"),
130               new DefaultTable("persoon"),
131               new DefaultTable("recht"),
132               new DefaultTable("publiekrechtelijkebeperking"),
133               new DefaultTable("onroerendezaakbeperking_archief"),
134               new DefaultTable("onroerendezaakfiliatie"),
135               new DefaultTable("recht_isbeperkttot"),
136               new DefaultTable("objectlocatie"),
137               new DefaultTable("onroerendezaakbeperking"),
138               new DefaultTable("recht_aantekeningrecht"),
139               new DefaultTable("recht_archief"),
140               new DefaultTable("recht_isbelastmet"),
141               new DefaultTable("appartementsrecht"),
142               new DefaultTable("appartementsrecht_archief"),
143               new DefaultTable("objectlocatie_archief"),
144               new DefaultTable("onroerendezaak_archief"),
145               new DefaultTable("perceel"),
146               new DefaultTable("perceel_archief"),
147               new DefaultTable("recht_aantekeningrecht_archief"),
148               new DefaultTable("recht_isbelastmet_archief"),
149               new DefaultTable("recht_isbeperkttot_archief"),
150             }));
151   }
152 
153   /**
154    * Leeg de subject en onderliggende tabellen die betrokken zijn bij BRP.
155    *
156    * @param rsgb database welke geleegd moet worden
157    * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
158    * @throws java.sql.SQLException als er iets misgaat in de database
159    */
160   public static void cleanRSGB_BRP(final IDatabaseConnection rsgb)
161       throws DatabaseUnitException, SQLException {
162     CleanUtil.cleanRSGB_BRP(rsgb, true);
163   }
164 
165   /**
166    * Leeg de subject en onderliggende tabellen die betrokken zijn bij BRP. NB. deze cleanup is niet
167    * bijzonder slim, alle (natuurlijke) personen worden verwijderd, dus ook uit brk.
168    *
169    * @param rsgb database welke geleegd moet worden
170    * @param deleteBrondocument {@code true} als brondocumenten ook verwijderd moeten worden
171    * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
172    * @throws java.sql.SQLException als er iets misgaat in de database
173    */
174   public static void cleanRSGB_BRP(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
175       throws DatabaseUnitException, SQLException {
176     if (deleteBrondocument) {
177       DatabaseOperation.DELETE_ALL.execute(
178           rsgb, new DefaultDataSet(new DefaultTable[] {new DefaultTable("brondocument")}));
179     }
180     /* cleanup rsgb, doet:
181 
182      DELETE FROM herkomst_metadata;
183      ...
184      DELETE FROM subject;
185     dus omgekeerde volgorde tov. onderstaande array
186      */
187     DatabaseOperation.DELETE_ALL.execute(
188         rsgb,
189         new DefaultDataSet(
190             new DefaultTable[] {
191               new DefaultTable("subject"),
192               new DefaultTable("prs"),
193               new DefaultTable("nat_prs"),
194               new DefaultTable("ingeschr_nat_prs"),
195               new DefaultTable("niet_ingezetene"),
196               new DefaultTable("ander_nat_prs"),
197               new DefaultTable("niet_nat_prs"),
198               new DefaultTable("ingeschr_niet_nat_prs"),
199               new DefaultTable("ouder_kind_rel"),
200               new DefaultTable("huw_ger_partn"),
201               new DefaultTable("herkomst_metadata")
202             }));
203   }
204 
205   /**
206    * ruimt personen en kvk tabellen op.
207    *
208    * @param rsgb database welke opgeruimd moet worden
209    * @throws DatabaseUnitException als er een DBunit fout optreedt
210    * @throws SQLException als er iets misgaat in de database
211    */
212   public static void cleanRSGB_NHR(final IDatabaseConnection rsgb)
213       throws DatabaseUnitException, SQLException {
214     cleanRSGB_NHR(rsgb, true);
215   }
216 
217   /**
218    * ruimt personen en kvk tabellen op (en ook BRP tabellen).
219    *
220    * @param rsgb database welke opgeruimd moet worden
221    * @param deleteBrondocument {@code true} als brondocumenten ook verwijderd
222    * @throws DatabaseUnitException als er iets mis gaat met DBunit, bijv verkeerde volgorde van
223    *     verwijderen
224    * @throws SQLException als er iets mis gaat met uitvieren van de deletes
225    */
226   public static void cleanRSGB_NHR(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
227       throws DatabaseUnitException, SQLException {
228 
229     DatabaseOperation.DELETE_ALL.execute(
230         rsgb,
231         new DefaultDataSet(
232             new DefaultTable[] {
233               new DefaultTable("sbi_activiteit"),
234               new DefaultTable("functionaris"),
235               new DefaultTable("ondrnmng"),
236               new DefaultTable("maatschapp_activiteit"),
237               new DefaultTable("vestg"),
238               new DefaultTable("vestg_activiteit"),
239               new DefaultTable("vestg_naam"),
240               new DefaultTable("ander_btnlnds_niet_nat_prs"),
241             }));
242     cleanRSGB_BRP(rsgb, deleteBrondocument);
243   }
244 
245   /**
246    * ruimt WOZ en subject tabellen op (dus ook BRP tabellen).
247    *
248    * @param rsgb database welke opgeruimd moet worden
249    * @param deleteBrondocument {@code true} als alle brondocumenten ook verwijderd moeten worden
250    * @throws DatabaseUnitException als er iets mis gaat met DBunit, bijv verkeerde volgorde van
251    *     verwijderen
252    * @throws SQLException als er iets mis gaat met uitvieren van de deletes
253    */
254   public static void cleanRSGB_WOZ(final IDatabaseConnection rsgb, final boolean deleteBrondocument)
255       throws DatabaseUnitException, SQLException {
256 
257     DatabaseOperation.DELETE_ALL.execute(
258         rsgb,
259         new DefaultDataSet(
260             new DefaultTable[] {
261               new DefaultTable("woz_obj"),
262               new DefaultTable("woz_deelobj"),
263               new DefaultTable("woz_waarde"),
264               new DefaultTable("woz_omvat"),
265               new DefaultTable("woz_belang"),
266               new DefaultTable("woz_deelobj_archief"),
267               new DefaultTable("woz_obj_archief"),
268               new DefaultTable("woz_waarde_archief"),
269               new DefaultTable("locaand_adres"),
270               new DefaultTable("locaand_openb_rmte"),
271             }));
272     // WOZ bevat ook vestigingen, NHR leegt ook BRP
273     cleanRSGB_NHR(rsgb, deleteBrondocument);
274   }
275 
276   /**
277    * leegt de bericht, laadproces en job tabellen en de automatsiche processen in het staging
278    * schema. kan worden gebruikt in een {@code @After} van een test case.
279    *
280    * @param staging database welke geleegd moet worden
281    * @param includeProcessen {@code true} als alle automatische processen ook verwijderd moeten
282    *     worden
283    * @throws org.dbunit.DatabaseUnitException als er een DBunit fout optreedt
284    * @throws java.sql.SQLException als er iets misgaat in de database
285    */
286   public static void cleanSTAGING(final IDatabaseConnection staging, final boolean includeProcessen)
287       throws DatabaseUnitException, SQLException {
288     if (includeProcessen) {
289       DatabaseOperation.DELETE_ALL.execute(
290           staging,
291           new DefaultDataSet(
292               new DefaultTable[] {
293                 new DefaultTable("automatisch_proces"),
294                 new DefaultTable("automatisch_proces_config")
295               }));
296     }
297     DatabaseOperation.DELETE_ALL.execute(
298         staging,
299         new DefaultDataSet(
300             new DefaultTable[] {
301               new DefaultTable("laadproces"), new DefaultTable("bericht"), new DefaultTable("job")
302             }));
303   }
304 }