CriteriaParser.java
/*
* Copyright (C) 2017 B3Partners B.V.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package nl.b3p.brmo.stufbg204;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nl.egem.stuf.sector.bg._0204.PRSVraag;
import nl.egem.stuf.sector.bg._0204.VraagBericht;
import nl.egem.stuf.sector.bg._0204.VraagBericht.Body;
/**
* @author Meine Toonen
*/
public class CriteriaParser {
private static final Map<String, String> vraagToColumn = new HashMap();
static {
// nat_prs
vraagToColumn.put("voornamen", "nm_voornamen");
vraagToColumn.put("voorletters", "na_voorletters_aanschrijving");
vraagToColumn.put("voorvoegselGeslachtsnaam", "nm_voorvoegsel_geslachtsnaam");
vraagToColumn.put("geslachtsnaam", "nm_geslachtsnaam");
vraagToColumn.put("adellijkeTitelPredikaat", "nm_adellijke_titel_predikaat");
vraagToColumn.put("geslachtsaanduiding", "geslachtsaand");
vraagToColumn.put("academischeTitel", "fk_2acd_code");
vraagToColumn.put("aanduidingNaamgebruik", "aand_naamgebruik");
// ingeschr_nat_prs
vraagToColumn.put("aNummer", "a_nummer");
vraagToColumn.put("bsn-nummer", "bsn");
vraagToColumn.put("burgerlijkeStaat", "burgerlijke_staat");
vraagToColumn.put("geboortedatum", "gb_geboortedatum");
vraagToColumn.put("datumInschrijvingGemeente", "datum_inschrijving_in_gemeente");
vraagToColumn.put("datumVerkrijgingVerblijfstitel", "datum_verkr_nation");
vraagToColumn.put("datumVerliesVerblijfstitel", "datum_verlies_nation");
vraagToColumn.put("datumVertrekUitNederland", "datum_vertrek_uit_nederland");
vraagToColumn.put("datumVestigingInNederland", "datum_vestg_in_nederland");
vraagToColumn.put("codeGemeenteVanInschrijving", "gemeente_van_inschrijving");
vraagToColumn.put("geboorteplaats", "gb_geboorteplaats");
vraagToColumn.put("codeGeboorteland", "fk_gb_lnd_code_iso");
vraagToColumn.put("datumOverlijden", "ol_overlijdensdatum");
vraagToColumn.put("plaatsOverlijden", "fk_gb_lnd_code_iso");
vraagToColumn.put("codeLandOverlijden", "fk_ol_lnd_code_iso");
vraagToColumn.put("datumOpschortingBijhouding", "datum_opschorting_bijhouding");
vraagToColumn.put("omschrijvingRedenOpschortingBijhouding", "reden_opschorting_bijhouding");
// subject
vraagToColumn.put("eMailAdres", "emailadres");
vraagToColumn.put("telefoonnummer", "telefoonnummer");
vraagToColumn.put("bankgiroRekeningnummer", "rn_bankrekeningnummer");
vraagToColumn.put("faxnummer", "fax_nummer");
vraagToColumn.put("indicatieGeheim", "");
vraagToColumn.put("prsadrcor", "");
vraagToColumn.put("prsadrins", "");
vraagToColumn.put("prsadrvbl", "");
vraagToColumn.put("prsidb", "");
vraagToColumn.put("prsnat", "");
vraagToColumn.put("prsprshuw", "");
vraagToColumn.put("prsprsknd", "");
vraagToColumn.put("prsprsoud", "");
vraagToColumn.put("codeLandEmigratie", "");
vraagToColumn.put("codeLandImmigratie", "");
vraagToColumn.put("indicatieGezagMinderjarige", "");
vraagToColumn.put("indicatieCuratelestelling", "");
vraagToColumn.put("verblijfstitel", "");
vraagToColumn.put("aanduidingBijzonderNederlanderschap", "");
vraagToColumn.put("subjectnrAKR", "");
vraagToColumn.put("tijdvakGeldigheid", "");
vraagToColumn.put("extraElementen", "");
}
public CriteriaParser() {}
public String getCriteria(VraagBericht bericht)
throws IllegalArgumentException, UnsupportedOperationException {
String q;
String entiteitType = bericht.getStuurgegevens().getEntiteittype();
Body b = bericht.getBody();
switch (entiteitType) {
case "PRS":
{
q = getPRSCriterias(b);
break;
}
default:
throw new IllegalArgumentException("Entiteitstype niet ondersteund: " + entiteitType);
}
if (q != null) {
q = "WHERE " + q;
}
return q;
}
private String getPRSCriterias(Body b)
throws IllegalArgumentException, UnsupportedOperationException {
String q;
List<PRSVraag> prs = b.getPRS();
String from = getPRSCriteria(prs.get(0), true);
String toCheck =
getPRSCriteria(
prs.get(1), true); // maak even een tweede filter aan met dezelfde operator, om te
// checken of er op hetzelfde gecheckt wordt == equals
String to = getPRSCriteria(prs.get(1), false);
if (from == null && to == null) {
return null;
}
if (from.equals(toCheck)) {
q = from.replace(">", "=");
} else {
q = from + " AND " + to;
}
return q;
}
private String getPRSCriteria(PRSVraag prs, boolean first)
throws IllegalArgumentException, UnsupportedOperationException {
String vraag = null;
Object value = null;
boolean exact = true;
if (prs.getANummer() != null) {
vraag = prs.getANummer().getName().getLocalPart();
value = prs.getANummer().getValue().getValue();
exact = prs.getANummer().getValue().isExact();
} else if (prs.getBsnNummer() != null) {
vraag = prs.getBsnNummer().getName().getLocalPart();
value = prs.getBsnNummer().getValue().getValue();
exact = prs.getBsnNummer().getValue().isExact();
} else if (prs.getGeboortedatum() != null) {
vraag = prs.getGeboortedatum().getName().getLocalPart();
value = prs.getGeboortedatum().getValue().getValue();
exact = prs.getGeboortedatum().getValue().isExact();
} else if (prs.getVoornamen() != null) {
vraag = prs.getVoornamen().getName().getLocalPart();
value = prs.getVoornamen().getValue().getValue();
exact = prs.getVoornamen().getValue().isExact();
} else if (prs.getVoorletters() != null) {
vraag = prs.getVoorletters().getName().getLocalPart();
value = prs.getVoorletters().getValue().getValue();
exact = prs.getVoorletters().getValue().isExact();
} else if (prs.getVoorvoegselGeslachtsnaam() != null) {
vraag = prs.getVoorvoegselGeslachtsnaam().getName().getLocalPart();
value = prs.getVoorvoegselGeslachtsnaam().getValue().getValue();
exact = prs.getVoorvoegselGeslachtsnaam().getValue().isExact();
} else if (prs.getGeslachtsnaam() != null) {
vraag = prs.getGeslachtsnaam().getName().getLocalPart();
value = prs.getGeslachtsnaam().getValue().getValue();
exact = prs.getGeslachtsnaam().getValue().isExact();
} else if (prs.getGeboorteplaats() != null) {
vraag = prs.getGeboorteplaats().getName().getLocalPart();
value = prs.getGeboorteplaats().getValue().getValue();
exact = prs.getGeboorteplaats().getValue().isExact();
} else if (prs.getCodeGeboorteland() != null) {
vraag = prs.getCodeGeboorteland().getName().getLocalPart();
value = prs.getCodeGeboorteland().getValue().getValue();
exact = prs.getCodeGeboorteland().getValue().isExact();
} else if (prs.getGeslachtsaanduiding() != null) {
vraag = prs.getGeslachtsaanduiding().getName().getLocalPart();
value = prs.getGeslachtsaanduiding().getValue().getValue();
exact = prs.getGeslachtsaanduiding().getValue().isExact();
} else if (prs.getDatumOverlijden() != null) {
vraag = prs.getDatumOverlijden().getName().getLocalPart();
value = prs.getDatumOverlijden().getValue().getValue();
exact = prs.getDatumOverlijden().getValue().isExact();
} else if (prs.getPlaatsOverlijden() != null) {
vraag = prs.getPlaatsOverlijden().getName().getLocalPart();
value = prs.getPlaatsOverlijden().getValue().getValue();
exact = prs.getPlaatsOverlijden().getValue().isExact();
} else if (prs.getCodeLandOverlijden() != null) {
vraag = prs.getCodeLandOverlijden().getName().getLocalPart();
value = prs.getCodeLandOverlijden().getValue().getValue();
exact = prs.getCodeLandOverlijden().getValue().isExact();
} else if (prs.getIndicatieGeheim() != null) {
vraag = prs.getIndicatieGeheim().getName().getLocalPart();
value = prs.getIndicatieGeheim().getValue().getValue();
exact = prs.getIndicatieGeheim().getValue().isExact();
} else if (prs.getAdellijkeTitelPredikaat() != null) {
vraag = prs.getAdellijkeTitelPredikaat().getName().getLocalPart();
value = prs.getAdellijkeTitelPredikaat().getValue().getValue();
exact = prs.getAdellijkeTitelPredikaat().getValue().isExact();
} else if (prs.getCodeGemeenteVanInschrijving() != null) {
vraag = prs.getCodeGemeenteVanInschrijving().getName().getLocalPart();
value = prs.getCodeGemeenteVanInschrijving().getValue().getValue();
exact = prs.getCodeGemeenteVanInschrijving().getValue().isExact();
} else if (prs.getDatumInschrijvingGemeente() != null) {
vraag = prs.getDatumInschrijvingGemeente().getName().getLocalPart();
value = prs.getDatumInschrijvingGemeente().getValue().getValue();
exact = prs.getDatumInschrijvingGemeente().getValue().isExact();
} else if (prs.getDatumOpschortingBijhouding() != null) {
vraag = prs.getDatumOpschortingBijhouding().getName().getLocalPart();
value = prs.getDatumOpschortingBijhouding().getValue().getValue();
exact = prs.getDatumOpschortingBijhouding().getValue().isExact();
} else if (prs.getOmschrijvingRedenOpschortingBijhouding() != null) {
vraag = prs.getOmschrijvingRedenOpschortingBijhouding().getName().getLocalPart();
value = prs.getOmschrijvingRedenOpschortingBijhouding().getValue().getValue();
exact = prs.getOmschrijvingRedenOpschortingBijhouding().getValue().isExact();
} else if (prs.getCodeLandEmigratie() != null) {
vraag = prs.getCodeLandEmigratie().getName().getLocalPart();
value = prs.getCodeLandEmigratie().getValue().getValue();
exact = prs.getCodeLandEmigratie().getValue().isExact();
} else if (prs.getDatumVertrekUitNederland() != null) {
vraag = prs.getDatumVertrekUitNederland().getName().getLocalPart();
value = prs.getDatumVertrekUitNederland().getValue().getValue();
exact = prs.getDatumVertrekUitNederland().getValue().isExact();
} else if (prs.getCodeLandImmigratie() != null) {
vraag = prs.getCodeLandImmigratie().getName().getLocalPart();
value = prs.getCodeLandImmigratie().getValue().getValue();
exact = prs.getCodeLandImmigratie().getValue().isExact();
} else if (prs.getDatumVestigingInNederland() != null) {
vraag = prs.getDatumVestigingInNederland().getName().getLocalPart();
value = prs.getDatumVestigingInNederland().getValue().getValue();
exact = prs.getDatumVestigingInNederland().getValue().isExact();
} else if (prs.getIndicatieGezagMinderjarige() != null) {
vraag = prs.getIndicatieGezagMinderjarige().getName().getLocalPart();
value = prs.getIndicatieGezagMinderjarige().getValue().getValue();
exact = prs.getIndicatieGezagMinderjarige().getValue().isExact();
} else if (prs.getIndicatieCuratelestelling() != null) {
vraag = prs.getIndicatieCuratelestelling().getName().getLocalPart();
value = prs.getIndicatieCuratelestelling().getValue().getValue();
exact = prs.getIndicatieCuratelestelling().getValue().isExact();
} else if (prs.getVerblijfstitel() != null) {
vraag = prs.getVerblijfstitel().getName().getLocalPart();
value = prs.getVerblijfstitel().getValue().getValue();
exact = prs.getVerblijfstitel().getValue().isExact();
} else if (prs.getDatumVerkrijgingVerblijfstitel() != null) {
vraag = prs.getDatumVerkrijgingVerblijfstitel().getName().getLocalPart();
value = prs.getDatumVerkrijgingVerblijfstitel().getValue().getValue();
exact = prs.getDatumVerkrijgingVerblijfstitel().getValue().isExact();
} else if (prs.getDatumVerliesVerblijfstitel() != null) {
vraag = prs.getDatumVerliesVerblijfstitel().getName().getLocalPart();
value = prs.getDatumVerliesVerblijfstitel().getValue().getValue();
exact = prs.getDatumVerliesVerblijfstitel().getValue().isExact();
} else if (prs.getAanduidingBijzonderNederlanderschap() != null) {
vraag = prs.getAanduidingBijzonderNederlanderschap().getName().getLocalPart();
value = prs.getAanduidingBijzonderNederlanderschap().getValue().getValue();
exact = prs.getAanduidingBijzonderNederlanderschap().getValue().isExact();
} else if (prs.getBurgerlijkeStaat() != null) {
vraag = prs.getBurgerlijkeStaat().getName().getLocalPart();
value = prs.getBurgerlijkeStaat().getValue().getValue();
exact = prs.getBurgerlijkeStaat().getValue().isExact();
} else if (prs.getAanduidingNaamgebruik() != null) {
vraag = prs.getAanduidingNaamgebruik().getName().getLocalPart();
value = prs.getAanduidingNaamgebruik().getValue().getValue();
exact = prs.getAanduidingNaamgebruik().getValue().isExact();
}
/*
if (prs.getPRSADRCOR() != null) {
vraag = prs.getPRSADRCOR().getName().getLocalPart();
value = prs.getPRSADRCOR().getValue().getValue();
}
if (prs.getPRSADRINS() != null) {
vraag = prs.getPRSADRINS().getName().getLocalPart();
value = prs.getPRSADRINS().getValue().getValue();
}
if (prs.getPRSADRVBL() != null) {
vraag = prs.getPRSADRVBL().getName().getLocalPart();
value = prs.getPRSADRVBL().getValue().getValue();
}
if (prs.getPRSIDB() != null) {
vraag = prs.getPRSIDB().getName().getLocalPart();
value = prs.getPRSIDB().getValue().getValue();
}
if (prs.getPRSNAT() != null) {
vraag = prs.getPRSNAT().getName().getLocalPart();
value = prs.getPRSNAT().getValue().getValue();
}
if (prs.getPRSPRSHUW() != null) {
vraag = prs.getPRSPRSHUW().getName().getLocalPart();
value = prs.getPRSPRSHUW().getValue().getValue();
}
if (prs.getPRSPRSKND() != null) {
vraag = prs.getPRSPRSKND().getName().getLocalPart();
value = prs.getPRSPRSKND().getValue().getValue();
}
if (prs.getPRSPRSOUD() != null) {
vraag = prs.getPRSPRSOUD().getName().getLocalPart();
value = prs.getPRSPRSOUD().getValue().getValue();
}
if (prs.getBankgiroRekeningnummer() != null) {
vraag = prs.getBankgiroRekeningnummer().getName().getLocalPart();
value = prs.getBankgiroRekeningnummer().getValue().getValue();
}
if (prs.getSubjectnrAKR() != null) {
vraag = prs.getSubjectnrAKR().getName().getLocalPart();
value = prs.getSubjectnrAKR().getValue().getValue();
}
if (prs.getEMailAdres() != null) {
vraag = prs.getEMailAdres().getName().getLocalPart();
value = prs.getEMailAdres().getValue().getValue();
}
if (prs.getTelefoonnummer() != null) {
vraag = prs.getTelefoonnummer().getName().getLocalPart();
value = prs.getTelefoonnummer().getValue().getValue();
}
if (prs.getFaxnummer() != null) {
vraag = prs.getFaxnummer().getName().getLocalPart();
value = prs.getFaxnummer().getValue().getValue();
}
if (prs.getTijdvakGeldigheid() != null) {
vraag = prs.getTijdvakGeldigheid().getName().getLocalPart();
value = prs.getTijdvakGeldigheid().getValue().getValue();
}
if (prs.getExtraElementen() != null) {
vraag = prs.getExtraElementen().getName().getLocalPart();
value = prs.getExtraElementen().getValue().getValue();
}
if (prs.getAcademischeTitel() != null) {
vraag = prs.getAcademischeTitel().getName().getLocalPart();
value = prs.getAcademischeTitel().getValue().getValue();
}*/
String column = vraagToColumn.get(vraag);
if (vraag == null) {
return null;
}
if (column == null) {
throw new IllegalArgumentException("Request filtercolumn not supported: " + vraag);
}
String operator = null;
String quote = "";
String wildcard = "";
boolean valueIsString = value instanceof String;
if (valueIsString) {
quote = "\'";
}
if (!exact && !valueIsString) {
throw new UnsupportedOperationException("Inexacte datums niet ondersteund");
}
if (exact) {
operator = first ? " > " : " <= ";
} else {
wildcard = "%";
operator = " LIKE ";
}
String valuePart = quote + wildcard + String.valueOf(value) + wildcard + quote;
String query = column + operator + valuePart;
return query;
}
}