All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.difi.meldingsutveksling.ks.svarinn.SvarInnPutMessageBuilder Maven / Gradle / Ivy

package no.difi.meldingsutveksling.ks.svarinn;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import no.difi.meldingsutveksling.MimeTypeExtensionMapper;
import no.difi.meldingsutveksling.bestedu.PutMessageRequestFactory;
import no.difi.meldingsutveksling.core.Receiver;
import no.difi.meldingsutveksling.core.Sender;
import no.difi.meldingsutveksling.dokumentpakking.domain.Document;
import no.difi.meldingsutveksling.noarkexchange.receive.PayloadConverter;
import no.difi.meldingsutveksling.noarkexchange.receive.PayloadConverterImpl;
import no.difi.meldingsutveksling.noarkexchange.schema.PutMessageRequestType;
import no.difi.meldingsutveksling.noarkexchange.schema.core.*;
import org.apache.commons.io.IOUtils;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.io.InputStream;
import java.time.Clock;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;

import static com.google.common.base.Strings.isNullOrEmpty;

@RequiredArgsConstructor
@Getter
public class SvarInnPutMessageBuilder {

    private static final PayloadConverter payloadConverter = new PayloadConverterImpl<>(MeldingType.class,
            "http://www.arkivverket.no/Noark4-1-WS-WD/types", "Melding");
    private static final ObjectFactory objectFactory = new ObjectFactory();

    private final Forsendelse forsendelse;
    private final Clock clock;
    private final PutMessageRequestFactory putMessageRequestFactory;
    @Setter private String fallbackSenderOrgNr;

    private final List dokumentTypeList = new ArrayList<>();

    public SvarInnPutMessageBuilder streamedFile(Document document) {
        final DokumentType dokumentType = objectFactory.createDokumentType();

        String mimeType = document.getMimeType().toString();
        dokumentType.setVeMimeType(mimeType);
        dokumentType.setVeDokformat(MimeTypeExtensionMapper.getExtension(mimeType));

        dokumentType.setDbTittel(document.getFilename());
        dokumentType.setVeFilnavn(document.getFilename());
        // Value does not exist in FIKS, must be hard coded
        dokumentType.setVeVariant("P");
        final FilType fil = objectFactory.createFilType();
        fil.setBase64(getContent(document));
        dokumentType.setFil(fil);
        dokumentTypeList.add(dokumentType);
        return this;
    }

    private byte[] getContent(Document document) {
        try (InputStream inputStream = document.getResource().getInputStream()) {
            return IOUtils.toByteArray(inputStream);
        } catch (IOException e) {
            throw new SvarInnForsendelseException(
                    String.format("Couldn't get content of file %s", document.getFilename()), e);
        }
    }

    public PutMessageRequestType build() {
        Sender sender = createSender();
        Receiver receiver = createReceiver();

        return putMessageRequestFactory.create(forsendelse.getId(),
                sender,
                receiver,
                getPayload());
    }

    private String getPayload() {
        final MeldingType meldingType = objectFactory.createMeldingType();
        JournpostType journpostType = createJournpostType();
        journpostType.getDokument().addAll(dokumentTypeList);
        NoarksakType noarkSak = createNoarkSak();
        meldingType.setNoarksak(noarkSak);
        meldingType.setJournpost(journpostType);
        return payloadConverter.marshallToString(meldingType);
    }

    private Sender createSender() {
        if (!StringUtils.hasText(forsendelse.getSvarSendesTil().getOrgnr()) && StringUtils.hasText(fallbackSenderOrgNr)) {
            return Sender.of(fallbackSenderOrgNr, forsendelse.getSvarSendesTil().getNavn(), forsendelse.getId());
        }
        return Sender.of(forsendelse.getSvarSendesTil().getOrgnr(), forsendelse.getSvarSendesTil().getNavn(), forsendelse.getId());
    }

    private Receiver createReceiver() {
        return Receiver.of(forsendelse.getMottaker().getOrgnr(), forsendelse.getMottaker().getNavn(), forsendelse.getSvarPaForsendelse());
    }

    private NoarksakType createNoarkSak() {
        final NoarksakType noarksakType = objectFactory.createNoarksakType();
        final Forsendelse.MetadataFraAvleverendeSystem metadata = forsendelse.getMetadataFraAvleverendeSystem();
        noarksakType.setSaSeknr(String.valueOf(metadata.getSakssekvensnummer()));
        noarksakType.setSaSaar(String.valueOf(metadata.getSaksaar()));
        noarksakType.setSaTittel(getForsendelseTittel());
        return noarksakType;
    }

    private JournpostType createJournpostType() {
        final JournpostType journpostType = objectFactory.createJournpostType();
        final Forsendelse.MetadataFraAvleverendeSystem metadata = forsendelse.getMetadataFraAvleverendeSystem();
        if (!isNullOrEmpty(metadata.getDokumentetsDato())) {
            journpostType.setJpDokdato(Instant.ofEpochMilli(Long.parseLong(metadata.getDokumentetsDato())).atZone(clock.getZone()).toLocalDate().toString());
        }
        journpostType.setJpNdoktype(metadata.getJournalposttype());
        journpostType.setJpStatus(metadata.getJournalstatus());
        journpostType.setJpJaar(metadata.getJournalaar());
        journpostType.setJpSeknr(metadata.getJournalsekvensnummer());
        journpostType.setJpJpostnr(metadata.getJournalpostnummer());
        journpostType.setJpOffinnhold(getForsendelseTittel());
        if (!isNullOrEmpty(forsendelse.getSvarSendesTil().getFnr())) {
            journpostType.setJpInnhold(getForsendelseTittel() + " (eDialog fra "+forsendelse.getSvarSendesTil().getFnr()+")");
        } else {
            journpostType.setJpInnhold(getForsendelseTittel());
        }
        if (!isNullOrEmpty(metadata.getJournaldato())) {
            journpostType.setJpJdato(Instant.ofEpochMilli(Long.parseLong(metadata.getJournaldato())).atZone(clock.getZone()).toLocalDate().toString());
        }
        journpostType.getAvsmot().add(createSaksbehandlerAvsender(metadata));
        journpostType.getAvsmot().add(createAvsender());
        return journpostType;
    }

    private String getForsendelseTittel() {
        if (StringUtils.hasText(forsendelse.getMetadataFraAvleverendeSystem().getTittel())) {
            return forsendelse.getMetadataFraAvleverendeSystem().getTittel();
        }
        if (StringUtils.hasText(forsendelse.getTittel())) {
            return forsendelse.getTittel();
        }
        return "Dokumentet mangler tittel";
    }

    private AvsmotType createAvsender() {
        Forsendelse.SvarSendesTil sst = forsendelse.getSvarSendesTil();
        AvsmotType avsender = new AvsmotType();
        avsender.setAmIhtype("1");
        avsender.setAmAdresse(sst.getAdresse1());
        avsender.setAmPostnr(sst.getPostnr());
        avsender.setAmPoststed(sst.getPoststed());
        avsender.setAmNavn(sst.getNavn());
        avsender.setAmUtland(sst.getLand());
        avsender.setAmOrgnr(sst.getOrgnr());
        return avsender;
    }

    private AvsmotType createSaksbehandlerAvsender(Forsendelse.MetadataFraAvleverendeSystem metadata) {
        AvsmotType avsender = new AvsmotType();
        avsender.setAmIhtype("0");
        avsender.setAmNavn(metadata.getSaksBehandler());
        return avsender;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy