package no.difi.sdp.client.domain;

import no.difi.sdp.client.asice.AsicEAttachable;
import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;

public class Dokument implements AsicEAttachable {

    private Dokument(String tittel, String filnavn, InputStream dokumentStream) {
        this.tittel = tittel;
        this.filnavn = filnavn;
        try {
            this.dokument = IOUtils.toByteArray(dokumentStream);
        }
        catch (IOException e) {
            throw new LastDokumentException();
        }
        finally {
            IOUtils.closeQuietly(dokumentStream);
        }
    }

    private String tittel;
    private String filnavn;
    private byte[] dokument;
    private String mimeType = "application/pdf";

    @Override
    public String getFileName() {
        return getFilnavn();
    }

    @Override
    public byte[] getBytes() {
        return dokument;
    }

    public String getFilnavn() {
        return filnavn;
    }

    public String getMimeType() {
        return mimeType;
    }

    public String getTittel() {
        return tittel;
    }

    /**
     * @param tittel Tittel som vises til brukeren gitt riktig sikkerhetsnivå.
     * @param filnavn Filnavnet til dokumentet.
     * @param dokument Dokumentet som en strøm.
     */
    public static Builder builder(String tittel, String filnavn, InputStream dokument) {
        return new Builder(tittel, filnavn, dokument);
    }

    public static class Builder {

        private final Dokument target;
        private boolean built = false;

        private Builder(String tittel, String filnavn, InputStream dokument) {
            target = new Dokument(tittel, filnavn, dokument);
        }

        /**
         * MIME-type for dokumentet. For informasjon om tillatte formater, se <a href="http://begrep.difi.no/SikkerDigitalPost/Dokumentformat/">http://begrep.difi.no/SikkerDigitalPost/Dokumentformat/</a> }.
         *
         * Standard er application/pdf.
         */
        public Builder mimeType(String mimeType) {
            target.mimeType = mimeType;
            return this;
        }

        public Dokument build() {
            if (built) throw new IllegalStateException("Can't build twice");
            built = true;
            return target;
        }
    }

    public class LastDokumentException extends RuntimeException {}
}

@@ -117,16 +117,107 @@
 Utils;%0A%0A
+import java.io.File;%0Aimport java.io.FileInputStream;%0Aimport java.io.FileNotFoundException;%0A
 import j
@@ -228,32 +228,32 @@
 io.IOException;%0A
-
 import java.io.I
@@ -626,16 +626,45 @@
 ception(
+%22Kunne ikke lese dokument%22, e
 );%0A     
@@ -1574,32 +1574,453 @@
 kument);%0A    %7D%0A%0A
+    /**%0A     * @param tittel Tittel som vises til brukeren gitt riktig sikkerhetsniv%C3%A5.%0A     * @param file Filen som skal sendes%0A     */%0A    public static Builder builder(String tittel, File file) %7B%0A        try %7B%0A            return new Builder(tittel, file.getName(), new FileInputStream(file));%0A        %7D catch (FileNotFoundException e) %7B%0A            throw new LastDokumentException(%22Fant ikke fil%22, e);%0A        %7D%0A    %7D%0A%0A
     public stati
@@ -2866,24 +2866,31 @@
 %0A    public 
+static 
 class LastDo
@@ -2931,12 +2931,126 @@
 eption %7B
+%0A        public LastDokumentException(String message, Exception e) %7B%0A            super(message, e);%0A        %7D%0A    
 %7D%0A%7D%0A

Support building with file as direct attachment