diff --git a/src/main/java/nl/rijksoverheid/mev/ExceptionHandlers.java b/src/main/java/nl/rijksoverheid/mev/ExceptionHandlers.java deleted file mode 100644 index c3943d897..000000000 --- a/src/main/java/nl/rijksoverheid/mev/ExceptionHandlers.java +++ /dev/null @@ -1,24 +0,0 @@ -package nl.rijksoverheid.mev; - -import nl.rijksoverheid.mev.exception.PersoonslijstNotFoundException; -import org.openapitools.model.GezagResponse; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -/** - * Een class met @ExceptionHandler methodes die alle exceptions van {@link OuderlijkGezagV1ApiController} afhandelen - * door {@code ErrorResponse}s terug te geven met RFC 7807 geformatteerde error details in de request body. - */ -@ControllerAdvice -public class ExceptionHandlers extends ResponseEntityExceptionHandler { - - @ExceptionHandler - ResponseEntity handle(PersoonslijstNotFoundException ex) { - logger.error(ex.getMessage(), ex); - - var body = new GezagResponse(); - return ResponseEntity.ok(body); - } -} diff --git a/src/main/java/nl/rijksoverheid/mev/brpadapter/service/BrpService.java b/src/main/java/nl/rijksoverheid/mev/brpadapter/service/BrpService.java index 6b2126be5..ace8b4b1c 100644 --- a/src/main/java/nl/rijksoverheid/mev/brpadapter/service/BrpService.java +++ b/src/main/java/nl/rijksoverheid/mev/brpadapter/service/BrpService.java @@ -3,14 +3,15 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import nl.rijksoverheid.mev.brpadapter.soap.BrpClient; -import nl.rijksoverheid.mev.exception.BrpException; import nl.rijksoverheid.mev.exception.GezagException; import nl.rijksoverheid.mev.gezagsmodule.domain.Persoonslijst; import nl.rijksoverheid.mev.transaction.Transaction; import nl.rijksoverheid.mev.transaction.TransactionHandler; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; /** * Service voor BRP functionaliteit @@ -28,35 +29,34 @@ public class BrpService { /** * Ophalen persoonslijst * - * @param bsn de bsn om de persoonslijst voor op te halen + * @param bsn de bsn om de persoonslijst voor op te halen * @param transaction de originele transactie * @return de persoonslijst * @throws GezagException wanneer BRP communicatie misgaat */ - public Persoonslijst getPersoonslijst(final String bsn, final Transaction transaction) throws BrpException { - Persoonslijst persoonslijst = client.opvragenPersoonslijst(bsn, transaction); - - if (persoonslijst == null || !persoonslijst.hasAnyValue()) { - throw new BrpException("Geen gezaghouders gevonden bij opgegeven BSN."); - } - - return persoonslijst; + public Optional getPersoonslijst(final String bsn, final Transaction transaction) { + return client.opvragenPersoonslijst(bsn, transaction); } /** * Ophalen bsns van minderjarige kinderen * - * @param bsn de bsn om de persoonslijst voor op te halen + * @param bsn de bsn om de persoonslijst voor op te halen * @param transaction de originele transactie * @return de BSNs van de kinderen * @throws GezagException wanneer BRP communicatie misgaat */ - public List getBsnsMinderjarigeKinderen(final String bsn, final Transaction transaction) throws BrpException { - Persoonslijst persoonslijstOuder = client.opvragenPersoonslijst(bsn, transaction); + public List getBsnsMinderjarigeKinderen(final String bsn, final Transaction transaction) { + List bsns = new ArrayList<>(); + + Optional persoonslijstOuder = client.opvragenPersoonslijst(bsn, transaction); + persoonslijstOuder.ifPresent(persoonslijst -> { + transaction.setReceivedId(persoonslijst.getReceivedId()); + transactionHandler.saveBrpServiceTransaction(BRP_SERVICE_GET_BSNS_MINDERJARIGE_KINDEREN, persoonslijst.getReceivedId(), transaction); - transaction.setReceivedId(persoonslijstOuder.getReceivedId()); - transactionHandler.saveBrpServiceTransaction(BRP_SERVICE_GET_BSNS_MINDERJARIGE_KINDEREN, persoonslijstOuder.getReceivedId(), transaction); + bsns.addAll(persoonslijst.getBurgerservicenummersVanMinderjarigeKinderen()); + }); - return persoonslijstOuder.getBurgerservicenummersVanMinderjarigeKinderen(); + return bsns; } } diff --git a/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpClient.java b/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpClient.java index 8b80a65ee..e252c0bda 100644 --- a/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpClient.java +++ b/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpClient.java @@ -1,9 +1,10 @@ package nl.rijksoverheid.mev.brpadapter.soap; -import nl.rijksoverheid.mev.exception.BrpException; import nl.rijksoverheid.mev.gezagsmodule.domain.Persoonslijst; import nl.rijksoverheid.mev.transaction.Transaction; +import java.util.Optional; + /** * Client voor communicatie met de BRP */ @@ -16,8 +17,6 @@ public interface BrpClient { * opgevraagd * @param transaction de transactie zoals bij binnenkomst van het request * @return de persoonslijst - * @throws BrpException wanneer een exceptie optreed bij de communicatie met - * de BRP */ - Persoonslijst opvragenPersoonslijst(final String bsn, final Transaction transaction) throws BrpException; + Optional opvragenPersoonslijst(final String bsn, final Transaction transaction); } diff --git a/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpFakeClient.java b/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpFakeClient.java index f3d167039..7352397b8 100644 --- a/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpFakeClient.java +++ b/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpFakeClient.java @@ -66,15 +66,15 @@ public BrpFakeClient(@Value("${app.features.brp.dataset-path}") Path datasetPath } @Override - public Persoonslijst opvragenPersoonslijst(String bsn, Transaction transaction) throws GezagException { + public Optional opvragenPersoonslijst(String bsn, Transaction transaction) throws GezagException { if (!new BSNValidator().isValid(bsn)) { - return null; + return Optional.empty(); } if (fixtures.containsKey(bsn)){ - return fixtures.get(bsn).data; + return Optional.of(fixtures.get(bsn).data); } log.info("Persoonslijst niet gevonden: " + bsn); - return createEmptyPersoonslijstFixture("", bsn).data; + return Optional.of(createEmptyPersoonslijstFixture("", bsn).data); } private PersoonslijstFixture readAsPersoonslijstFixture(final InputStream inputStream) { diff --git a/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpSqlClientAdapter.java b/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpSqlClientAdapter.java index 4d0d99b4e..fff9cfe04 100644 --- a/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpSqlClientAdapter.java +++ b/src/main/java/nl/rijksoverheid/mev/brpadapter/soap/BrpSqlClientAdapter.java @@ -1,7 +1,6 @@ package nl.rijksoverheid.mev.brpadapter.soap; import nl.rijksoverheid.mev.brp.PersoonslijstFinder; -import nl.rijksoverheid.mev.exception.BrpException; import nl.rijksoverheid.mev.gezagsmodule.domain.Persoonslijst; import nl.rijksoverheid.mev.gezagsmodule.model.Burgerservicenummer; import nl.rijksoverheid.mev.transaction.Transaction; @@ -9,6 +8,8 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; +import java.util.Optional; + @Component @Profile("real-brp") public class BrpSqlClientAdapter implements BrpClient { @@ -20,9 +21,8 @@ public BrpSqlClientAdapter(PersoonslijstFinder persoonslijstFinder) { } @Override - public Persoonslijst opvragenPersoonslijst(String bsn, Transaction transaction) throws BrpException { + public Optional opvragenPersoonslijst(String bsn, Transaction transaction) { var burgerservicenummer = new Burgerservicenummer(Long.parseLong(bsn)); - return persoonslijstFinder.findPersoonslijst(burgerservicenummer) - .orElseThrow(() -> new BrpException(HttpStatus.NOT_FOUND, "Persoonslijst niet gevonden")); + return persoonslijstFinder.findPersoonslijst(burgerservicenummer); } } diff --git a/src/main/java/nl/rijksoverheid/mev/exception/BrpException.java b/src/main/java/nl/rijksoverheid/mev/exception/BrpException.java deleted file mode 100644 index ec844241a..000000000 --- a/src/main/java/nl/rijksoverheid/mev/exception/BrpException.java +++ /dev/null @@ -1,23 +0,0 @@ -package nl.rijksoverheid.mev.exception; - -import org.springframework.http.HttpStatus; - -/** - * Exceptie wanneer BRP functionaliteit mis gaat - */ -public class BrpException extends GezagException { - - private static final String BRP_SERVICE_NOT_REACHABLE = "Gegevensbron niet beschikbaar"; - - public BrpException() { - super(HttpStatus.SERVICE_UNAVAILABLE, BRP_SERVICE_NOT_REACHABLE); - } - - public BrpException(final String message) { - super(HttpStatus.SERVICE_UNAVAILABLE, message); - } - - public BrpException(final HttpStatus httpStatus, final String message) { - super(httpStatus, message); - } -} diff --git a/src/main/java/nl/rijksoverheid/mev/exception/PersoonslijstNotFoundException.java b/src/main/java/nl/rijksoverheid/mev/exception/PersoonslijstNotFoundException.java deleted file mode 100644 index 2f1a6e13f..000000000 --- a/src/main/java/nl/rijksoverheid/mev/exception/PersoonslijstNotFoundException.java +++ /dev/null @@ -1,8 +0,0 @@ -package nl.rijksoverheid.mev.exception; - -public class PersoonslijstNotFoundException extends RuntimeException { - - public PersoonslijstNotFoundException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/domain/Persoonslijst.java b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/domain/Persoonslijst.java index 804860924..5f231d40c 100644 --- a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/domain/Persoonslijst.java +++ b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/domain/Persoonslijst.java @@ -11,7 +11,6 @@ import nl.rijksoverheid.mev.brpadapter.soap.persoonlijst.PersoonslijstVeld; import nl.rijksoverheid.mev.brpadapter.soap.persoonlijst.PotentieelInOnderzoek; import nl.rijksoverheid.mev.exception.AfleidingsregelException; -import nl.rijksoverheid.mev.exception.BrpException; import java.lang.reflect.Field; import java.time.Clock; @@ -600,9 +599,9 @@ public boolean minderjarig() throws AfleidingsregelException { /** * @return of een van de velden een waarde heeft in de persoonslijst - * @throws BrpException als een invalide veld benaderd wordt + * @throws AfleidingsregelException als een invalide veld benaderd wordt */ - public boolean hasAnyValue() throws BrpException { + public boolean hasAnyValue() throws AfleidingsregelException { try { for (Field f : this.getClass().getDeclaredFields()) { if (f.getType() == List.class) { @@ -618,7 +617,7 @@ public boolean hasAnyValue() throws BrpException { } return false; } catch (IllegalAccessException ex) { - throw new BrpException(ex.getMessage()); + throw new AfleidingsregelException(ex.getMessage(), "persoonslijst"); } } } diff --git a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/BeslissingsmatrixService.java b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/BeslissingsmatrixService.java index c65cf6534..60389f8d0 100644 --- a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/BeslissingsmatrixService.java +++ b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/BeslissingsmatrixService.java @@ -2,7 +2,6 @@ import lombok.extern.slf4j.Slf4j; import nl.rijksoverheid.mev.exception.AfleidingsregelException; -import nl.rijksoverheid.mev.exception.BrpException; import nl.rijksoverheid.mev.exception.VeldInOnderzoekException; import nl.rijksoverheid.mev.gezagsmodule.domain.ARAntwoordenModel; import org.springframework.stereotype.Component; @@ -52,9 +51,6 @@ public ARAntwoordenModel getARAntwoordenModel(final ARAntwoordenModel resultaat) */ public String findMatchingRoute(final ARAntwoordenModel arAntwoordenModel) { if ((arAntwoordenModel.getException() != null) - && (Objects.equals(arAntwoordenModel.getException().getClass(), BrpException.class))) { - return "-503i"; - } else if ((arAntwoordenModel.getException() != null) && (Objects.equals(arAntwoordenModel.getException().getClass(), VeldInOnderzoekException.class))) { return getRouteFromVraagModel(arAntwoordenModel); } else { diff --git a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagService.java b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagService.java index 331d7042f..0c37e12c2 100644 --- a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagService.java +++ b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagService.java @@ -1,6 +1,5 @@ package nl.rijksoverheid.mev.gezagsmodule.service; -import nl.rijksoverheid.mev.exception.BrpException; import nl.rijksoverheid.mev.exception.GezagException; import nl.rijksoverheid.mev.gezagsmodule.domain.Persoonslijst; import nl.rijksoverheid.mev.gezagsmodule.model.GezagAfleidingsResultaat; @@ -11,7 +10,7 @@ public interface GezagService { - List getGezag(final List bsns, final Transaction transaction) throws BrpException; + List getGezag(final List bsns, final Transaction transaction); GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, final Transaction transaction) throws GezagException; diff --git a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagServiceOld.java b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagServiceOld.java index 8756f40ae..29fb22f01 100644 --- a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagServiceOld.java +++ b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/GezagServiceOld.java @@ -5,7 +5,6 @@ import nl.rijksoverheid.mev.brpadapter.service.BrpService; import nl.rijksoverheid.mev.common.util.BSNValidator; import nl.rijksoverheid.mev.exception.AfleidingsregelException; -import nl.rijksoverheid.mev.exception.BrpException; import nl.rijksoverheid.mev.exception.GezagException; import nl.rijksoverheid.mev.exception.VeldInOnderzoekException; import nl.rijksoverheid.mev.gezagsmodule.domain.*; @@ -38,6 +37,7 @@ public class GezagServiceOld implements GezagService { private static final String SOORT_GEZAG_KAN_NIET_WORDEN_BEPAALD = "N"; private static final String BSN_MEERDERJARIGE_LEEG = ""; private static final String EINDE = "Einde"; + private static final String TOELICHTING_ONBEKEND_PERSOON = "Voor het opgegeven burgerservicenummer kon geen persoonslijst worden gevonden"; /** * Bepaal gezag van kind @@ -48,7 +48,7 @@ public class GezagServiceOld implements GezagService { * @return lijst gezagsrelaties of lijst gezagsrelatie 'N' */ @Override - public List getGezag(final List bsns, final Transaction transaction) throws BrpException { + public List getGezag(final List bsns, final Transaction transaction) { List gezagRelaties = new ArrayList<>(); for (String bsn : bsns) { try { @@ -158,7 +158,7 @@ private String processVraag(Map> vragenMap, String vraa } } - private void processAlleVragen(ARVragenModel arVragenModel, ARAntwoordenModel arAntwoordenModel) throws BrpException { + private void processAlleVragen(ARVragenModel arVragenModel, ARAntwoordenModel arAntwoordenModel) { try { String huidigeVraag = "v1.1"; Map> hoofdstroomschema = vragenlijstService.getVragenMap(); @@ -177,8 +177,6 @@ private void processAlleVragen(ARVragenModel arVragenModel, ARAntwoordenModel ar } } catch (AfleidingsregelException e) { arAntwoordenModel.setException(e); - } catch (BrpException e) { - throw new BrpException(); } } @@ -197,31 +195,32 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi GezagAfleidingsResultaat result; List gezagRelaties = new ArrayList<>(); String route; - Persoonslijst plPersoon = null; + Optional plPersoon = Optional.empty(); try { if (new BSNValidator().isValid(bsn)) { plPersoon = brpService.getPersoonslijst(bsn, transaction); - transactionHandler.saveGezagmoduleTransaction( - PersoonlijstType.PERSOON, - plPersoon.getReceivedId(), - null, null, null, transaction); - // Implementatie van de logica van de vragenlijst - arVragenModel = new ARVragenModel(plPersoon, this, transaction); - processAlleVragen(arVragenModel, arAntwoordenModel); + if (plPersoon.isPresent()) { + Persoonslijst persoon = plPersoon.get(); + transactionHandler.saveGezagmoduleTransaction( + PersoonlijstType.PERSOON, + persoon.getReceivedId(), + null, null, null, transaction); + // Implementatie van de logica van de vragenlijst + arVragenModel = new ARVragenModel(persoon, this, transaction); + processAlleVragen(arVragenModel, arAntwoordenModel); + } } } catch (VeldInOnderzoekException | AfleidingsregelException ex) { arAntwoordenModel.setException(ex); - } catch (BrpException ex) { - log.error("Unable to find required data from BRP", ex); - arAntwoordenModel.setException(ex); } + boolean hasVeldenInOnderzoek = arVragenModel != null && arVragenModel.warenVeldenInOnderzoek(); if (hasVeldenInOnderzoek) { arAntwoordenModel.setException(new VeldInOnderzoekException("Preconditie: Velden mogen niet in onderzoek staan")); } route = beslissingsmatrixService.findMatchingRoute(arAntwoordenModel); arAntwoordenModel.setRoute(route); - setConfiguredValues(arAntwoordenModel); + setConfiguredValues(arAntwoordenModel, plPersoon.isPresent()); if (hasVeldenInOnderzoek) { route = route + "i"; @@ -244,7 +243,7 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi result = new GezagAfleidingsResultaat(gezagRelaties, arAntwoordenModel, route); - String persoonReceivedId = (plPersoon != null ? plPersoon.getReceivedId() : ""); + String persoonReceivedId = (plPersoon.isPresent() ? plPersoon.get().getReceivedId() : ""); transactionHandler.saveGezagmoduleTransaction( null, persoonReceivedId, @@ -275,28 +274,28 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi */ @Override public Persoonslijst ophalenOuder1(final Persoonslijst plPersoon, final Transaction originalTransaction) { - Persoonslijst plOuder1 = null; + Optional plOuder1 = Optional.empty(); try { if (plPersoon.getOuder1() != null && plPersoon.getOuder1().getBsn() != null) { plOuder1 = brpService.getPersoonslijst( plPersoon.getOuder1().getBsn(), originalTransaction); - if (plOuder1 != null) { + plOuder1.ifPresent((ouder1) -> { transactionHandler.saveGezagmoduleTransaction( PersoonlijstType.OUDER1, - plOuder1.getReceivedId(), + ouder1.getReceivedId(), null, null, null, originalTransaction); - plOuder1.setHopRelaties(new HopRelaties()); - plOuder1.checkHopRelaties(); - } + ouder1.setHopRelaties(new HopRelaties()); + ouder1.checkHopRelaties(); + }); } } catch (GezagException ex) { log.debug(ex.getMessage()); } - return plOuder1; + return plOuder1.orElse(null); } /** @@ -309,30 +308,28 @@ public Persoonslijst ophalenOuder1(final Persoonslijst plPersoon, final Transact */ @Override public Persoonslijst ophalenOuder2(final Persoonslijst plPersoon, final Transaction originalTransaction) { - Persoonslijst plOuder2 = null; + Optional plOuder2 = Optional.empty();; try { if (plPersoon.getOuder2() != null && plPersoon.getOuder2().getBsn() != null) { plOuder2 = brpService.getPersoonslijst( plPersoon.getOuder2().getBsn(), originalTransaction); - if (plOuder2 != null) { + plOuder2.ifPresent((ouder2) -> { transactionHandler.saveGezagmoduleTransaction( PersoonlijstType.OUDER2, - plOuder2.getReceivedId(), + ouder2.getReceivedId(), null, null, null, originalTransaction); - plOuder2.setHopRelaties(new HopRelaties()); - plOuder2.checkHopRelaties(); - - } - + ouder2.setHopRelaties(new HopRelaties()); + ouder2.checkHopRelaties(); + }); } } catch (GezagException ex) { log.debug(ex.getMessage()); } - return plOuder2; + return plOuder2.orElse(null); } /** @@ -360,12 +357,12 @@ public Persoonslijst ophalenNietOuder(final Persoonslijst plPersoon, final Perso return null; } - Persoonslijst plNietOuder = brpService.getPersoonslijst(hopGeborenInRelatie.getPartner(), originalTransaction); - if (plNietOuder != null) { - saveTransaction(plNietOuder, originalTransaction); - } + Optional plNietOuder = brpService.getPersoonslijst(hopGeborenInRelatie.getPartner(), originalTransaction); + plNietOuder.ifPresent((nietOuder) -> { + saveTransaction(nietOuder, originalTransaction); + }); - return plNietOuder; + return plNietOuder.orElse(null); } catch (GezagException ex) { log.debug(ex.getMessage()); return null; @@ -396,13 +393,14 @@ private void saveTransaction(Persoonslijst plNietOuder, Transaction originalTran ); } - private void setConfiguredValues(final ARAntwoordenModel arAntwoordenModel) throws AfleidingsregelException { + private void setConfiguredValues(final ARAntwoordenModel arAntwoordenModel, final boolean persoonslijstExists) throws AfleidingsregelException { ARAntwoordenModel configuredARAntwoordenModel = beslissingsmatrixService.getARAntwoordenModel(arAntwoordenModel); arAntwoordenModel.setSoortGezag(configuredARAntwoordenModel.getSoortGezag()); arAntwoordenModel.setGezagOuder1(configuredARAntwoordenModel.getGezagOuder1()); arAntwoordenModel.setGezagOuder2(configuredARAntwoordenModel.getGezagOuder2()); arAntwoordenModel.setGezagNietOuder1(configuredARAntwoordenModel.getGezagNietOuder1()); arAntwoordenModel.setGezagNietOuder2(configuredARAntwoordenModel.getGezagNietOuder2()); - arAntwoordenModel.setUitleg(configuredARAntwoordenModel.getUitleg()); + arAntwoordenModel.setUitleg((!persoonslijstExists ? TOELICHTING_ONBEKEND_PERSOON : + configuredARAntwoordenModel.getUitleg())); } } diff --git a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/newversion/GezagServiceNew.java b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/newversion/GezagServiceNew.java index b04fb7858..c42d433c4 100644 --- a/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/newversion/GezagServiceNew.java +++ b/src/main/java/nl/rijksoverheid/mev/gezagsmodule/service/newversion/GezagServiceNew.java @@ -4,7 +4,9 @@ import lombok.extern.slf4j.Slf4j; import nl.rijksoverheid.mev.brpadapter.service.BrpService; import nl.rijksoverheid.mev.common.util.BSNValidator; -import nl.rijksoverheid.mev.exception.*; +import nl.rijksoverheid.mev.exception.AfleidingsregelException; +import nl.rijksoverheid.mev.exception.GezagException; +import nl.rijksoverheid.mev.exception.VeldInOnderzoekException; import nl.rijksoverheid.mev.gezagsmodule.domain.ARAntwoordenModel; import nl.rijksoverheid.mev.gezagsmodule.domain.HopRelatie; import nl.rijksoverheid.mev.gezagsmodule.domain.HopRelaties; @@ -17,10 +19,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; /** * Service voor bepalen gezag @@ -40,6 +39,7 @@ public class GezagServiceNew implements GezagService { private static final String SOORT_GEZAG_NVT = "NVT"; private static final String SOORT_GEZAG_KAN_NIET_WORDEN_BEPAALD = "N"; private static final String BSN_MEERDERJARIGE_LEEG = ""; + private static final String TOELICHTING_ONBEKEND_PERSOON = "Voor het opgegeven burgerservicenummer kon geen persoonslijst worden gevonden"; /** * Bepaal gezag van kind @@ -50,7 +50,7 @@ public class GezagServiceNew implements GezagService { * @return lijst gezagsrelaties of lijst gezagsrelatie 'N' */ @Override - public List getGezag(final List bsns, final Transaction transaction) throws BrpException { + public List getGezag(final List bsns, final Transaction transaction) { List gezagRelaties = new ArrayList<>(); for (String bsn : bsns) { try { @@ -80,23 +80,24 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi GezagAfleidingsResultaat result; List gezagRelaties = new ArrayList<>(); String route; - Persoonslijst plPersoon = null; + Optional plPersoon = Optional.empty(); GezagBepaling gezagBepaling = null; try { if (new BSNValidator().isValid(bsn)) { plPersoon = brpService.getPersoonslijst(bsn, transaction); - transactionHandler.saveGezagmoduleTransaction( - PersoonlijstType.PERSOON, - plPersoon.getReceivedId(), - null, null, null, transaction); + if (plPersoon.isPresent()) { + Persoonslijst persoon = plPersoon.get(); + transactionHandler.saveGezagmoduleTransaction( + PersoonlijstType.PERSOON, + persoon.getReceivedId(), + null, null, null, transaction); - gezagBepaling = new GezagBepaling(plPersoon, this, vragenlijstService.getVragenMap(), transaction); - arAntwoordenModel = gezagBepaling.start(); + gezagBepaling = new GezagBepaling(persoon, this, vragenlijstService.getVragenMap(), transaction); + arAntwoordenModel = gezagBepaling.start(); + } } } catch (VeldInOnderzoekException | AfleidingsregelException ex) { arAntwoordenModel.setException(ex); - } catch (BrpException ex) { - throw new PersoonslijstNotFoundException("Persoonslijst kan niet gevonden worden", ex); } boolean hasVeldenInOnderzoek = gezagBepaling != null && gezagBepaling.warenVeldenInOnderzoek(); if (hasVeldenInOnderzoek) { @@ -104,7 +105,7 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi } route = beslissingsmatrixService.findMatchingRoute(arAntwoordenModel); arAntwoordenModel.setRoute(route); - setConfiguredValues(arAntwoordenModel); + setConfiguredValues(arAntwoordenModel, plPersoon.isPresent()); String unformattedUitleg = arAntwoordenModel.getUitleg(); @@ -141,7 +142,7 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi result = new GezagAfleidingsResultaat(gezagRelaties, arAntwoordenModel, route); - String persoonReceivedId = (plPersoon != null ? plPersoon.getReceivedId() : ""); + String persoonReceivedId = (plPersoon.isPresent() ? plPersoon.get().getReceivedId() : ""); transactionHandler.saveGezagmoduleTransaction( null, persoonReceivedId, @@ -172,28 +173,28 @@ public GezagAfleidingsResultaat getGezagAfleidingsResultaat(final String bsn, fi */ @Override public Persoonslijst ophalenOuder1(final Persoonslijst plPersoon, final Transaction originalTransaction) { - Persoonslijst plOuder1 = null; + Optional plOuder1 = Optional.empty(); try { if (plPersoon.getOuder1() != null && plPersoon.getOuder1().getBsn() != null) { plOuder1 = brpService.getPersoonslijst( plPersoon.getOuder1().getBsn(), originalTransaction); - if (plOuder1 != null) { + plOuder1.ifPresent((ouder1) -> { transactionHandler.saveGezagmoduleTransaction( PersoonlijstType.OUDER1, - plOuder1.getReceivedId(), + ouder1.getReceivedId(), null, null, null, originalTransaction); - plOuder1.setHopRelaties(new HopRelaties()); - plOuder1.checkHopRelaties(); - } + ouder1.setHopRelaties(new HopRelaties()); + ouder1.checkHopRelaties(); + }); } } catch (GezagException ex) { log.debug(ex.getMessage()); } - return plOuder1; + return plOuder1.orElse(null); } /** @@ -206,30 +207,28 @@ public Persoonslijst ophalenOuder1(final Persoonslijst plPersoon, final Transact */ @Override public Persoonslijst ophalenOuder2(final Persoonslijst plPersoon, final Transaction originalTransaction) { - Persoonslijst plOuder2 = null; + Optional plOuder2 = Optional.empty(); try { if (plPersoon.getOuder2() != null && plPersoon.getOuder2().getBsn() != null) { plOuder2 = brpService.getPersoonslijst( plPersoon.getOuder2().getBsn(), originalTransaction); - if (plOuder2 != null) { + plOuder2.ifPresent((ouder2) -> { transactionHandler.saveGezagmoduleTransaction( PersoonlijstType.OUDER2, - plOuder2.getReceivedId(), + ouder2.getReceivedId(), null, null, null, originalTransaction); - plOuder2.setHopRelaties(new HopRelaties()); - plOuder2.checkHopRelaties(); - - } - + ouder2.setHopRelaties(new HopRelaties()); + ouder2.checkHopRelaties(); + }); } } catch (GezagException ex) { log.debug(ex.getMessage()); } - return plOuder2; + return plOuder2.orElse(null); } /** @@ -257,12 +256,12 @@ public Persoonslijst ophalenNietOuder(final Persoonslijst plPersoon, final Perso return null; } - Persoonslijst plNietOuder = brpService.getPersoonslijst(hopGeborenInRelatie.getPartner(), originalTransaction); - if (plNietOuder != null) { - saveTransaction(plNietOuder, originalTransaction); - } + Optional plNietOuder = brpService.getPersoonslijst(hopGeborenInRelatie.getPartner(), originalTransaction); + plNietOuder.ifPresent((nietOuder) -> { + saveTransaction(nietOuder, originalTransaction); + }); - return plNietOuder; + return plNietOuder.orElse(null); } catch (GezagException ex) { log.debug(ex.getMessage()); return null; @@ -293,13 +292,14 @@ private void saveTransaction(Persoonslijst plNietOuder, Transaction originalTran ); } - private void setConfiguredValues(final ARAntwoordenModel arAntwoordenModel) throws AfleidingsregelException { + private void setConfiguredValues(final ARAntwoordenModel arAntwoordenModel, final boolean persoonslijstExists) throws AfleidingsregelException { ARAntwoordenModel configuredARAntwoordenModel = beslissingsmatrixService.getARAntwoordenModel(arAntwoordenModel); arAntwoordenModel.setSoortGezag(configuredARAntwoordenModel.getSoortGezag()); arAntwoordenModel.setGezagOuder1(configuredARAntwoordenModel.getGezagOuder1()); arAntwoordenModel.setGezagOuder2(configuredARAntwoordenModel.getGezagOuder2()); arAntwoordenModel.setGezagNietOuder1(configuredARAntwoordenModel.getGezagNietOuder1()); arAntwoordenModel.setGezagNietOuder2(configuredARAntwoordenModel.getGezagNietOuder2()); - arAntwoordenModel.setUitleg(configuredARAntwoordenModel.getUitleg()); + arAntwoordenModel.setUitleg((!persoonslijstExists ? TOELICHTING_ONBEKEND_PERSOON : + configuredARAntwoordenModel.getUitleg())); } }