8
8
import java .util .ArrayList ;
9
9
import java .util .List ;
10
10
import java .util .Map ;
11
+ import java .util .Objects ;
11
12
import java .util .stream .Collectors ;
12
13
13
14
import javax .validation .ConstraintViolation ;
14
- import javax .validation .Validation ;
15
- import javax .validation .ValidatorFactory ;
16
15
17
16
import no .nav .fpsak .tidsserie .LocalDateTimeline ;
18
17
import no .nav .fpsak .tidsserie .StandardCombinators ;
@@ -26,61 +25,90 @@ class PleiepengerSyktBarnYtelseValidator extends YtelseValidator {
26
25
27
26
private final String YTELSE_FELT = "ytelse." ;
28
27
29
- private static final ValidatorFactory VALIDATOR_FACTORY = Validation .buildDefaultValidatorFactory ();
30
-
31
28
@ Override
32
29
public List <Feil > valider (Ytelse ytelse ) {
33
- return valider (ytelse , List .of ());
30
+ return validerMedGyldigEndringsperodeHvisDenFinnes (ytelse , List .of (), false );
34
31
}
35
32
36
33
//For å overload forsikreValidert(Ytelse ytelse)
37
34
public void forsikreValidert (Ytelse ytelse , List <Periode > gyldigeEndringsperioder ) {
38
- List <Feil > feil = valider (ytelse , gyldigeEndringsperioder );
35
+ Objects .requireNonNull (gyldigeEndringsperioder , "gyldigeEndringsperioder" );
36
+
37
+ List <Feil > feil = validerMedGyldigEndringsperodeHvisDenFinnes (ytelse , gyldigeEndringsperioder , true );
39
38
if (!feil .isEmpty ()) {
40
39
throw new ValideringsFeil (feil );
41
40
}
42
41
}
43
42
44
43
public List <Feil > valider (Ytelse ytelse , List <Periode > gyldigeEndringsperioder ) {
44
+ return validerMedGyldigEndringsperodeHvisDenFinnes (ytelse , gyldigeEndringsperioder , true );
45
+ }
46
+
47
+ List <Feil > validerMedGyldigEndringsperodeHvisDenFinnes (Ytelse ytelse ,
48
+ List <Periode > gyldigeEndringsperioder ,
49
+ boolean brukValideringMedUtledetEndringsperiode ) {
50
+
51
+ Objects .requireNonNull (gyldigeEndringsperioder , "gyldigeEndringsperioder" );
52
+
45
53
var psb = (PleiepengerSyktBarn ) ytelse ;
46
- var feil = new ArrayList <Feil >();
47
-
48
-
49
- //TODO endre getEndringsperioder til gyldigeEndringsperioder
50
- if (psb .getSøknadsperiodeList ().isEmpty () && psb .getEndringsperiode ().isEmpty ()) {
51
- feil .add (lagFeil ("søknadsperiode" , "missingArgument" , "Mangler søknadsperiode eller gyldigeEndringsperioder." ));
52
- }
53
- feil .addAll (validerPerioderErLukketOgGyldig (psb .getBosteder ().getPerioder (), "bosteder.perioder" ));
54
- feil .addAll (validerPerioderErLukketOgGyldig (psb .getUtenlandsopphold ().getPerioder (), "utenlandsopphold.perioder" ));
54
+ var feilene = new ArrayList <Feil >();
55
55
56
56
try {
57
- var søknadsperiodeTidslinje = lagTidslinjeOgValider ( psb . getSøknadsperiodeList (), "søknadsperiode.perioder" );
58
- var gyldigEndringsperiodeTidslinje = lagTidslinjeOgValider ( gyldigeEndringsperioder , "gyldigeEndringsperioder.perioder" );
59
- var endringsperiodeTidslinje = lagTidslinjeOgValider ( psb . getEndringsperiode (), "endringsperiode.perioder" );
60
- var intervalForEndringTidslinje = søknadsperiodeTidslinje . union ( gyldigEndringsperiodeTidslinje , StandardCombinators :: coalesceLeftHandSide );
57
+ feilene . addAll ( validerOgLeggTilFeilene ( psb , gyldigeEndringsperioder , brukValideringMedUtledetEndringsperiode ) );
58
+ } catch ( ValideringsAvbrytendeFeilException valideringsAvbrytendeFeilException ) {
59
+ feilene . addAll ( valideringsAvbrytendeFeilException . getFeilList () );
60
+ }
61
61
62
- //TODO: Slette når endringerperioder utledes.
63
- intervalForEndringTidslinje = intervalForEndringTidslinje .union (endringsperiodeTidslinje , StandardCombinators ::coalesceLeftHandSide );
64
- //TODO: Slette når endringerperioder utledes.
62
+ return feilene ;
63
+ }
64
+
65
+ private List <Feil > validerOgLeggTilFeilene (PleiepengerSyktBarn psb ,
66
+ List <Periode > gyldigeEndringsperioder ,
67
+ boolean brukValideringMedUtledetEndringsperiode ) {
68
+ final List <Feil > feilene = new ArrayList <Feil >();
69
+
70
+ feilene .addAll (validerLovligEndring (psb , gyldigeEndringsperioder , brukValideringMedUtledetEndringsperiode ));
71
+ feilene .addAll (validerPerioderErLukketOgGyldig (psb .getBosteder ().getPerioder (), "bosteder.perioder" ));
72
+ feilene .addAll (validerPerioderErLukketOgGyldig (psb .getUtenlandsopphold ().getPerioder (), "utenlandsopphold.perioder" ));
73
+
74
+ final LocalDateTimeline <Boolean > søknadsperiodeTidslinje = lagTidslinjeOgValider (psb .getSøknadsperiodeList (), "søknadsperiode.perioder" );
75
+ final LocalDateTimeline <Boolean > intervalForEndringTidslinje ;
76
+
77
+ if (brukValideringMedUtledetEndringsperiode ) {
78
+ final LocalDateTimeline <Boolean > gyldigEndringsperiodeTidslinje = lagTidslinjeOgValider (gyldigeEndringsperioder , "gyldigeEndringsperioder.perioder" );
79
+ intervalForEndringTidslinje = søknadsperiodeTidslinje .union (gyldigEndringsperiodeTidslinje , StandardCombinators ::coalesceLeftHandSide );
80
+ } else {
81
+ final LocalDateTimeline <Boolean > endringsperiodeTidslinje = lagTidslinjeOgValider (psb .getEndringsperiode (), "endringsperiode.perioder" );
82
+ intervalForEndringTidslinje = søknadsperiodeTidslinje .union (endringsperiodeTidslinje , StandardCombinators ::coalesceLeftHandSide );
83
+ }
65
84
66
- var trekkKravPerioderTidslinje = lagTidslinjeOgValider (psb .getTrekkKravPerioder (), "trekkKravPerioder.perioder" );
85
+ final LocalDateTimeline < Boolean > trekkKravPerioderTidslinje = lagTidslinjeOgValider (psb .getTrekkKravPerioder (), "trekkKravPerioder.perioder" );
67
86
68
- //Validerer at trekkKravPerioder ikke er innenfor søknadsperioden
69
- feil .addAll (validerAtIngenPerioderOverlapperMedTrekkKravPerioder (trekkKravPerioderTidslinje , søknadsperiodeTidslinje , "søknadperiode.perioder" ));
87
+ if (brukValideringMedUtledetEndringsperiode ) {
88
+ feilene .addAll (validerAtIngenPerioderOverlapperMedTrekkKravPerioder (trekkKravPerioderTidslinje , søknadsperiodeTidslinje , "trekkKravPerioder" ));
89
+ }
70
90
71
- for (var ytelsePeriode : PerioderMedEndringUtil .getAllePerioderSomMåVæreInnenforSøknadsperiode (psb )) {
72
- var ytelsePeriodeTidsserie = lagTidslinjeOgValider (ytelsePeriode .getPeriodeList (), ytelsePeriode .getFelt () + ".perioder" );
73
- feil .addAll (validerAtYtelsePerioderErInnenforIntervalForEndring (intervalForEndringTidslinje , ytelsePeriodeTidsserie , ytelsePeriode .getFelt () + ".perioder" ));
74
- feil .addAll (validerAtIngenPerioderOverlapperMedTrekkKravPerioder (trekkKravPerioderTidslinje , ytelsePeriodeTidsserie , ytelsePeriode .getFelt () + ".perioder" ));
75
- }
91
+ for (var ytelsePeriode : PerioderMedEndringUtil .getAllePerioderSomMåVæreInnenforSøknadsperiode (psb )) {
92
+ var ytelsePeriodeTidsserie = lagTidslinjeOgValider (ytelsePeriode .getPeriodeList (), ytelsePeriode .getFelt () + ".perioder" );
93
+ feilene .addAll (validerAtYtelsePerioderErInnenforIntervalForEndring (intervalForEndringTidslinje , ytelsePeriodeTidsserie , ytelsePeriode .getFelt () + ".perioder" ));
94
+ feilene .addAll (validerAtIngenPerioderOverlapperMedTrekkKravPerioder (trekkKravPerioderTidslinje , ytelsePeriodeTidsserie , ytelsePeriode .getFelt () + ".perioder" ));
95
+ }
76
96
77
- validerAtYtelsePeriodenErKomplettMedSøknad (søknadsperiodeTidslinje , psb .getUttak ().getPerioder (), "uttak" );
97
+ feilene .addAll (validerAtYtelsePeriodenErKomplettMedSøknad (søknadsperiodeTidslinje , psb .getUttak ().getPerioder (), "uttak" ));
98
+
99
+ return feilene ;
100
+ }
78
101
79
- } catch (ValideringsAvbrytendeFeilException valideringsAvbrytendeFeilException ) {
80
- feil .addAll (valideringsAvbrytendeFeilException .getFeilList ());
102
+ private List <Feil > validerLovligEndring (PleiepengerSyktBarn psb , List <Periode > gyldigeEndringsperioder ,
103
+ boolean brukValideringMedUtledetEndringsperiode ) {
104
+ if (psb .getSøknadsperiodeList ().isEmpty ()
105
+ && (
106
+ !brukValideringMedUtledetEndringsperiode && psb .getEndringsperiode ().isEmpty ()
107
+ || brukValideringMedUtledetEndringsperiode && gyldigeEndringsperioder .isEmpty ()
108
+ )) {
109
+ return List .of (lagFeil ("søknadsperiode" , "missingArgument" , "Mangler søknadsperiode eller gyldigeEndringsperioder." ));
81
110
}
82
-
83
- return feil ;
111
+ return List .of ();
84
112
}
85
113
86
114
private List <Feil > validerAtYtelsePerioderErInnenforIntervalForEndring (LocalDateTimeline <Boolean > gyldigInterval ,
0 commit comments