Package org.dcm4che3.io

Source Code of org.dcm4che3.io.DicomOutputStreamTest

package org.dcm4che3.io;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.dcm4che3.data.Tag;
import org.dcm4che3.data.UID;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.BulkData;
import org.dcm4che3.data.Fragments;
import org.dcm4che3.data.VR;
import org.dcm4che3.io.DicomEncodingOptions;
import org.dcm4che3.io.DicomInputStream;
import org.dcm4che3.io.DicomOutputStream;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
* @author Gunter Zeilinger <gunterze@gmail.com>
*/
public class DicomOutputStreamTest {

    private File file;

    @Before
    public void setUp() throws IOException {
        file = File.createTempFile("test", ".dcm");
    }

    @After
    public void cleanUp() throws IOException {
        file.delete();
    }

   @Test
    public void testWriteCommand() throws IOException {
       DicomOutputStream out = new DicomOutputStream(
               new FileOutputStream(file), UID.ImplicitVRLittleEndian);
       try {
           out.writeCommand(cechorq());
       } finally {
           out.close();
       }
       assertEquals(4, readAttributes().size());
    }

    private Attributes readAttributes() throws IOException {
        DicomInputStream in = new DicomInputStream(file);
        try {
            return in.readDataset(-1, -1);
        } finally {
            in.close();
        }
    }

    private Attributes deserializeAttributes() throws Exception {
        ObjectInputStream in =
                new ObjectInputStream(new FileInputStream(file));
        try {
            return (Attributes) in.readObject();
        } finally {
            in.close();
        }
    }


    private Attributes cechorq() {
        Attributes cechorq = new Attributes();
        cechorq.setString(Tag.AffectedSOPClassUID, VR.UI,
                UID.VerificationSOPClass);
        cechorq.setInt(Tag.CommandField, VR.US, 0x0030);
        cechorq.setInt(Tag.MessageID, VR.US, 1);
        cechorq.setInt(Tag.CommandDataSetType, VR.US, 0x0101);
        return cechorq;
    }

    @Test
    public void testWriteDatasetWithoutFileMetaInformation()
            throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        testWriteDataset(out, null);
    }

    @Test
    public void testWriteDataset() throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        testWriteDataset(out, UID.ExplicitVRLittleEndian);
    }

    @Test
    public void testWriteDatasetWithGroupLength() throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        out.setEncodingOptions(
                new DicomEncodingOptions(true, true, false, true, false));
        testWriteDataset(out, UID.ExplicitVRLittleEndian);
    }

    @Test
    public void testWriteDatasetWithoutUndefLength() throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        out.setEncodingOptions(
                new DicomEncodingOptions(false, false, false, false, false));
        testWriteDataset(out, UID.ExplicitVRLittleEndian);
    }

    @Test
    public void testWriteDatasetWithUndefEmptyLength() throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        out.setEncodingOptions(
                new DicomEncodingOptions(false, true, true, true, true));
        testWriteDataset(out, UID.ExplicitVRLittleEndian);
    }

    @Test
    public void testWriteDatasetBigEndian() throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        testWriteDataset(out, UID.ExplicitVRBigEndianRetired);
    }

    @Test
    public void testWriteDatasetDeflated() throws IOException {
        DicomOutputStream out = new DicomOutputStream(file);
        testWriteDataset(out, UID.DeflatedExplicitVRLittleEndian);
    }

    @Test
    public void testSerializeDataset() throws Exception {
        ObjectOutputStream out = new ObjectOutputStream(
                new FileOutputStream(file));
        try {
            out.writeObject(dataset());
            out.writeUTF("END");
        } finally {
            out.close();
        }
        deserializeAttributes();
    }

    private void testWriteDataset(DicomOutputStream out, String tsuid)
            throws IOException {
        Attributes ds = dataset();
        Attributes fmi = tsuid != null
                ? ds.createFileMetaInformation(tsuid)
                : null;
        try {
            out.writeDataset(fmi, ds);
        } finally {
            out.close();
        }
        readAttributes();
    }

    private Attributes dataset() {
        Attributes ds = new Attributes();
        ds.setString(Tag.PatientName, VR.PN, "Simpson^Homer");
        ds.setNull(Tag.ReferencedPatientSequence, VR.SQ);
        ds.newSequence(Tag.ReferencedVisitSequence, 0);
        ds.newSequence(Tag.ReferencedStudySequence, 1)
                .add(new Attributes());
        ds.setNull(Tag.AccessionNumber, VR.SH);
        ds.newSequence(Tag.RequestAttributesSequence, 1)
                .add(requestAttributes());
        ds.setString(Tag.SOPClassUID, VR.UI, "1.2.3.4");
        ds.setString(Tag.SOPInstanceUID, VR.UI, "4.3.2.1");
        BulkData bdl = new BulkData(
                uri("OT-PAL-8-face"), 1654, 307200, false);
        ds.setValue(Tag.PixelData, VR.OW, bdl);
        Fragments frags = ds.newFragments("DicomOutputStreamTest", 0x99990010, VR.OB, 3);
        frags.add(null);
        frags.add(new byte[] { 1, 2, 3, 4 });
        frags.add(bdl);
        return ds;
    }

    private static String uri(String name) {
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        return cl.getResource(name).toString();
    }

    private Attributes requestAttributes() {
        Attributes item = new Attributes();
        item.setString(Tag.RequestedProcedureID, VR.SH, "P1234");
        item.setString(Tag.ScheduledProcedureStepID, VR.SH, "S1234");
        item.setString(Tag.AccessionNumber, VR.SH, "A1234");
        item.newSequence(Tag.IssuerOfAccessionNumberSequence, 1)
                .add(hl7v2HierarchicDesignator());
        return item;
    }

    private Attributes hl7v2HierarchicDesignator() {
        Attributes item= new Attributes();
        item.setString(Tag.LocalNamespaceEntityID, VR.UT, "E1234");
        item.setString(Tag.UniversalEntityID, VR.UT,
                "ef9d7472-3364-4480-b362-fc2d2a47a0c5");
        item.setString(Tag.UniversalEntityIDType, VR.CS, "UUID");
        return item;
    }

}
TOP

Related Classes of org.dcm4che3.io.DicomOutputStreamTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.