1
1
package no .nav .k9 .søknad .felles .type ;
2
2
3
3
import java .time .LocalDate ;
4
- import java .util .Comparator ;
5
- import java .util .Map ;
6
4
import java .util .Objects ;
7
- import java .util .SortedSet ;
8
- import java .util .TreeSet ;
9
- import java .util .stream .Collectors ;
10
5
11
6
import javax .validation .constraints .AssertFalse ;
12
7
13
8
import com .fasterxml .jackson .annotation .JsonCreator ;
14
9
import com .fasterxml .jackson .annotation .JsonValue ;
15
10
16
11
public class Periode implements Comparable <Periode > {
17
- static final String ÅPEN = ".." ;
18
- static final String SKILLE = "/" ;
12
+ private static final String ÅPEN = ".." ;
13
+ private static final String SKILLE = "/" ;
19
14
20
- private LocalDate fraOgMed ;
15
+ private final LocalDate fraOgMed ;
21
16
22
- private LocalDate tilOgMed ;
17
+ private final LocalDate tilOgMed ;
23
18
24
19
@ JsonValue
25
- private String iso8601 ;
20
+ private final String iso8601 ;
21
+
22
+ public static Periode parse (String iso8601 ) {
23
+ return new Periode (iso8601 );
24
+ }
26
25
27
26
@ JsonCreator
28
27
public Periode (String iso8601 ) {
@@ -33,10 +32,6 @@ public Periode(String iso8601) {
33
32
this .iso8601 = iso8601 ;
34
33
}
35
34
36
- public Periode (Periode p ) {
37
- this (p .getFraOgMed (), p .getTilOgMed ());
38
- }
39
-
40
35
public Periode (LocalDate fraOgMed , LocalDate tilOgMed ) {
41
36
this .fraOgMed = fraOgMed ;
42
37
this .tilOgMed = tilOgMed ;
@@ -56,38 +51,10 @@ public LocalDate getTilOgMed() {
56
51
return tilOgMed ;
57
52
}
58
53
59
- public void setFraOgMed (LocalDate fraOgMed ) {
60
- this .fraOgMed = fraOgMed ;
61
- }
62
-
63
- public void setTilOgMed (LocalDate tilOgMed ) {
64
- this .tilOgMed = tilOgMed ;
65
- }
66
-
67
54
public String getIso8601 () {
68
55
return iso8601 ;
69
56
}
70
57
71
- public void setIso8601 (String iso8601 ) {
72
- this .iso8601 = iso8601 ;
73
- }
74
-
75
- public static Periode parse (String iso8601 ) {
76
- return new Periode (iso8601 );
77
- }
78
-
79
- public static Periode forsikreLukketPeriode (Periode periode , LocalDate fallbackTilOgMed ) {
80
- Objects .requireNonNull (periode );
81
- Objects .requireNonNull (periode .fraOgMed );
82
- Objects .requireNonNull (fallbackTilOgMed );
83
- return new Periode (periode .fraOgMed , periode .tilOgMed != null ? periode .tilOgMed : fallbackTilOgMed );
84
- }
85
-
86
- @ Override
87
- public int compareTo (Periode o ) {
88
- return this .iso8601 .compareTo (o .iso8601 );
89
- }
90
-
91
58
@ Override
92
59
public boolean equals (Object o ) {
93
60
if (this == o )
@@ -109,6 +76,11 @@ public String toString() {
109
76
return iso8601 ;
110
77
}
111
78
79
+ @ Override
80
+ public int compareTo (Periode o ) {
81
+ return this .iso8601 .compareTo (o .iso8601 );
82
+ }
83
+
112
84
/**
113
85
* Sjekk om denne perioden inneholder (omslutter) angitt periode.
114
86
*/
@@ -117,19 +89,6 @@ public boolean inneholder(Periode periode) {
117
89
&& (this .tilOgMed == null || (periode .tilOgMed != null && !this .tilOgMed .isBefore (periode .tilOgMed )));
118
90
}
119
91
120
- /**
121
- * Sjekk om denne perioden og annenPeriode har overlappende tidsintervaller.
122
- */
123
- public boolean overlapper (Periode annenPeriode ) {
124
- boolean starterFørEllerSamtidigSomAnnenPeriodeSlutter = this .fraOgMed == null || this .fraOgMed != null && annenPeriode .getTilOgMed () == null || this .fraOgMed != null && annenPeriode .getTilOgMed () != null && (this .fraOgMed .isEqual (annenPeriode .getTilOgMed ()) || this .fraOgMed .isBefore (annenPeriode .getTilOgMed ()));
125
- if (!starterFørEllerSamtidigSomAnnenPeriodeSlutter ) {
126
- return false ;
127
- } else {
128
- boolean slutterEtterEllerSamtidigSomPeriodeStarter = this .tilOgMed == null || this .tilOgMed != null && annenPeriode .getFraOgMed () == null || this .tilOgMed != null && annenPeriode .getFraOgMed () != null && (this .tilOgMed .isEqual (annenPeriode .getFraOgMed ()) || this .tilOgMed .isAfter (annenPeriode .getFraOgMed ()));
129
- return slutterEtterEllerSamtidigSomPeriodeStarter ;
130
- }
131
- }
132
-
133
92
private static void verifiserKanVæreGyldigPeriode (String iso8601 ) {
134
93
if (iso8601 == null || iso8601 .split (SKILLE ).length != 2 ) {
135
94
throw new IllegalArgumentException ("Periode på ugylig format '" + iso8601 + "'." );
@@ -143,80 +102,10 @@ private static LocalDate parseLocalDate(String iso8601) {
143
102
return LocalDate .parse (iso8601 );
144
103
}
145
104
146
- public static final class Utils {
147
- private Utils () {
148
- }
149
-
150
- private static final Comparator <Periode > tilOgMedComparator = Comparator .comparing (periode -> periode .tilOgMed );
151
-
152
- public static <PERIODE_INFO > void leggTilPeriode (
153
- Map <Periode , PERIODE_INFO > perioder ,
154
- Periode nyPeriode ,
155
- PERIODE_INFO nyPeriodeInfo ) {
156
- Objects .requireNonNull (perioder , "perioder" );
157
- Objects .requireNonNull (nyPeriode , "nyPeriode" );
158
- Objects .requireNonNull (nyPeriodeInfo , "nyPeriodeInfo" );
159
-
160
- if (perioder .containsKey (nyPeriode )) {
161
- throw new IllegalArgumentException ("Inneholder allerede " + nyPeriode .iso8601 );
162
- }
163
-
164
- perioder .put (nyPeriode , nyPeriodeInfo );
165
- }
166
-
167
- public static <PERIODE_INFO > void leggTilPerioder (
168
- Map <Periode , PERIODE_INFO > perioder ,
169
- Map <Periode , PERIODE_INFO > nyePerioder ) {
170
- Objects .requireNonNull (perioder );
171
- Objects .requireNonNull (nyePerioder );
172
- var nyeKeys = nyePerioder .keySet ();
173
-
174
- var duplikater = perioder
175
- .keySet ()
176
- .stream ()
177
- .filter (nyeKeys ::contains )
178
- .collect (Collectors .toSet ());
179
-
180
- if (!duplikater .isEmpty ()) {
181
- var duplikatePerioder = String .join (", " , duplikater
182
- .stream ()
183
- .map (it -> it .iso8601 )
184
- .collect (Collectors .toSet ()));
185
- throw new IllegalArgumentException ("Inneholder allerede " + duplikatePerioder );
186
- }
187
-
188
- perioder .putAll (nyePerioder );
189
- }
190
-
191
- public static LocalDate sisteTilOgMedTillatÅpnePerioder (Map <Periode , ?> periodeMap ) {
192
- return sisteTilOgMed (periodeMap );
193
- }
194
-
195
- public static LocalDate sisteTilOgMedBlantLukkedePerioder (Map <Periode , ?> periodeMap ) {
196
- LocalDate sisteTilOgMed = sisteTilOgMed (periodeMap );
197
- if (sisteTilOgMed == null )
198
- throw new IllegalStateException ("En eller fler av periodene er åpne (uten tilOgMed satt)." );
199
- return sisteTilOgMed ;
200
- }
201
-
202
- private static LocalDate sisteTilOgMed (Map <Periode , ?> periodeMap ) {
203
- if (periodeMap == null || periodeMap .isEmpty ()) {
204
- throw new IllegalStateException ("Må være minst en periode for å finne siste tilOgMed" );
205
- }
206
- if (periodeMap .keySet ().stream ().anyMatch (periode -> periode .tilOgMed == null )) {
207
- return null ;
208
- }
209
- SortedSet <Periode > perioder = new TreeSet <>(tilOgMedComparator );
210
- perioder .addAll (periodeMap .keySet ());
211
- return perioder .last ().tilOgMed ;
212
- }
213
- }
214
-
215
105
private static String toIso8601 (LocalDate dato ) {
216
106
if (dato == null )
217
107
return Periode .ÅPEN ;
218
108
else
219
109
return dato .toString ();
220
110
}
221
-
222
111
}
0 commit comments