Skip to content

Commit

Permalink
[BRMO-221] uitbreiding verwerking
Browse files Browse the repository at this point in the history
  • Loading branch information
mprins committed Dec 15, 2022
1 parent 21d272b commit 48e6640
Show file tree
Hide file tree
Showing 14 changed files with 1,432 additions and 206 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public List<TableData> readDataXML(Source dataXML) throws XMLStreamException, Tr
XMLStreamReader xer = xif.createXMLStreamReader(dataXML);

int level = LEVEL_ROOT;
List<TableData> list = new ArrayList();
List<TableData> list = new ArrayList<>();
TableData data = null;
TableRow row = null;
boolean inComfortData = false;
Expand Down
176 changes: 91 additions & 85 deletions brmo-loader/src/main/resources/xsl/brk2-snapshot-to-rsgb-xml.xsl

Large diffs are not rendered by default.

157 changes: 92 additions & 65 deletions brmo-loader/src/test/java/nl/b3p/Brk2ToStagingIntegrationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.dbunit.database.DatabaseDataSourceConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.ext.oracle.Oracle10DataTypeFactory;
import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory;
Expand All @@ -41,7 +42,6 @@

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
import static org.junit.jupiter.params.provider.Arguments.arguments;

Expand All @@ -56,21 +56,23 @@
class Brk2ToStagingIntegrationTest extends AbstractDatabaseIntegrationTest {

private static final Log LOG = LogFactory.getLog(Brk2ToStagingIntegrationTest.class);
// private BasicDataSource dsRsgb;
private final Lock sequential = new ReentrantLock(true);
private BasicDataSource dsRsgbBrk;
private BasicDataSource dsStaging;
private BrmoFramework brmo;
// dbunit
private IDatabaseConnection staging;
// private IDatabaseConnection rsgb;
private BasicDataSource dsStaging;
private IDatabaseConnection rsgbBrk;

static Stream<Arguments> argumentsProvider() {
return Stream.of(
// {"type","filename", aantalBerichten, aantalProcessen, "datumEersteMutatie"},
arguments("brk2", "/brk2/MUTKX02-ABG00F1856-20211012-1.anon.xml", "NL.IMKAD.KadastraalObject:5260185670000", 1, 1, "2021-10-12"),
arguments("brk2", "/brk2/MUTKX02-ABG00F1856-20211102-1.anon.xml", "NL.IMKAD.KadastraalObject:5260185670000", 1, 1, "2021-11-02", 1),
// stand
arguments("brk2", "/brk2/GEBKX02-20210610-1.anon.xml", "NL.IMKAD.KadastraalObject:50247970000", 1, 1, "2021-06-10")
// { "filename", objectRef, aantalBerichten, aantalProcessen, aantalRecht, aantalStuk, aantalNP, aantalNNP, aantalAdres},
arguments("/brk2/stand-appre-1.anon.xml", "NL.IMKAD.KadastraalObject:53761288010001", 1, 1, 3, 2, 1, 1, 3),
arguments("/brk2/stand-perceel-1.anon.xml", "NL.IMKAD.KadastraalObject:50247970000", 1, 1, 2, 1, 0, 1, 2),
arguments("/brk2/stand-perceel-2.anon.xml", "NL.IMKAD.KadastraalObject:53730000170000", 1, 1, 2, 1, 0, 1, 2),
arguments("/brk2/stand-perceel-3.anon.xml", "NL.IMKAD.KadastraalObject:89760037170000", 1, 1, 2, 2, 1, 1, 4),
arguments("/brk2/MUTKX02-ABG00F1856-20211012-1.anon.xml", "NL.IMKAD.KadastraalObject:5260185670000", 1, 1, 3, 2, 2, 0, 2),
arguments("/brk2/MUTKX02-ABG00F1856-20211102-1.anon.xml", "NL.IMKAD.KadastraalObject:5260185670000", 1, 1, 3, 2, 1, 1, 2)
);
}

Expand All @@ -83,42 +85,40 @@ public void setUp() throws Exception {
dsStaging.setPassword(params.getProperty("staging.passwd"));
dsStaging.setAccessToUnderlyingConnectionAllowed(true);

// dsRsgb = new BasicDataSource();
// dsRsgb.setUrl(params.getProperty("rsgb.jdbc.url"));
// dsRsgb.setUsername(params.getProperty("rsgb.user"));
// dsRsgb.setPassword(params.getProperty("rsgb.passwd"));
// dsRsgb.setAccessToUnderlyingConnectionAllowed(true);

staging = new DatabaseDataSourceConnection(dsStaging);
// rsgb = new DatabaseDataSourceConnection(dsRsgb, params.getProperty("rsgbbrk.schema"));
dsRsgbBrk = new BasicDataSource();
dsRsgbBrk.setUrl(params.getProperty("rsgbbrk.jdbc.url"));
dsRsgbBrk.setUsername(params.getProperty("rsgbbrk.user"));
dsRsgbBrk.setPassword(params.getProperty("rsgbbrk.passwd"));
dsRsgbBrk.setAccessToUnderlyingConnectionAllowed(true);

if (this.isOracle) {
staging = new DatabaseConnection(OracleConnectionUnwrapper.unwrap(dsStaging.getConnection()), params.getProperty("staging.user").toUpperCase());
staging.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Oracle10DataTypeFactory());
staging.getConfig().setProperty(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, true);

// rsgb = new DatabaseConnection(OracleConnectionUnwrapper.unwrap(dsRsgb.getConnection()), params.getProperty("rsgb.user").toUpperCase());
// rsgb.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Oracle10DataTypeFactory());
// rsgb.getConfig().setProperty(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, true);
rsgbBrk = new DatabaseConnection(OracleConnectionUnwrapper.unwrap(dsRsgbBrk.getConnection()), params.getProperty("rsgbbrk.schema").toUpperCase());
rsgbBrk.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Oracle10DataTypeFactory());
rsgbBrk.getConfig().setProperty(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, true);
} else if (this.isPostgis) {
// we hebben alleen nog postgres over
staging = new DatabaseDataSourceConnection(dsStaging);
staging.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new PostgresqlDataTypeFactory());
// rsgb.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new PostgresqlDataTypeFactory());
rsgbBrk = new DatabaseDataSourceConnection(dsRsgbBrk, params.getProperty("rsgbbrk.schema"));
rsgbBrk.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new PostgresqlDataTypeFactory());
}

brmo = new BrmoFramework(dsStaging, null, null);
brmo = new BrmoFramework(dsStaging, null, dsRsgbBrk);

FlatXmlDataSetBuilder fxdb = new FlatXmlDataSetBuilder();
fxdb.setCaseSensitiveTableNames(false);
IDataSet stagingDataSet = fxdb.build(new FileInputStream(new File(Objects.requireNonNull(Brk2ToStagingIntegrationTest.class.getResource("/staging-empty-flat.xml")).toURI())));

sequential.lock();

DatabaseOperation.CLEAN_INSERT.execute(staging, stagingDataSet);
// CleanUtil.cleanRSGB_BRK2(rsgbBrk);

Assumptions.assumeTrue(0L == brmo.getCountBerichten("brk2", "STAGING_OK"),
Assumptions.assumeTrue(0L == brmo.getCountBerichten(BrmoFramework.BR_BRK2, "STAGING_OK"),
"Er zijn geen STAGING_OK berichten");
Assumptions.assumeTrue(0L == brmo.getCountLaadProcessen("brk2", "STAGING_OK"),
Assumptions.assumeTrue(0L == brmo.getCountLaadProcessen(BrmoFramework.BR_BRK2, "STAGING_OK"),
"Er zijn geen STAGING_OK laadprocessen");
}

Expand All @@ -127,30 +127,32 @@ void cleanup() throws Exception {
brmo.closeBrmoFramework();

CleanUtil.cleanSTAGING(staging, false);
CleanUtil.cleanRSGB_BRK2(rsgbBrk);
staging.close();
dsStaging.close();

// CleanUtil.cleanRSGB_BRK(rsgb, true);
// rsgb.close();
// dsRsgb.close();
rsgbBrk.close();
dsRsgbBrk.close();

sequential.unlock();
}

@DisplayName("BRK2 XML in staging laden")
@ParameterizedTest(name = "testBrk2XMLToStaging #{index}: type: {0}, bestand: {1}, mutatiedatum: {4}")
@ParameterizedTest(name = "testBrk2XMLToStaging #{index}: bestand: {0}, object ref: {1}")
@MethodSource("argumentsProvider")
void testBrk2XMLToStaging(String bestandType, String bestandNaam, String objectRef, long aantalBerichten, long aantalProcessen, String datumEersteMutatie) throws Exception {
void testBrk2XMLToStaging(String bestandNaam, String objectRef, long aantalBerichten, long aantalProcessen,
int aantalRecht, int aantalStuk, int aantalNP, int aantalNNP, int aantalAdres)
throws Exception {

assumeFalse(null == Brk2ToStagingIntegrationTest.class.getResource(bestandNaam), "Het test bestand moet er zijn.");

brmo.loadFromFile(bestandType, Brk2ToStagingIntegrationTest.class.getResource(bestandNaam).getFile(), null);
brmo.loadFromFile(BrmoFramework.BR_BRK2, Brk2ToStagingIntegrationTest.class.getResource(bestandNaam).getFile(), null);
LOG.debug("klaar met laden van berichten in staging DB.");

List<Bericht> berichten = brmo.listBerichten();
List<LaadProces> processen = brmo.listLaadProcessen();
assertNotNull(berichten, "De verzameling berichten bestaat niet.");
assertEquals(aantalBerichten, berichten.size(), "Het aantal berichten is niet als verwacht.");
assertEquals(aantalBerichten, brmo.getCountLaadProcessen("brk2", "STAGING_OK"), "Het aantal berichten is niet als verwacht.");
assertEquals(aantalBerichten, brmo.getCountLaadProcessen(BrmoFramework.BR_BRK2, "STAGING_OK"), "Het aantal berichten is niet als verwacht.");
assertNotNull(processen, "De verzameling processen bestaat niet.");
assertEquals(aantalProcessen, processen.size(), "Het aantal processen is niet als verwacht.");

Expand All @@ -160,36 +162,61 @@ void testBrk2XMLToStaging(String bestandType, String bestandNaam, String objectR
}
assertEquals(objectRef, berichten.get(0).getObjectRef(), "Het bericht heeft niet de juiste objectRef.");

// LOG.debug("Transformeren berichten naar rsgb DB.");
// Thread t = brmo.toRsgb();
// t.join();
//
// assertEquals(aantalBerichten, brmo.getCountBerichten(null, null, "brk2", "RSGB_OK"),
// "Niet alle berichten zijn OK getransformeerd");
// berichten = brmo.listBerichten();
// for (Bericht b : berichten) {
// assertNotNull(b, "Bericht is 'null'");
// assertNotNull(b.getDbXml(), "'db-xml' van bericht is 'null'");
// }
//
// ITable kad_onrrnd_zk = rsgb.createDataSet().getTable("kad_onrrnd_zk");
// assertEquals(aantalBerichten, kad_onrrnd_zk.getRowCount(), "Het aantal kad_onrrnd_zk klopt niet");
// assertEquals(datumEersteMutatie, kad_onrrnd_zk.getValue(0, "dat_beg_geldh"),
// "Datum eerste record komt niet overeen");
//
// if(bestandNaam.contains("BRK_XML.anon.xml")){
// // check of aand_naamgebruik leeg is voor alle personen
// ITable nat_prs =rsgb.createDataSet().getTable("nat_prs");
// assertEquals(2, nat_prs.getRowCount(), "aantal natuurlijke personen klopt niet");
//
// nat_prs = rsgb.createQueryTable("nat_prs","select * from nat_prs where geslachtsaand = 'M'");
// assertEquals(1, nat_prs.getRowCount(), "aantal 'M' klopt niet");
// assertNull(nat_prs.getValue(0,"aand_naamgebruik"));
//
// // ondanks dat bericht zegt "Eigen naam" wat een ongeldige waarde is voor //GbaPersoon:aanduidingNaamgebruik/Typen:code
// nat_prs = rsgb.createQueryTable("nat_prs","select * from nat_prs where geslachtsaand = 'V'");
// assertEquals(1, nat_prs.getRowCount(), "aantal 'V' klopt niet");
// assertNull(nat_prs.getValue(0,"aand_naamgebruik"));
// }
LOG.debug("Transformeren berichten naar rsgb DB.");
Thread t = brmo.toRsgb();
t.join();

assertEquals(aantalBerichten, brmo.getCountBerichten(BrmoFramework.BR_BRK2, "RSGB_OK"),
"Niet alle berichten zijn OK getransformeerd");
berichten = brmo.listBerichten();
for (Bericht b : berichten) {
assertNotNull(b, "Bericht is 'null'");
assertNotNull(b.getDbXml(), "'db-xml' van bericht is 'null'");
}

final boolean isPerceel = objectRef.endsWith("0000");


ITable onroerendezaak = rsgbBrk.createDataSet().getTable("onroerendezaak");
assertEquals(aantalBerichten, onroerendezaak.getRowCount(), "Er is geen (of teveel) onroerendezaak");
assertEquals(objectRef, onroerendezaak.getValue(0, "identificatie"),
"identificatie is niet gelijk aan objectRef");
ITable onroerendezaakbeperking = rsgbBrk.createDataSet().getTable("onroerendezaakbeperking");
ITable onroerendezaakfiliatie = rsgbBrk.createDataSet().getTable("onroerendezaakfiliatie");
ITable publiekrechtelijkebeperking = rsgbBrk.createDataSet().getTable("publiekrechtelijkebeperking");

ITable perceelOfAppRe;
if (isPerceel) {
perceelOfAppRe = rsgbBrk.createDataSet().getTable("perceel");
assertEquals(objectRef, perceelOfAppRe.getValue(0, "identificatie"),
"Perceel identificatie is niet gelijk aan objectRef");
// TODO
// assertNotNull(perceelOfAppRe.getValue(0, "begrenzing_perceel"), "Perceel begrenzing geometrie is 'null'");
// assertNotNull(perceelOfAppRe.getValue(0, "plaatscoordinaten"), "Plaatscoordinaten geometrie is 'null'");
} else {
perceelOfAppRe = rsgbBrk.createDataSet().getTable("appartementsrecht");
assertEquals(objectRef, perceelOfAppRe.getValue(0, "identificatie"),
"Appartementsrecht identificatie is niet gelijk aan objectRef");
}

ITable recht = rsgbBrk.createDataSet().getTable("recht");
assertEquals(aantalRecht, recht.getRowCount(), "Er is geen/teveel/te weinig recht");

ITable stuk = rsgbBrk.createDataSet().getTable("stuk");
assertEquals(aantalStuk, stuk.getRowCount(), "Er is geen/teveel/te weinig stuk");

ITable stukdeel = rsgbBrk.createDataSet().getTable("stukdeel");

ITable persoon = rsgbBrk.createDataSet().getTable("persoon");
assertEquals(aantalNP + aantalNNP, persoon.getRowCount(), "Het aantal persoon is niet als verwacht.");

ITable natuurlijkpersoon = rsgbBrk.createDataSet().getTable("natuurlijkpersoon");
assertEquals(aantalNP, natuurlijkpersoon.getRowCount(), "Het aantal nat.persoon is niet als verwacht.");

ITable nietnatuurlijkpersoon = rsgbBrk.createDataSet().getTable("nietnatuurlijkpersoon");
assertEquals(aantalNNP, nietnatuurlijkpersoon.getRowCount(), "Het aantal niet-nat.persoon is niet als verwacht.");

ITable adres = rsgbBrk.createDataSet().getTable("adres");
assertEquals(aantalAdres, adres.getRowCount(), "Het aantal adressen is niet als verwacht.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;

/**
*
Expand Down Expand Up @@ -73,22 +74,35 @@ public void test() throws Exception {
InputStream stream = DataComfortXMLReaderTest.class.getResourceAsStream("comfortdata.xml");
StreamSource source = new StreamSource(stream);
List<TableData> data = reader.readDataXML(source);
try {
assertEquals(3, data.size(), "Er zijn drie table data elementen");
TableData d = data.get(0);
assertTrue(d.isComfortData(), "eerste table data is comfort data.");
assertEquals(4, d.getRows().size(), "Er zijn vier table rows");
TableRow row = d.getRows().get(0);
assertEquals("50656082", row.getColumnValue("kvk_nummer"));
assertEquals(3, data.size(), "Er zijn drie table data elementen");
TableData d = data.get(0);
assertTrue(d.isComfortData(), "eerste table data is comfort data.");
assertEquals(4, d.getRows().size(), "Er zijn vier table rows");
TableRow row = d.getRows().get(0);
assertEquals("50656082", row.getColumnValue("kvk_nummer"));

d = data.get(2);
row = d.getRows().get(0);
assertEquals("214606.115 581137.695 214593.637 581184.181 214586.404 581200.432 214582.757 581198.853 214579.699 581197.328 214595.919 581135.491 214597.599 581135.854 214606.115 581137.695",
row.getColumnValue("posList"));
d = data.get(2);
row = d.getRows().get(0);
assertEquals("214606.115 581137.695 214593.637 581184.181 214586.404 581200.432 214582.757 581198.853 214579.699 581197.328 214595.919 581135.491 214597.599 581135.854 214606.115 581137.695",
row.getColumnValue("posList"));
}

@Test
public void testBrk2() throws Exception {
InputStream stream = DataComfortXMLReaderTest.class.getResourceAsStream("comfortdata-brk2.xml");
StreamSource source = new StreamSource(stream);
List<TableData> data = reader.readDataXML(source);
assertEquals(7, data.size(), "Er zijn niet 7 table data elementen");
TableData d = data.get(2);
assertTrue(d.isComfortData(), "3e table data is comfort data.");
assertEquals(2, d.getRows().size(), "Er zijn vier table rows");
TableRow row = d.getRows().get(1);
assertEquals("21013149", row.getColumnValue("kvknummer"));

} catch (Exception e) {
fail(e.getLocalizedMessage());
}
d = data.get(6);
row = d.getRows().get(0);
assertEquals("NL.IMKAD.KadastraalObject.50247970000", row.getColumnValue("identificatie"));
assertEquals("19452.172 366623.187 19476.238 366616.882 19477.741 366622.664 19453.125 366629.117 19452.172 366623.187",
row.getColumnValue("posList"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ static Stream<Arguments> enkelObjectBerichtProvider() {
arguments("/brk2/MUTKX02-ABG00F1856-20211012-1.anon.xml", "NL.IMKAD.KadastraalObject:5260185670000", "2021-10-12", 1),
arguments("/brk2/MUTKX02-ABG00F1856-20211102-1.anon.xml", "NL.IMKAD.KadastraalObject:5260185670000", "2021-11-02", 1),
// stand
arguments("/brk2/GEBKX02-20210610-1.anon.xml", "NL.IMKAD.KadastraalObject:50247970000", "2021-06-10", -1)
arguments("/brk2//stand-perceel-1.anon.xml", "NL.IMKAD.KadastraalObject:50247970000", "2021-06-10", -1)
);
}

Expand Down
Loading

0 comments on commit 48e6640

Please sign in to comment.