Skip to content

Commit

Permalink
Siirretty lahettavapalvelu-kenttä Lähetykseen
Browse files Browse the repository at this point in the history
  • Loading branch information
jkorri committed Jan 5, 2024
1 parent 113af59 commit 250020b
Show file tree
Hide file tree
Showing 15 changed files with 298 additions and 216 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class IntegraatioTesti extends BaseIntegraatioTesti {
def getLahetys(): LahetysImpl =
LahetysImpl(
Optional.of("Otsikko"),
Optional.of("Palvelu"),
Optional.empty()
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ private ViestinvalitysClient getClient() throws Exception {
public void testLuoLahetys() throws Exception {
LuoLahetysSuccessResponse response = this.getClient().luoLahetys(Lahetys.builder()
.withOtsikko("otsikko")
.withLahettavaPalvelu("palvelu")
.build());
}

Expand All @@ -66,10 +67,10 @@ public void testLuoViesti() throws Exception {
.withTextSisalto("sisältö")
.withKielet("fi")
.withLahettaja(Optional.empty(), "noreply@opintopolku.fi")
.withLahettavaPalvelu("palvelu")
.withVastaanottajat(b -> b.withVastaanottaja(Optional.empty(), "vallu.vastaanottaja@example.com"))
.withNormaaliPrioriteetti()
.withSailytysAika(10)
.withLahettavaPalvelu("palvelu")
.build());
}

Expand All @@ -86,10 +87,10 @@ public void testLiitaLiite() throws Exception {
.withTextSisalto("sisältö")
.withKielet("fi")
.withLahettaja(Optional.empty(), "noreply@opintopolku.fi")
.withLahettavaPalvelu("palvelu")
.withVastaanottajat(b -> b.withVastaanottaja(Optional.empty(), "vallu.vastaanottaja@example.com"))
.withNormaaliPrioriteetti()
.withSailytysAika(10)
.withLahettavaPalvelu("palvelu")
.withLiitteidenTunnisteet(List.of(liiteResponse.getLiiteTunniste()))
.build());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,29 @@

public interface Lahetys {

static final int OTSIKKO_MAX_PITUUS = 255;
static final int OTSIKKO_MAX_PITUUS = 255;
static final int LAHETTAVAPALVELU_MAX_PITUUS = 127;

Optional<String> getOtsikko();

Optional<String> getLahettavaPalvelu();

Optional<List<String>> getKayttooikeusRajoitukset();

static OtsikkoBuilder builder() {
return new LahetysBuilderImpl();
}

interface OtsikkoBuilder {
ILahetysBuilder withOtsikko(String otsikko);
LahettavaPalveluBuilder withOtsikko(String otsikko);
}

interface LahettavaPalveluBuilder {
LahetysBuilder withLahettavaPalvelu(String nimi);
}

interface ILahetysBuilder {
ILahetysBuilder withKayttooikeusRajoitukset(String ... kayttooikeusRajoitukset);
interface LahetysBuilder {
LahetysBuilder withKayttooikeusRajoitukset(String ... kayttooikeusRajoitukset);
Lahetys build() throws BuilderException;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ case class LahetysImpl(
@(Schema @field)(example = "Lähetyksen Otsikko", requiredMode=RequiredMode.REQUIRED, maxLength = OTSIKKO_MAX_PITUUS)
@BeanProperty otsikko: Optional[String],

@(Schema@field)(example = "hakemuspalvelu", requiredMode=RequiredMode.REQUIRED, maxLength = LAHETTAVAPALVELU_MAX_PITUUS)
@BeanProperty lahettavaPalvelu: Optional[String],

@(Schema@field)(example = "[\"APP_ATARU_HAKEMUS_CRUD_1.2.246.562.00.00000000000000006666\"]")
@BeanProperty kayttooikeusRajoitukset: Optional[util.List[String]],
) extends Lahetys {
Expand All @@ -28,19 +31,23 @@ case class LahetysImpl(
* Tyhjä konstruktori Jacksonia varten
*/
def this() = {
this(null, null)
this(null, null, null)
}
}

class LahetysBuilderImpl() extends OtsikkoBuilder, ILahetysBuilder {
class LahetysBuilderImpl() extends OtsikkoBuilder, LahettavaPalveluBuilder, LahetysBuilder {

var lahetys = new LahetysImpl(Optional.empty(), Optional.empty())
var lahetys = new LahetysImpl(Optional.empty(), Optional.empty(), Optional.empty())

def withOtsikko(otsikko: String): ILahetysBuilder =
def withOtsikko(otsikko: String): LahetysBuilderImpl =
lahetys = lahetys.copy(otsikko = Optional.of(otsikko))
this

def withKayttooikeusRajoitukset(kayttooikeusRajoitukset: String*): ILahetysBuilder =
def withLahettavaPalvelu(lahettavaPalvelu: String): LahetysBuilderImpl =
lahetys = lahetys.copy(lahettavaPalvelu = Optional.of(lahettavaPalvelu))
this

def withKayttooikeusRajoitukset(kayttooikeusRajoitukset: String*): LahetysBuilderImpl =
lahetys = lahetys.copy(kayttooikeusRajoitukset = Optional.of(kayttooikeusRajoitukset.asJava))
this

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,91 @@
package fi.oph.viestinvalitys.vastaanotto.model

import java.util
import Lahetys.*

import java.util.List
import java.util.Optional

import scala.util.matching.Regex
import scala.jdk.CollectionConverters.*

/**
* Validoi järjestelmään syötetyn lähetyksen kentät
*/
object LahetysValidator:

final val VALIDATION_OTSIKKO_TYHJA = "otsikko: Kenttä on pakollinen"
final val VALIDATION_OTSIKKO_LIIAN_PITKA = "otsikko: Otsikko ei voi pidempi kuin " + OTSIKKO_MAX_PITUUS + " merkkiä"

final val VALIDATION_LAHETTAVA_PALVELU_TYHJA = "lahettavaPalvelu: Kenttä on pakollinen"
final val VALIDATION_LAHETTAVA_PALVELU_LIIAN_PITKA = "lahettavaPalvelu: Kentän pituus voi olla korkeintaan " + LAHETTAVAPALVELU_MAX_PITUUS + " merkkiä"
final val VALIDATION_LAHETTAVA_PALVELU_INVALID = "lahettavaPalvelu: Arvo ei ole validi käännösavain"

final val VALIDATION_KAYTTOOIKEUSRAJOITUS_NULL = "kayttooikeusRajoitukset: Kenttä sisältää null-arvoja"
final val VALIDATION_KAYTTOOIKEUSRAJOITUS_DUPLICATE = "kayttooikeusRajoitukset: Kentässä on duplikaatteja: "
final val VALIDATION_KAYTTOOIKEUSRAJOITUS_INVALID = "käyttöoikeusrajoitus ei ole organisaatiorajoitettu (ts. ei pääty _<oid>)"

def validateOtsikko(otsikko: Optional[String]): Set[String] =
ViestiValidator.validateOtsikko(otsikko)
def validateKayttooikeudet(kayttooikeudet: Optional[util.List[String]]): Set[String] =
ViestiValidator.validateKayttooikeusRajoitukset(kayttooikeudet)
var errors: Set[String] = Set.empty

if (otsikko.isEmpty || otsikko.get.length == 0)
errors = errors.incl(VALIDATION_OTSIKKO_TYHJA)
else if (otsikko.get.length > OTSIKKO_MAX_PITUUS)
errors = errors.incl(VALIDATION_OTSIKKO_LIIAN_PITKA)

errors

val kaannosAvainPattern: Regex = "[a-zA-Z0-9]+".r
def validateLahettavaPalvelu(lahettavaPalvelu: Optional[String]): Set[String] =
if (lahettavaPalvelu.isEmpty || lahettavaPalvelu.get.isEmpty) return Set(VALIDATION_LAHETTAVA_PALVELU_TYHJA)

var virheet: Set[String] = Set.empty
if (lahettavaPalvelu.get.length > LAHETTAVAPALVELU_MAX_PITUUS)
virheet = virheet.incl(VALIDATION_LAHETTAVA_PALVELU_LIIAN_PITKA)
if (!kaannosAvainPattern.matches(lahettavaPalvelu.get))
virheet = virheet.incl(VALIDATION_LAHETTAVA_PALVELU_INVALID)

virheet

val kayttooikeusPattern: Regex = ("^.*_[0-9]+(\\.[0-9]+)+$").r
def validateKayttooikeusRajoitukset(kayttooikeusRajoitukset: Optional[List[String]]): Set[String] =
var virheet: Set[String] = Set.empty

// on ok jos käyttöoikeusrajoituksia ei määritelty
if (kayttooikeusRajoitukset.isEmpty)
return virheet

// tarkastetaan onko käyttöoikeusrajoituslistalla null-arvoja
if (kayttooikeusRajoitukset.get.stream().filter(tunniste => tunniste == null).count() > 0)
virheet = virheet.incl(VALIDATION_KAYTTOOIKEUSRAJOITUS_NULL)

// validoidaan yksittäiset käyttöoikeudet
kayttooikeusRajoitukset.get.asScala.toSet.map(rajoitus => {
if (rajoitus != null) {
var rajoitusVirheet: Set[String] = Set.empty

if (!kayttooikeusPattern.matches(rajoitus))
rajoitusVirheet = rajoitusVirheet.incl(VALIDATION_KAYTTOOIKEUSRAJOITUS_INVALID)

if (!rajoitusVirheet.isEmpty)
virheet = virheet.incl("Käyttöoikeusrajoitus \"" + rajoitus + "\": " +
rajoitusVirheet.mkString(","))
}
})

// tutkitaan onko käyttöoikeusrajoituslistalla duplikaatteja
val duplikaattiRajoitukset = kayttooikeusRajoitukset.get.asScala
.filter(rajoitus => rajoitus != null)
.groupBy(rajoitus => rajoitus)
.filter(rajoitusByRajoitus => rajoitusByRajoitus._2.size > 1)
.map(rajoitusByRajoitus => rajoitusByRajoitus._1)
if (!duplikaattiRajoitukset.isEmpty)
virheet = virheet.incl(VALIDATION_KAYTTOOIKEUSRAJOITUS_DUPLICATE + duplikaattiRajoitukset.mkString(","))

virheet

def validateLahetys(lahetys: Lahetys): Set[String] =
Set(validateOtsikko(lahetys.getOtsikko), validateKayttooikeudet(lahetys.getKayttooikeusRajoitukset)).flatten
Set(validateOtsikko(lahetys.getOtsikko), validateLahettavaPalvelu(lahetys.getLahettavaPalvelu),
validateKayttooikeusRajoitukset(lahetys.getKayttooikeusRajoitukset)).flatten

end LahetysValidator

Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,18 @@ public interface Vastaanottaja {

Optional<List<String>> getLiitteidenTunnisteet();

Optional<String> getLahettavaPalvelu();

Optional<String> getLahetysTunniste();

Optional<String> getPrioriteetti();

Optional<Integer> getSailytysAika();

Optional<List<String>> getKayttooikeusRajoitukset();

Optional<Map<String, List<String>>> getMetadata();

Optional<String> getLahetysTunniste();

Optional<String> getLahettavaPalvelu();

Optional<List<String>> getKayttooikeusRajoitukset();

public static OtsikkoBuilder builder() {
return new ViestiBuilderImpl();
}
Expand All @@ -85,11 +85,7 @@ interface KieletBuilder {
}

interface LahettajaBuilder {
LahettavaPalveluBuilder withLahettaja(Optional<String> nimi, String sahkoposti);
}

interface LahettavaPalveluBuilder {
VastaanottajatBuilder withLahettavaPalvelu(String nimi);
VastaanottajatBuilder withLahettaja(Optional<String> nimi, String sahkoposti);
}

interface VastaanottajatBuilder {
Expand All @@ -111,12 +107,18 @@ interface PrioriteettiBuilder {
}

interface SailysaikaBuilder {
ViestiBuilder withSailytysAika(Integer sailytysAika);
LahetysBuilder withSailytysAika(Integer sailytysAika);
}

interface LahetysBuilder {

ViestiBuilder withLahetysTunniste(String lahetysTunniste);

ViestiBuilderEiLahetysta withLahettavaPalvelu(String nimi);
}

interface ViestiBuilder {

ViestiBuilder withKayttooikeusRajoitukset(String ... kayttooikeusRajoitukset);
interface MaskiBuilder {
void withMaski(String salaisuus, String maski);
}
Expand All @@ -133,8 +135,6 @@ interface TakesMaskiBuilder {

ViestiBuilder withLiitteidenTunnisteet(List<UUID> liitteidenTunnisteet);

ViestiBuilder withLahetysTunniste(String lahetysTunniste);

interface MetadataBuilder {
void withMetadata(String key, List<String> values);
}
Expand All @@ -147,4 +147,9 @@ interface TakesMetadataBuilder {

Viesti build() throws BuilderException;
}

interface ViestiBuilderEiLahetysta extends ViestiBuilder {

ViestiBuilderEiLahetysta withKayttooikeusRajoitukset(String ... kayttooikeusRajoitukset);
}
}
Loading

0 comments on commit 250020b

Please sign in to comment.