|
2 | 2 |
|
3 | 3 | import no.nav.fpsak.tidsserie.LocalDateSegment;
|
4 | 4 | import no.nav.fpsak.tidsserie.LocalDateTimeline;
|
| 5 | +import no.nav.fpsak.tidsserie.StandardCombinators; |
5 | 6 | import no.nav.k9.søknad.felles.Feil;
|
6 | 7 | import no.nav.k9.søknad.felles.type.Periode;
|
7 | 8 |
|
8 | 9 | import java.time.DayOfWeek;
|
9 | 10 | import java.time.LocalDate;
|
10 | 11 | import java.util.ArrayList;
|
| 12 | +import java.util.Collections; |
11 | 13 | import java.util.List;
|
12 | 14 | import java.util.Map;
|
13 | 15 | import java.util.stream.Collectors;
|
14 | 16 |
|
15 | 17 | public class TidsserieValidator {
|
16 | 18 |
|
17 |
| - public static TidsseriePeriodeWrapper finnIkkeKomplettePerioderOgPerioderUtenfor(LocalDateTimeline<Boolean> testTidsserie, LocalDateTimeline<Boolean> hovedTidsserie) { |
18 |
| - return new TidsseriePeriodeWrapper( |
19 |
| - TidsserieUtils.toPeriodeList(hovedTidsserie.disjoint(testTidsserie)), |
20 |
| - TidsserieUtils.toPeriodeList(testTidsserie.disjoint(hovedTidsserie))); |
| 19 | + public static PerioderMedFeil finnIkkeKomplettePerioderOgPerioderUtenfor(LocalDateTimeline<Boolean> test, Perioder perioder) { |
| 20 | + return new PerioderMedFeil( |
| 21 | + getPerioderSomIkkeOverlapperMedHovedperiode(test, perioder), |
| 22 | + getPerioderUtenforGyldigperiode(test, perioder)); |
21 | 23 | }
|
22 | 24 |
|
23 |
| - public static TidsseriePeriodeWrapper finnPerioderUtenfor(LocalDateTimeline<Boolean> testTidsserie, LocalDateTimeline<Boolean> hovedTidsserie) { |
24 |
| - return new TidsseriePeriodeWrapper( |
25 |
| - new ArrayList<>(), |
26 |
| - TidsserieUtils.toPeriodeList(testTidsserie.disjoint(hovedTidsserie))); |
| 25 | + private static List<Periode> getPerioderUtenforGyldigperiode(LocalDateTimeline<Boolean> test, Perioder perioder) { |
| 26 | + return TidsserieUtils.toPeriodeList(test.disjoint(perioder.gyldigInterval)); |
| 27 | + } |
| 28 | + |
| 29 | + private static List<Periode> getPerioderSomIkkeOverlapperMedHovedperiode(LocalDateTimeline<Boolean> test, Perioder perioder) { |
| 30 | + |
| 31 | + return TidsserieUtils.toPeriodeList(perioder.søknadsperiode.disjoint(test)); |
| 32 | + } |
| 33 | + |
| 34 | + public static PerioderMedFeil finnPerioderUtenfor(LocalDateTimeline<Boolean> testTidsserie, Perioder hovedTidsserie) { |
| 35 | + return new PerioderMedFeil( |
| 36 | + Collections.emptyList(), |
| 37 | + getPerioderUtenforGyldigperiode(testTidsserie, hovedTidsserie)); |
27 | 38 | }
|
28 | 39 |
|
29 | 40 | public static boolean periodeInneholderDagerSomIkkeErHelg(Periode periode) {
|
@@ -51,32 +62,51 @@ public static LocalDateTimeline<Boolean> toLocalDateTimeline(Map<Periode, ?> per
|
51 | 62 | }
|
52 | 63 | }
|
53 | 64 |
|
54 |
| - public static class TidsseriePeriodeWrapper { |
| 65 | + public static class Perioder { |
| 66 | + private final LocalDateTimeline<Boolean> søknadsperiode; |
| 67 | + private final LocalDateTimeline<Boolean> gyldigInterval; |
| 68 | + |
| 69 | + public Perioder(List<Periode> søknadsperiode, List<Periode> endringsperiode) { |
| 70 | + this.søknadsperiode = TidsserieUtils.toLocalDateTimeline(søknadsperiode); |
| 71 | + this.gyldigInterval = this.søknadsperiode.union(TidsserieUtils.toLocalDateTimeline(endringsperiode), StandardCombinators::coalesceLeftHandSide); |
| 72 | + } |
| 73 | + |
| 74 | + public LocalDateTimeline<Boolean> getSøknadsperiode() { |
| 75 | + return søknadsperiode; |
| 76 | + } |
| 77 | + |
| 78 | + public LocalDateTimeline<Boolean> getPerioderDerEndringerErTillatt() { |
| 79 | + return gyldigInterval; |
| 80 | + } |
| 81 | + } |
| 82 | + |
| 83 | + public static class PerioderMedFeil { |
55 | 84 | private final List<Periode> perioderSomIkkeOverlapperMedHovedperiode;
|
56 |
| - private final List<Periode> perioderUtenforHovedperiode; |
| 85 | + private final List<Periode> perioderUtenforGyldigperiode; |
57 | 86 |
|
58 |
| - public TidsseriePeriodeWrapper(List<Periode> perioderSomIkkeOverlapperMedHovedperiode, List<Periode> perioderUtenforHovedperiode) { |
| 87 | + public PerioderMedFeil(List<Periode> perioderSomIkkeOverlapperMedHovedperiode, List<Periode> perioderUtenforGyldigperiode) { |
59 | 88 | this.perioderSomIkkeOverlapperMedHovedperiode = perioderSomIkkeOverlapperMedHovedperiode;
|
60 |
| - this.perioderUtenforHovedperiode = perioderUtenforHovedperiode; |
| 89 | + this.perioderUtenforGyldigperiode = perioderUtenforGyldigperiode; |
61 | 90 | }
|
62 | 91 |
|
63 | 92 | public List<Periode> getPerioderSomIkkeOverlapperMedHovedperiode() {
|
64 | 93 | return perioderSomIkkeOverlapperMedHovedperiode;
|
65 | 94 | }
|
66 | 95 |
|
67 |
| - public List<Periode> getPerioderUtenforHovedperiode() { |
68 |
| - return perioderUtenforHovedperiode; |
| 96 | + public List<Periode> getPerioderUtenforGyldigperiode() { |
| 97 | + return perioderUtenforGyldigperiode; |
69 | 98 | }
|
70 | 99 |
|
71 | 100 | public void valider(String felt , List<Feil> feil) {
|
72 |
| - if(!this.perioderSomIkkeOverlapperMedHovedperiode.isEmpty()) { |
| 101 | + if (!this.perioderSomIkkeOverlapperMedHovedperiode.isEmpty()) { |
73 | 102 | feil.addAll(this.perioderSomIkkeOverlapperMedHovedperiode.stream()
|
74 | 103 | .filter(TidsserieValidator::periodeInneholderDagerSomIkkeErHelg)
|
75 | 104 | .map(p -> toFeil(p, felt, "ikkeKomplettPeriode", "Periodene er ikke komplett, periode som mangler er: "))
|
76 | 105 | .collect(Collectors.toList()));
|
77 | 106 | }
|
78 |
| - if(!this.perioderUtenforHovedperiode.isEmpty()) { |
79 |
| - feil.addAll(this.perioderUtenforHovedperiode.stream() |
| 107 | + |
| 108 | + if (!this.perioderUtenforGyldigperiode.isEmpty()) { |
| 109 | + feil.addAll(this.perioderUtenforGyldigperiode.stream() |
80 | 110 | .map(p -> toFeil(p, felt, "ugyldigPeriode", "Perioden er utenfor søknadsperioden : "))
|
81 | 111 | .collect(Collectors.toList()));
|
82 | 112 | }
|
|
0 commit comments