no.difi.sdp.client2.internal.SDPBuilder 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.internal;
import no.difi.begrep.sdp.schema_v10.SDPAvsender;
import no.difi.begrep.sdp.schema_v10.SDPDigitalPost;
import no.difi.begrep.sdp.schema_v10.SDPDigitalPostInfo;
import no.difi.begrep.sdp.schema_v10.SDPDokument;
import no.difi.begrep.sdp.schema_v10.SDPDokumentData;
import no.difi.begrep.sdp.schema_v10.SDPEpostVarsel;
import no.difi.begrep.sdp.schema_v10.SDPEpostVarselTekst;
import no.difi.begrep.sdp.schema_v10.SDPFysiskPostInfo;
import no.difi.begrep.sdp.schema_v10.SDPFysiskPostRetur;
import no.difi.begrep.sdp.schema_v10.SDPFysiskPostadresse;
import no.difi.begrep.sdp.schema_v10.SDPIso6523Authority;
import no.difi.begrep.sdp.schema_v10.SDPManifest;
import no.difi.begrep.sdp.schema_v10.SDPMottaker;
import no.difi.begrep.sdp.schema_v10.SDPNorskPostadresse;
import no.difi.begrep.sdp.schema_v10.SDPOrganisasjon;
import no.difi.begrep.sdp.schema_v10.SDPPerson;
import no.difi.begrep.sdp.schema_v10.SDPRepetisjoner;
import no.difi.begrep.sdp.schema_v10.SDPSikkerhetsnivaa;
import no.difi.begrep.sdp.schema_v10.SDPSmsVarsel;
import no.difi.begrep.sdp.schema_v10.SDPSmsVarselTekst;
import no.difi.begrep.sdp.schema_v10.SDPTittel;
import no.difi.begrep.sdp.schema_v10.SDPUtenlandskPostadresse;
import no.difi.begrep.sdp.schema_v10.SDPVarsler;
import no.difi.sdp.client2.domain.Avsender;
import no.difi.sdp.client2.domain.Dokument;
import no.difi.sdp.client2.domain.Forsendelse;
import no.difi.sdp.client2.domain.digital_post.DigitalPost;
import no.difi.sdp.client2.domain.digital_post.EpostVarsel;
import no.difi.sdp.client2.domain.digital_post.SmsVarsel;
import no.difi.sdp.client2.domain.fysisk_post.FysiskPost;
import no.difi.sdp.client2.domain.fysisk_post.KonvoluttAdresse;
import no.difi.sdp.client2.domain.fysisk_post.KonvoluttAdresse.Type;
import org.w3.xmldsig.Reference;
import org.w3.xmldsig.Signature;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static no.difi.sdp.client2.domain.fysisk_post.KonvoluttAdresse.Type.NORSK;
import static no.difi.sdp.client2.domain.fysisk_post.KonvoluttAdresse.Type.UTENLANDSK;
import static no.difi.sdp.client2.internal.SdpTimeConstants.UTC;
@SuppressWarnings("ConstantConditions")
public class SDPBuilder {
/**
* ISO6523-identifikasjon av Brønnøysundregisterets organisasjonsnummer som identifikator.
*/
private static final String ORGNR_IDENTIFIER = "9908:";
public SDPManifest createManifest(final Forsendelse forsendelse) {
SDPMottaker sdpMottaker = sdpMottaker(forsendelse.getDigitalPost());
SDPAvsender sdpAvsender = sdpAvsender(forsendelse.getAvsender());
String spraakkode = forsendelse.getSpraakkode();
SDPDokument sdpHovedDokument = sdpDokument(forsendelse.getDokumentpakke().getHoveddokument(), spraakkode);
List sdpVedlegg = new ArrayList();
for (Dokument dokument : forsendelse.getDokumentpakke().getVedlegg()) {
sdpVedlegg.add(sdpDokument(dokument, spraakkode));
}
return new SDPManifest(sdpMottaker, sdpAvsender, sdpHovedDokument, sdpVedlegg, null);
}
public SDPDigitalPost buildDigitalPost(final Forsendelse forsendelse) {
SDPAvsender sdpAvsender = sdpAvsender(forsendelse.getAvsender());
SDPMottaker sdpMottaker = sdpMottaker(forsendelse.getDigitalPost());
SDPDigitalPostInfo sdpDigitalPostInfo = sdpDigitalPostinfo(forsendelse);
SDPFysiskPostInfo fysiskPostInfo = sdpFysiskPostInfo(forsendelse.getFysiskPost());
// Signatur og fingeravtrykk legges på automatisk av klienten hvis de ikke er satt
Signature signature = null;
Reference dokumentpakkefingeravtrykk = null;
return new SDPDigitalPost(signature, sdpAvsender, sdpMottaker, sdpDigitalPostInfo, fysiskPostInfo, dokumentpakkefingeravtrykk);
}
private SDPDokument sdpDokument(final Dokument dokument, final String spraakkode) {
final String dokumentTittel = dokument.getTittel();
SDPTittel sdpTittel = dokumentTittel != null ? new SDPTittel(dokumentTittel, spraakkode) : null;
SDPDokumentData sdpDokumentData = dokument.getMetadataDocument().map(d -> new SDPDokumentData(d.getFileName(), d.getMimeType())).orElse(null);
return new SDPDokument(sdpTittel, sdpDokumentData, dokument.getFilnavn(), dokument.getMimeType());
}
private SDPMottaker sdpMottaker(final DigitalPost digitalPost) {
if (digitalPost == null) {
return null;
}
SDPPerson sdpPerson = new SDPPerson(digitalPost.getMottaker().getPersonidentifikator(), digitalPost.getMottaker().getPostkasseadresse());
return new SDPMottaker(sdpPerson);
}
private SDPAvsender sdpAvsender(final Avsender avsender) {
String fakturaReferanse = avsender.getFakturaReferanse();
String identifikator = avsender.getAvsenderIdentifikator();
SDPOrganisasjon organisasjon = sdpOrganisasjon(avsender);
return new SDPAvsender(organisasjon, identifikator, fakturaReferanse);
}
private SDPOrganisasjon sdpOrganisasjon(final Avsender avsender) {
return new SDPOrganisasjon(ORGNR_IDENTIFIER + avsender.getOrganisasjonsnummer(), SDPIso6523Authority.ISO_6523_ACTORID_UPIS);
}
private SDPDigitalPostInfo sdpDigitalPostinfo(final Forsendelse forsendelse) {
DigitalPost digitalPost = forsendelse.getDigitalPost();
if (digitalPost == null) {
return null;
}
ZonedDateTime virkningstidspunkt = null;
if (digitalPost.getVirkningsdato() != null) {
virkningstidspunkt = ZonedDateTime.ofInstant(digitalPost.getVirkningsdato().toInstant(), UTC);
}
boolean aapningskvittering = digitalPost.isAapningskvittering();
SDPSikkerhetsnivaa sikkerhetsnivaa = digitalPost.getSikkerhetsnivaa().getXmlValue();
SDPTittel tittel = new SDPTittel(digitalPost.getIkkeSensitivTittel(), forsendelse.getSpraakkode());
SDPVarsler varsler = sdpVarsler(forsendelse);
return new SDPDigitalPostInfo(virkningstidspunkt, null, aapningskvittering, sikkerhetsnivaa, tittel, varsler);
}
private SDPFysiskPostInfo sdpFysiskPostInfo(FysiskPost fysiskPost) {
if (fysiskPost == null) {
return null;
}
return new SDPFysiskPostInfo()
.withMottaker(sdpPostadresse(fysiskPost.getAdresse()))
.withPosttype(fysiskPost.getPosttype().sdpType)
.withUtskriftsfarge(fysiskPost.getUtskriftsfarge().sdpUtskriftsfarge)
.withRetur(new SDPFysiskPostRetur(fysiskPost.getReturhaandtering().sdpReturhaandtering, sdpPostadresse(fysiskPost.getReturadresse())));
}
private SDPFysiskPostadresse sdpPostadresse(KonvoluttAdresse adresse) {
SDPFysiskPostadresse sdpAdresse = new SDPFysiskPostadresse().withNavn(adresse.getNavn());
if (adresse.er(UTENLANDSK)) {
UpTo4ElementsOfList adresselinjer = UpTo4ElementsOfList.extract(adresse.getAdresselinjer());
sdpAdresse.setUtenlandskAdresse(new SDPUtenlandskPostadresse(adresselinjer._1, adresselinjer._2, adresselinjer._3, adresselinjer._4, adresse.getLandkode(), adresse.getLand()));
} else if (adresse.er(NORSK)) {
UpTo4ElementsOfList adresselinjer = UpTo4ElementsOfList.extract(adresse.getAdresselinjer());
sdpAdresse.setNorskAdresse(new SDPNorskPostadresse(adresselinjer._1, adresselinjer._2, adresselinjer._3, adresse.getPostnummer(), adresse.getPoststed()));
} else {
throw new IllegalArgumentException("Ukjent " + KonvoluttAdresse.class.getSimpleName() + "." + Type.class.getSimpleName() + ": " + adresse.getType());
}
return sdpAdresse;
}
private SDPVarsler sdpVarsler(final Forsendelse forsendelse) {
String spraakkode = forsendelse.getSpraakkode();
SDPEpostVarsel epostVarsel = sdpEpostVarsel(forsendelse.getDigitalPost().getEpostVarsel(), spraakkode);
SDPSmsVarsel smsVarsel = sdpSmsVarsel(forsendelse.getDigitalPost().getSmsVarsel(), spraakkode);
return new SDPVarsler(epostVarsel, smsVarsel);
}
private SDPSmsVarsel sdpSmsVarsel(final SmsVarsel smsVarsel, final String spraakkode) {
if (smsVarsel != null) {
SDPSmsVarselTekst smsVarselTekst = new SDPSmsVarselTekst(smsVarsel.getVarslingsTekst(), spraakkode);
return new SDPSmsVarsel(smsVarsel.getMobilnummer(), smsVarselTekst, new SDPRepetisjoner(smsVarsel.getDagerEtter()));
}
return null;
}
private SDPEpostVarsel sdpEpostVarsel(final EpostVarsel epostVarsel, final String spraakkode) {
if (epostVarsel != null) {
SDPEpostVarselTekst epostVarselTekst = new SDPEpostVarselTekst(epostVarsel.getVarslingsTekst(), spraakkode);
return new SDPEpostVarsel(epostVarsel.getEpostadresse(), epostVarselTekst, new SDPRepetisjoner(epostVarsel.getDagerEtter()));
}
return null;
}
static class UpTo4ElementsOfList {
final T _1;
final T _2;
final T _3;
final T _4;
static UpTo4ElementsOfList extract(Iterable iterable) {
return new UpTo4ElementsOfList(iterable);
}
private UpTo4ElementsOfList(Iterable iterable) {
Iterator iterator = iterable.iterator();
_1 = iterator.hasNext() ? iterator.next() : null;
_2 = iterator.hasNext() ? iterator.next() : null;
_3 = iterator.hasNext() ? iterator.next() : null;
_4 = iterator.hasNext() ? iterator.next() : null;
}
}
}