no.difi.sdp.client2.domain.Forsendelse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sikker-digital-post-klient-java Show documentation
Show all versions of sikker-digital-post-klient-java Show documentation
Klient for sending av sikker digital post fra offentlige virksomheter.
package no.difi.sdp.client2.domain;
import no.difi.sdp.client2.domain.digital_post.DigitalPost;
import no.difi.sdp.client2.domain.fysisk_post.FysiskPost;
import no.digipost.api.PMode;
import java.util.UUID;
import static no.difi.sdp.client2.domain.Forsendelse.Type.DIGITAL;
import static no.difi.sdp.client2.domain.Forsendelse.Type.FYSISK;
public class Forsendelse {
public enum Type {
DIGITAL(PMode.Action.FORMIDLE_DIGITAL),
FYSISK(PMode.Action.FORMIDLE_FYSISK);
public final PMode.Action action;
Type(PMode.Action action) {
this.action = action;
}
}
public final Type type;
private final DigitalPost digitalPost;
private final FysiskPost fysiskPost;
private final Dokumentpakke dokumentpakke;
private final Avsender avsender;
private String konversasjonsId = UUID.randomUUID().toString();
private Prioritet prioritet = Prioritet.NORMAL;
private String spraakkode = "NO";
private String mpcId;
private Forsendelse(Avsender avsender, DigitalPost digitalPost, Dokumentpakke dokumentpakke) {
this.type = DIGITAL;
this.avsender = avsender;
this.digitalPost = digitalPost;
this.fysiskPost = null;
this.dokumentpakke = dokumentpakke;
}
private Forsendelse(Avsender avsender, FysiskPost fysiskPost, Dokumentpakke dokumentpakke) {
this.type = FYSISK;
this.avsender = avsender;
this.dokumentpakke = dokumentpakke;
this.fysiskPost = fysiskPost;
this.digitalPost = null;
}
public String getKonversasjonsId() {
return konversasjonsId;
}
public DigitalPost getDigitalPost() {
return digitalPost;
}
public FysiskPost getFysiskPost() {
return fysiskPost;
}
public Dokumentpakke getDokumentpakke() {
return dokumentpakke;
}
public Prioritet getPrioritet() {
return prioritet;
}
public String getSpraakkode() {
return spraakkode;
}
public String getMpcId() {
return mpcId;
}
public Avsender getAvsender() {
return avsender;
}
/**
* @param avsender Ansvarlig avsender av forsendelsen. Dette vil i de aller fleste tilfeller være
* den offentlige virksomheten som er ansvarlig for brevet som skal sendes.
* @param digitalPost Informasjon som brukes av postkasseleverandør for å behandle den digitale posten.
* @param dokumentpakke Pakke med hoveddokument og evt vedlegg som skal sendes.
*/
public static Builder digital(Avsender avsender, DigitalPost digitalPost, Dokumentpakke dokumentpakke) {
return new Builder(avsender, digitalPost, dokumentpakke);
}
public static Builder fysisk(Avsender avsender, FysiskPost fysiskPost, Dokumentpakke dokumentpakke) {
return new Builder(avsender, fysiskPost, dokumentpakke);
}
public static class Builder {
private final Forsendelse target;
private boolean built = false;
private Builder(Avsender avsender, DigitalPost digitalPost, Dokumentpakke dokumentpakke) {
this.target = new Forsendelse(avsender, digitalPost, dokumentpakke);
}
private Builder(Avsender avsender, FysiskPost fysiskPost, Dokumentpakke dokumentpakke) {
this.target = new Forsendelse(avsender, fysiskPost, dokumentpakke);
}
/**
* Unik ID opprettet og definert i en initiell melding og siden bruk i alle tilhørende kvitteringer knyttet til den opprinnelige meldingen.
* Skal være unik for en avsender.
*
* Standard er {@link java.util.UUID#randomUUID()}}.
*/
public Builder konversasjonsId(String konversasjonsId) {
target.konversasjonsId = konversasjonsId;
return this;
}
/**
* Standard er {@link no.difi.sdp.client2.domain.Prioritet#NORMAL}
*/
public Builder prioritet(Prioritet prioritet) {
target.prioritet = prioritet;
return this;
}
/**
* Språkkode i henhold til ISO-639-1 (2 bokstaver). Brukes til å informere postkassen om hvilket språk som benyttes, slik at varselet om mulig kan vises i riktig språkkontekst.
*
* Standard er NO.
*/
public Builder spraakkode(String spraakkode) {
target.spraakkode = spraakkode;
return this;
}
/**
* Brukes til å skille mellom ulike kvitteringskøer for samme tekniske avsender. En forsendelse gjort med en
* MPC Id vil kun dukke opp i kvitteringskøen med samme MPC Id.
*
* Standardverdi er blank MPC Id.
*
* @see no.difi.sdp.client2.domain.kvittering.KvitteringForespoersel.Builder#mpcId(String)
*/
public Builder mpcId(String mpcId) {
target.mpcId = mpcId;
return this;
}
public Forsendelse build() {
if (built) throw new IllegalStateException("Can't build twice");
built = true;
return target;
}
}
public TekniskMottaker getTekniskMottaker() {
switch (type) {
case DIGITAL: return digitalPost.getMottaker().getMottakersPostkasse();
case FYSISK: return fysiskPost.getUtskriftsleverandoer();
default: throw new IllegalStateException("Forsendelse av type " + type + " har ikke teknisk mottaker");
}
}
}