Skip to content

Commit

Permalink
Parannettu buildereita
Browse files Browse the repository at this point in the history
  • Loading branch information
jkorri committed Jan 10, 2024
1 parent 5c87d78 commit ba341cc
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.springframework.core.env.Environment;

import java.util.Optional;
import java.util.UUID;
import java.util.List;

class ViestinvalitysClientTest extends BaseIntegraatioTesti {
Expand Down Expand Up @@ -67,10 +66,18 @@ public void testLuoViesti() throws Exception {
.withTextSisalto("sisältö")
.withKielet("fi")
.withLahettaja(Optional.empty(), "[email protected]")
.withVastaanottajat(b -> b.withVastaanottaja(Optional.empty(), "[email protected]"))
.withVastaanottajat(Vastaanottajat.builder()
.withVastaanottaja(Optional.empty(), "[email protected]")
.build())
.withNormaaliPrioriteetti()
.withSailytysAika(10)
.withLahettavaPalvelu("palvelu")
.withMetadatat(Metadatat.builder()
.withMetadata("avain", List.of("arvo1", "arvo2"))
.build())
.withMaskit(Maskit.builder()
.withMaski("salaisuus", "maskattu")
.build())
.build());
}

Expand All @@ -87,7 +94,9 @@ public void testLiitaLiite() throws Exception {
.withTextSisalto("sisältö")
.withKielet("fi")
.withLahettaja(Optional.empty(), "[email protected]")
.withVastaanottajat(b -> b.withVastaanottaja(Optional.empty(), "[email protected]"))
.withVastaanottajat(Vastaanottajat.builder()
.withVastaanottaja(Optional.empty(), "[email protected]")
.build())
.withNormaaliPrioriteetti()
.withSailytysAika(10)
.withLahettavaPalvelu("palvelu")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
import fi.oph.viestinvalitys
import fi.oph.viestinvalitys.ViestinvalitysClient.*
import fi.oph.viestinvalitys.vastaanotto.model.{Lahetys, Liite, LuoLahetysSuccessResponse, LuoLiiteSuccessResponse, LuoViestiSuccessResponse, Viesti}
import fi.oph.viestinvalitys.vastaanotto.resource.{APIConstants, LuoLahetysFailureResponseImpl, LuoLahetysSuccessResponseImpl, LuoLiiteSuccessResponseImpl, LuoViestiSuccessResponseImpl}
import fi.oph.viestinvalitys.vastaanotto.resource.{APIConstants, LuoLahetysFailureResponseImpl, LuoLahetysSuccessResponseImpl, LuoLiiteFailureResponseImpl, LuoLiiteSuccessResponseImpl, LuoViestiFailureResponseImpl, LuoViestiSuccessResponseImpl}
import fi.vm.sade.javautils.nio.cas.impl.{CasClientImpl, CasSessionFetcher}
import fi.vm.sade.javautils.nio.cas.{CasClient, CasClientBuilder, CasConfig}
import org.asynchttpclient.request.body.multipart.ByteArrayPart
Expand Down Expand Up @@ -57,13 +57,25 @@ class ViestinvalitysClientImpl(casClient: CasClient, endpoint: String, callerId:
.addHeader("Content-Type", "multipart/form-data")
.addHeader("Accept", "application/json").build()
val response = casClient.executeAndRetryWithCleanSessionOnStatusCodes(request, util.Set.of(401)).get()
if (response.getStatusCode == 403)
throw new ViestinvalitysClientException(Set.empty.asJava, 403)
if (response.getStatusCode != 200)
val failureResponse = objectMapper.readValue(response.getResponseBody, classOf[LuoLiiteFailureResponseImpl])
throw new ViestinvalitysClientException(failureResponse.virheet.asScala.toSet.asJava, response.getStatusCode)

val successResponse = objectMapper.readValue(response.getResponseBody, classOf[LuoLiiteSuccessResponseImpl])
successResponse
successResponse

override def luoViesti(viesti: Viesti): LuoViestiSuccessResponse =
val response = casClient.executeAndRetryWithCleanSessionOnStatusCodes(getJsonPostRequest(APIConstants.VIESTIT_PATH, viesti), util.Set.of(401)).get()
if (response.getStatusCode == 403)
throw new ViestinvalitysClientException(Set.empty.asJava, 403)
if (response.getStatusCode != 200)
val failureResponse = objectMapper.readValue(response.getResponseBody, classOf[LuoViestiFailureResponseImpl])
throw new ViestinvalitysClientException(failureResponse.validointiVirheet.asScala.toSet.asJava, response.getStatusCode)

val successResponse = objectMapper.readValue(response.getResponseBody, classOf[LuoViestiSuccessResponseImpl])
successResponse
successResponse

}

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

import java.util.List;

import fi.oph.viestinvalitys.vastaanotto.model.Viesti.Maski;

public interface Maskit {

interface MaskitBuilder {

MaskitBuilder withMaski(String salaisuus, String maski);

List<Maski> build();
}

static MaskitBuilder builder() {
return new MaskitBuilderImpl();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fi.oph.viestinvalitys.vastaanotto.model;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import fi.oph.viestinvalitys.vastaanotto.model.MetadatatBuilderImpl;

public interface Metadatat {

interface MetadatatBuilder {

MetadatatBuilder withMetadata(String avain, List<String> arvot);

Map<String, List<String>> build();
}

static MetadatatBuilder builder() {
return new MetadatatBuilderImpl();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package fi.oph.viestinvalitys.vastaanotto.model;

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

public interface Vastaanottajat {

interface VastaanottajatBuilder {

VastaanottajatBuilder withVastaanottaja(Optional<String> nimi, String sahkopostiOsoite);

List<Viesti.Vastaanottaja> build();
}

static VastaanottajatBuilder builder() {
return new VastaanottajatBuilderImpl();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,16 +92,7 @@ interface LahettajaBuilder {
}

interface VastaanottajatBuilder {
interface VastaanottajaBuilder {
void withVastaanottaja(Optional<String> nimi, String sahkoposti);
}

interface TakesVastaanottajaBuilder {

void withVastaanottajaBuilder(VastaanottajaBuilder builder);
}

PrioriteettiBuilder withVastaanottajat(TakesVastaanottajaBuilder builder);
PrioriteettiBuilder withVastaanottajat(List<Vastaanottaja> vastaanottajat);
}

interface PrioriteettiBuilder {
Expand All @@ -122,31 +113,15 @@ interface LahetysBuilder {

interface ViestiBuilder {

interface MaskiBuilder {
void withMaski(String salaisuus, String maski);
}

interface TakesMaskiBuilder {
void withMaskiBuilder(MaskiBuilder maskiBuilder);
}

ViestiBuilder withMaskit(TakesMaskiBuilder takesMaskiBuilder);
ViestiBuilder withMaskit(List<Maski> maskit);

ViestiBuilder withLahettavanVirkailijanOid(String oid);

ViestiBuilder withReplyTo(String replyTo);

ViestiBuilder withLiitteidenTunnisteet(List<UUID> liitteidenTunnisteet);

interface MetadataBuilder {
void withMetadata(String key, List<String> values);
}

interface TakesMetadataBuilder {
void withMetadataBuilder(MetadataBuilder builder);
}

ViestiBuilder withMetadata(TakesMetadataBuilder builder);
ViestiBuilder withMetadatat(Map<String, List<String>> metadatat);

Viesti build() throws BuilderException;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package fi.oph.viestinvalitys.vastaanotto.model

import fi.oph.viestinvalitys.vastaanotto.model.Maskit.MaskitBuilder
import fi.oph.viestinvalitys.vastaanotto.model.Viesti.*
import fi.oph.viestinvalitys.vastaanotto.model.Viesti.VastaanottajatBuilder.TakesVastaanottajaBuilder
import fi.oph.viestinvalitys.vastaanotto.model.Viesti.ViestiBuilder.{TakesMaskiBuilder, TakesMetadataBuilder}
import fi.oph.viestinvalitys.vastaanotto.resource.ParametriUtil
import io.swagger.v3.oas.annotations.media.{ExampleObject, Schema}
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode
Expand Down Expand Up @@ -91,6 +90,18 @@ case class VastaanottajaImpl(
}
}

class VastaanottajatBuilderImpl extends Vastaanottajat.VastaanottajatBuilder {

var vastaanottajat: Seq[Viesti.Vastaanottaja] = Seq.empty

override def withVastaanottaja(nimi: Optional[String], sahkopostiOsoite: String): Vastaanottajat.VastaanottajatBuilder =
vastaanottajat = vastaanottajat.appended(new VastaanottajaImpl(nimi, Optional.of(sahkopostiOsoite)))
this

override def build(): util.List[Viesti.Vastaanottaja] =
vastaanottajat.asJava
}

case class MaskiImpl(
@(Schema @field)(example = "https://salainen.linkki.johonkin", requiredMode=RequiredMode.REQUIRED,
minLength = ViestiImpl.VIESTI_SALAISUUS_MIN_PITUUS, maxLength = ViestiImpl.VIESTI_SALAISUUS_MAX_PITUUS)
Expand All @@ -109,6 +120,28 @@ case class MaskiImpl(
}
}

class MaskitBuilderImpl extends Maskit.MaskitBuilder {

val maskit = new util.ArrayList[Maski]()
override def withMaski(salaisuus: String, maski: String): MaskitBuilder =
maskit.add(MaskiImpl(Optional.of(salaisuus), Optional.of(maski)))
this

override def build(): util.List[Maski] =
maskit
}

class MetadatatBuilderImpl extends Metadatat.MetadatatBuilder {

val metadatat: util.Map[String, util.List[String]] = new util.HashMap[String, util.List[String]]()
override def withMetadata(avain: String, arvot: util.List[String]): Metadatat.MetadatatBuilder =
metadatat.put(avain, arvot)
this

override def build(): util.Map[String, util.List[String]] =
metadatat
}


/**
* Vastaanotettava viesti.
Expand Down Expand Up @@ -220,12 +253,8 @@ class ViestiBuilderImpl() extends OtsikkoBuilder, SisaltoBuilder, KieletBuilder,
viesti = viesti.copy(lahettaja = Optional.of(LahettajaImpl(nimi, Optional.of(sahkoposti))))
this

def withVastaanottajat(b: TakesVastaanottajaBuilder): ViestiBuilderImpl =
var vastaanottajat: Seq[VastaanottajaImpl] = Seq.empty

b.withVastaanottajaBuilder((nimi, sahkoposti) =>
vastaanottajat = vastaanottajat.appended(VastaanottajaImpl(nimi, Optional.of(sahkoposti))))
viesti = viesti.copy(vastaanottajat = Optional.of(vastaanottajat.asJava))
def withVastaanottajat(vastaanottajat: util.List[Vastaanottaja]): ViestiBuilderImpl =
viesti = viesti.copy(vastaanottajat = Optional.of(vastaanottajat))
this

def withNormaaliPrioriteetti(): ViestiBuilderImpl =
Expand All @@ -240,11 +269,8 @@ class ViestiBuilderImpl() extends OtsikkoBuilder, SisaltoBuilder, KieletBuilder,
viesti = viesti.copy(sailytysAika = Optional.of(sailytysAika))
this

def withMaskit(b: TakesMaskiBuilder): ViestiBuilderImpl =
var maskit: Seq[MaskiImpl] = Seq.empty
b.withMaskiBuilder((salaisuus, maski) =>
maskit = maskit.appended(MaskiImpl(Optional.of(salaisuus), Optional.of(maski))))
viesti = viesti.copy(maskit = Optional.of(maskit.asJava))
def withMaskit(maskit: util.List[Maski]): ViestiBuilderImpl =
viesti = viesti.copy(maskit = Optional.of(maskit))
this

def withLahettavanVirkailijanOid(oid: String): ViestiBuilderImpl =
Expand All @@ -259,11 +285,8 @@ class ViestiBuilderImpl() extends OtsikkoBuilder, SisaltoBuilder, KieletBuilder,
viesti = viesti.copy(liitteidenTunnisteet = Optional.of(liitteidenTunnisteet.asScala.map(t => t.toString).asJava))
this

def withMetadata(b: TakesMetadataBuilder): ViestiBuilderImpl =
var metadatat: Map[String, util.List[String]] = Map.empty
b.withMetadataBuilder((key, values) =>
metadatat = metadatat.updated(key, values))
viesti = viesti.copy(metadata = Optional.of(metadatat.asJava))
def withMetadatat(metadatat: util.Map[String, util.List[String]]): ViestiBuilderImpl =
viesti = viesti.copy(metadata = Optional.of(metadatat))
this

def withLahetysTunniste(lahetysTunniste: String): ViestiBuilderImpl =
Expand Down

0 comments on commit ba341cc

Please sign in to comment.