Skip to content

Commit 81c2523

Browse files
committed
Støtte for å avbryte validering ved ugyldige perioder
1 parent d604732 commit 81c2523

24 files changed

+108
-54
lines changed

soknad/src/main/java/no/nav/k9/søknad/felles/fravær/FraværPeriode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515

1616
import no.nav.k9.søknad.felles.type.Organisasjonsnummer;
1717
import no.nav.k9.søknad.felles.type.Periode;
18-
import no.nav.k9.søknad.felles.type.validering.GyldigPeriode;
18+
import no.nav.k9.søknad.felles.validering.periode.LukketPeriode;
1919

2020
@JsonIgnoreProperties(ignoreUnknown = true)
2121
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
2222
public class FraværPeriode implements Comparable<FraværPeriode> {
2323

2424
@Valid
2525
@NotNull
26-
@GyldigPeriode(krevFomDato = true, krevTomDato = true)
26+
@LukketPeriode
2727
@JsonProperty("periode")
2828
private Periode periode;
2929

soknad/src/main/java/no/nav/k9/søknad/felles/opptjening/SelvstendigNæringsdrivende.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
import no.nav.k9.søknad.felles.type.Organisasjonsnummer;
2929
import no.nav.k9.søknad.felles.type.Periode;
3030
import no.nav.k9.søknad.felles.type.VirksomhetType;
31-
import no.nav.k9.søknad.felles.type.validering.GyldigePerioderMap;
31+
import no.nav.k9.søknad.felles.validering.AvbrytendeValideringsfeil;
32+
import no.nav.k9.søknad.felles.validering.periode.GyldigePerioderMap;
3233

3334
@JsonIgnoreProperties(ignoreUnknown = true)
3435
@JsonInclude(value = Include.NON_EMPTY)
@@ -37,7 +38,7 @@ public class SelvstendigNæringsdrivende {
3738

3839
@JsonProperty(value = "perioder", required = true)
3940
@Valid
40-
@GyldigePerioderMap(krevFomDato = true, krevTomDato = false)
41+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = false, payload = {AvbrytendeValideringsfeil.class})
4142
@NotNull
4243
@NotEmpty
4344
private Map<@NotNull Periode, @NotNull SelvstendigNæringsdrivendePeriodeInfo> perioder;

soknad/src/main/java/no/nav/k9/søknad/felles/personopplysninger/Bosteder.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,22 @@
1717

1818
import no.nav.k9.søknad.felles.type.Landkode;
1919
import no.nav.k9.søknad.felles.type.Periode;
20-
import no.nav.k9.søknad.felles.type.validering.GyldigePerioderMap;
20+
import no.nav.k9.søknad.felles.validering.AvbrytendeValideringsfeil;
21+
import no.nav.k9.søknad.felles.validering.periode.GyldigePerioderMap;
2122

2223
@JsonIgnoreProperties(ignoreUnknown = true)
2324
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
2425
public class Bosteder {
2526

2627
@JsonProperty(value = "perioder")
2728
@Valid
28-
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
29+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true, payload = {AvbrytendeValideringsfeil.class})
2930
@JsonInclude(value = Include.ALWAYS)
3031
private Map<@NotNull Periode, @NotNull BostedPeriodeInfo> perioder = new TreeMap<>();
3132

3233
@JsonProperty(value = "perioderSomSkalSlettes")
3334
@Valid
34-
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
35+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true, payload = {AvbrytendeValideringsfeil.class})
3536
@JsonInclude(value = Include.ALWAYS)
3637
private Map<@NotNull Periode, @NotNull BostedPeriodeInfo> perioderSomSkalSlettes = new TreeMap<>();
3738

@@ -40,7 +41,7 @@ public Map<Periode, BostedPeriodeInfo> getPerioder() {
4041
}
4142

4243
public Bosteder medPerioder(Map<Periode, BostedPeriodeInfo> perioder) {
43-
this.perioder = (perioder == null ) ? new TreeMap<>() : new TreeMap<>(perioder);
44+
this.perioder = (perioder == null) ? new TreeMap<>() : new TreeMap<>(perioder);
4445
return this;
4546
}
4647

@@ -49,7 +50,7 @@ public Map<Periode, BostedPeriodeInfo> getPerioderSomSkalSlettes() {
4950
}
5051

5152
public Bosteder medPerioderSomSkalSlettes(Map<Periode, BostedPeriodeInfo> perioderSomSkalSlettes) {
52-
this.perioderSomSkalSlettes = (perioderSomSkalSlettes == null ) ? new TreeMap<>() : new TreeMap<>(perioderSomSkalSlettes);
53+
this.perioderSomSkalSlettes = (perioderSomSkalSlettes == null) ? new TreeMap<>() : new TreeMap<>(perioderSomSkalSlettes);
5354
return this;
5455
}
5556

soknad/src/main/java/no/nav/k9/søknad/felles/personopplysninger/Utenlandsopphold.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,21 @@
1919

2020
import no.nav.k9.søknad.felles.type.Landkode;
2121
import no.nav.k9.søknad.felles.type.Periode;
22-
import no.nav.k9.søknad.felles.type.validering.GyldigePerioderMap;
22+
import no.nav.k9.søknad.felles.validering.AvbrytendeValideringsfeil;
23+
import no.nav.k9.søknad.felles.validering.periode.GyldigePerioderMap;
2324

2425
@JsonIgnoreProperties(ignoreUnknown = true)
2526
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
2627
public class Utenlandsopphold {
2728

2829
@Valid
29-
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
30+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true, payload = {AvbrytendeValideringsfeil.class})
3031
@JsonInclude(value = Include.ALWAYS)
3132
@JsonProperty(value = "perioder")
3233
private Map<@NotNull Periode, @NotNull UtenlandsoppholdPeriodeInfo> perioder = new TreeMap<>();
3334

3435
@Valid
35-
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
36+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true, payload = {AvbrytendeValideringsfeil.class})
3637
@JsonInclude(value = Include.ALWAYS)
3738
@JsonProperty(value = "perioderSomSkalSlettes")
3839
private Map<@NotNull Periode, @NotNull UtenlandsoppholdPeriodeInfo> perioderSomSkalSlettes = new TreeMap<>();
@@ -42,7 +43,7 @@ public Map<Periode, UtenlandsoppholdPeriodeInfo> getPerioder() {
4243
}
4344

4445
public Utenlandsopphold medPerioder(Map<Periode, UtenlandsoppholdPeriodeInfo> perioder) {
45-
this.perioder = (perioder == null ) ? new TreeMap<>() : new TreeMap<>(perioder);
46+
this.perioder = (perioder == null) ? new TreeMap<>() : new TreeMap<>(perioder);
4647
return this;
4748
}
4849

@@ -51,7 +52,7 @@ public Map<Periode, UtenlandsoppholdPeriodeInfo> getPerioderSomSkalSlettes() {
5152
}
5253

5354
public Utenlandsopphold medPerioderSomSkalSlettes(Map<Periode, UtenlandsoppholdPeriodeInfo> perioderSomSkalSlettes) {
54-
this.perioderSomSkalSlettes = (perioderSomSkalSlettes == null ) ? new TreeMap<>() : new TreeMap<>(perioderSomSkalSlettes);
55+
this.perioderSomSkalSlettes = (perioderSomSkalSlettes == null) ? new TreeMap<>() : new TreeMap<>(perioderSomSkalSlettes);
5556
return this;
5657
}
5758

soknad/src/main/java/no/nav/k9/søknad/felles/type/Periode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.fasterxml.jackson.annotation.JsonCreator;
99
import com.fasterxml.jackson.annotation.JsonValue;
1010

11+
import no.nav.k9.søknad.felles.validering.AvbrytendeValideringsfeil;
12+
1113
public class Periode implements Comparable<Periode> {
1214
private static final String ÅPEN = "..";
1315
private static final String SKILLE = "/";
@@ -38,7 +40,7 @@ public Periode(LocalDate fraOgMed, LocalDate tilOgMed) {
3840
this.iso8601 = toIso8601(fraOgMed) + SKILLE + toIso8601(tilOgMed);
3941
}
4042

41-
@AssertFalse(message = "[ugyldigPeriode] Fra og med (FOM) må være før eller lik til og med (TOM).")
43+
@AssertFalse(message = "[ugyldigPeriode] Fra og med (FOM) må være før eller lik til og med (TOM).", payload = AvbrytendeValideringsfeil.class)
4244
public boolean isTilOgMedFørFraOgMed() {
4345
return fraOgMed != null && tilOgMed != null && tilOgMed.isBefore(fraOgMed);
4446
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package no.nav.k9.søknad.felles.validering;
2+
3+
import java.util.Set;
4+
5+
import javax.validation.ConstraintViolation;
6+
import javax.validation.Payload;
7+
8+
/**
9+
* brukes for å markere valideringsfeil som bør stoppe videre validering for å unngå duplikate- eller følgefeil
10+
*/
11+
public class AvbrytendeValideringsfeil implements Payload {
12+
13+
public static <T> boolean harAvbrytendeValideringsfeil(Set<ConstraintViolation<T>> constraintViolations) {
14+
return constraintViolations.stream().anyMatch(v -> v.getConstraintDescriptor().getPayload().stream().anyMatch(payload -> payload == AvbrytendeValideringsfeil.class));
15+
}
16+
17+
}

soknad/src/main/java/no/nav/k9/søknad/felles/type/validering/GyldigPeriode.java renamed to soknad/src/main/java/no/nav/k9/søknad/felles/validering/periode/GyldigPeriode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package no.nav.k9.søknad.felles.type.validering;
1+
package no.nav.k9.søknad.felles.validering.periode;
22

33

44
import java.lang.annotation.Documented;
@@ -14,11 +14,13 @@
1414
@Constraint(validatedBy = {GyldigPeriodeValidator.class})
1515
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
1616
@Retention(RetentionPolicy.RUNTIME)
17+
//package protected. Bruk @LukketPeriode istedet siden den er bundlet med @Valid (pga fom vs tom validering). Eller lag en @ÅpenPeriode bundlet med @Valid hvis du trenger det
1718
public @interface GyldigPeriode {
1819

1920
String message() default "Ugyldig periode";
2021

2122
boolean krevFomDato() default false;
23+
2224
boolean krevTomDato() default false;
2325

2426
Class<?>[] groups() default {};

soknad/src/main/java/no/nav/k9/søknad/felles/type/validering/GyldigPeriodeValidator.java renamed to soknad/src/main/java/no/nav/k9/søknad/felles/validering/periode/GyldigPeriodeValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package no.nav.k9.søknad.felles.type.validering;
1+
package no.nav.k9.søknad.felles.validering.periode;
22

33
import javax.validation.ConstraintValidator;
44
import javax.validation.ConstraintValidatorContext;

soknad/src/main/java/no/nav/k9/søknad/felles/type/validering/GyldigePerioderMap.java renamed to soknad/src/main/java/no/nav/k9/søknad/felles/validering/periode/GyldigePerioderMap.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package no.nav.k9.søknad.felles.type.validering;
1+
package no.nav.k9.søknad.felles.validering.periode;
22

33

44
import java.lang.annotation.Documented;
@@ -16,9 +16,10 @@
1616
@Retention(RetentionPolicy.RUNTIME)
1717
public @interface GyldigePerioderMap {
1818

19-
String message() default "Ugyldig peride-map";
19+
String message() default "Ugyldig periode-map";
2020

2121
boolean krevFomDato() default false;
22+
2223
boolean krevTomDato() default false;
2324

2425
Class<?>[] groups() default {};
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package no.nav.k9.søknad.felles.type.validering;
1+
package no.nav.k9.søknad.felles.validering.periode;
22

33
import java.util.Map;
44

@@ -14,7 +14,7 @@ public class GyldigePerioderMapValidator implements ConstraintValidator<GyldigeP
1414

1515
@Override
1616
public void initialize(GyldigePerioderMap konfig) {
17-
//kan i fremtiden velge å ta inn flere parametre for å spesialisere eksempelvis: sjekke for overlapp
17+
//kan i fremtiden velge å ta inn flere parametre for å spesialisere. Eksempelvis: sjekke for overlapp
1818
krevFom = konfig.krevFomDato();
1919
krevTom = konfig.krevTomDato();
2020
}

0 commit comments

Comments
 (0)