com.pixelmed.network

## Class StorageSOPClassSCU

- java.lang.Object
- - com.pixelmed.dicom.SOPClass
  - - com.pixelmed.network.StorageSOPClassSCU

- Direct Known Subclasses:
    StorageSOPClassSCUPerformanceTest, TestSendingCommandAndDataInOnePDU

      public class StorageSOPClassSCU
      extends SOPClass

  This class implements the SCU role of SOP Classes of the Storage Service Class.

  The class has no methods other than the constructor (and a main method for testing). The constructor establishes an association, sends the C-STORE request, and releases the association.

  Debugging messages with a varying degree of verbosity can be activated.

  For example:

      try {
          new StorageSOPClassSCU("theirhost",11112,"STORESCP","STORESCU","/tmp/testfile.dcm","1.2.840.10008.5.1.4.1.1.7","1.3.6.1.4.1.5962.1.1.0.0.0.1064923879.2077.3232235877",0,0);
      }
      catch (Exception e) {
          e.printStackTrace(System.err);
      }

  From the command line, sending multiple files:

      find /tmp -name '*.dcm' | java -cp pixelmed.jar:lib/additional/commons-codec-1.3.jar:lib/additional/commons-compress-1.9.jar com.pixelmed.network.StorageSOPClassSCU theirhost 11112 STORESCP STORESCU -  0 0

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `StorageSOPClassSCU.CStoreResponseHandler`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `debugLevel`
    `protected boolean` | `trappedExceptions`

    - ### Fields inherited from class com.pixelmed.dicom.SOPClass

      `AmbulatoryECGStorage, arrayOfQuerySOPClasses, arrayOfRetrieveWithGetSOPClasses, arrayOfRetrieveWithMoveSOPClasses, arrayOfStorageSOPClasses, ArterialPulseWaveformStorage, AudioSRStorageTrialRetired, AutorefractionMeasurementsStorage, BasicStructuredDisplayStorage, BasicTextSRStorage, BasicVoiceStorage, BlendingSoftcopyPresentationStateStorage, BreastProjectionXRayImageStorageForPresentation, BreastProjectionXRayImageStorageForProcessing, BreastTomosynthesisImageStorage, CardiacElectrophysiologyWaveformStorage, ChestCADSRStorage, ColonCADSRStorage, ColorPaletteInformationModelFind, ColorPaletteInformationModelGet, ColorPaletteInformationModelMove, ColorPaletteStorage, ColorSoftcopyPresentationStateStorage, CompositingPlanarMPRVolumetricPresentationStateStorage, Comprehensive3DSRStorage, ComprehensiveSRStorage, ComprehensiveSRStorageTrialRetired, ComputedRadiographyImageStorage, CornealTopographyMapStorage, CTImageStorage, DeformableSpatialRegistrationStorage, DetailSRStorageTrialRetired, DICONDEEddyCurrentImageStorage, DICONDEEddyCurrentMultiframeImageStorage, DICOS2DAITStorage, DICOS3DAITStorage, DICOSCTImageStorage, DICOSDigitalXRayImageStorageForPresentation, DICOSDigitalXRayImageStorageForProcessing, DICOSQuadrupoleResonanceStorage, DICOSThreatDetectionReportStorage, DigitalIntraoralXRayImageStorageForPresentation, DigitalIntraoralXRayImageStorageForProcessing, DigitalMammographyXRayImageStorageForPresentation, DigitalMammographyXRayImageStorageForProcessing, DigitalXRayImageStorageForPresentation, DigitalXRayImageStorageForProcessing, EncapsulatedCDAStorage, EncapsulatedPDFStorage, EnhancedCTImageStorage, EnhancedMRColorImageStorage, EnhancedMRImageStorage, EnhancedPETImageStorage, EnhancedSRStorage, EnhancedUSVolumeStorage, EnhancedXAImageStorage, EnhancedXRFImageStorage, ExtensibleSRStorage, GeneralAudioWaveformStorage, GeneralECGStorage, GenericImplantTemplateStorage, GrayscalePlanarMPRVolumetricPresentationStateStorage, GrayscaleSoftcopyPresentationStateStorage, HemodynamicWaveformStorage, ImplantAssemblyTemplateStorage, ImplantationPlanSRStorage, ImplantTemplateGroupStorage, IntraocularLensCalculationsStorage, IVOCTImageStorageForPresentation, IVOCTImageStorageForProcessing, KeratometryMeasurementsStorage, KeyObjectSelectionDocumentStorage, LegacyConvertedEnhancedCTImageStorage, LegacyConvertedEnhancedMRImageStorage, LegacyConvertedEnhancedPETImageStorage, LensometryMeasurementsStorage, MacularGridThicknessAndVolumeReportStorage, MammographyCADSRStorage, MediaStorageDirectoryStorage, MRImageStorage, MRSpectroscopyStorage, MultiframeGrayscaleByteSecondaryCaptureImageStorage, MultiframeGrayscaleWordSecondaryCaptureImageStorage, MultiframeSingleBitSecondaryCaptureImageStorage, MultiframeTrueColorSecondaryCaptureImageStorage, NuclearMedicineImageStorage, NuclearMedicineImageStorageRetired, OphthalmicAxialMeasurementsStorage, OphthalmicPhotography16BitImageStorage, OphthalmicPhotography8BitImageStorage, OphthalmicThicknessMapStorage, OphthalmicTomographyImageStorage, OphthalmicVisualFieldStaticPerimetryMeasurementsStorage, ParametricMapStorage, PatientRootQueryRetrieveInformationModelFind, PatientRootQueryRetrieveInformationModelGet, PatientRootQueryRetrieveInformationModelMove, PatientStudyOnlyQueryRetrieveInformationModelFind, PatientStudyOnlyQueryRetrieveInformationModelGet, PatientStudyOnlyQueryRetrieveInformationModelMove, PETImageStorage, PrivateAcusonStructuredReportDetailStorage, PrivateERADPracticeBuilderReportDictationStorage, PrivateERADPracticeBuilderReportTextStorage, PrivateFujiCRImageStorage, PrivateGE3DModelStorage, PrivateGECollageStorage, PrivateGEDicomCTImageInfoObject, PrivateGEDicomDisplayImageInfoObject, PrivateGEDicomMRImageInfoObject, PrivateGEeNTEGRAProtocolOrNMGenieStorage, PrivateGEPETRawDataStorage, PrivateGERTPlanStorage, PrivatePhilips3DObject2Storage, PrivatePhilips3DObjectStorage, PrivatePhilips3DPresentationStateStorage, PrivatePhilipsCompositeObjectStorage, PrivatePhilipsCTSyntheticImageStorage, PrivatePhilipsCXImageStorage, PrivatePhilipsCXSyntheticImageStorage, PrivatePhilipsHPLive3D01Storage, PrivatePhilipsHPLive3D02Storage, PrivatePhilipsLiveRunStorage, PrivatePhilipsMRCardio2Storage, PrivatePhilipsMRCardioAnalysis2Storage, PrivatePhilipsMRCardioAnalysisStorage, PrivatePhilipsMRCardioProfileStorage, PrivatePhilipsMRCardioStorage, PrivatePhilipsMRColorImageStorage, PrivatePhilipsMRExamcardStorage, PrivatePhilipsMRSeriesDataStorage, PrivatePhilipsMRSpectrumStorage, PrivatePhilipsMRSyntheticImageStorage, PrivatePhilipsPerfusionImageStorage, PrivatePhilipsPerfusionStorage, PrivatePhilipsReconstructionStorage, PrivatePhilipsRunStorage, PrivatePhilipsSpecialisedXAStorage, PrivatePhilipsSurface2Storage, PrivatePhilipsSurfaceStorage, PrivatePhilipsVolume2Storage, PrivatePhilipsVolumeSetStorage, PrivatePhilipsVolumeStorage, PrivatePhilipsVRMLStorage, PrivatePhilipsXRayMFStorage, PrivatePixelMedFloatingPointImageStorage, PrivatePixelMedLegacyConvertedEnhancedCTImageStorage, PrivatePixelMedLegacyConvertedEnhancedMRImageStorage, PrivatePixelMedLegacyConvertedEnhancedPETImageStorage, PrivatePMODMultiframeImageStorage, PrivateSiemensAXFrameSetsStorage, PrivateSiemensCSANonImageStorage, PrivateSiemensCTMRVolumeStorage, PrivateTomTecAnnotationStorage, PrivateToshibaUSImageStorage, ProcedureLogStorage, PseudoColorSoftcopyPresentationStateStorage, RadiopharmaceuticalRadiationDoseSRStorage, RawDataStorage, RealWorldValueMappingStorage, RespiratoryWaveformStorage, RTBeamsDeliveryInstructionStorage, RTBeamsDeliveryInstructionStorageTrial, RTBeamsTreatmentRecordStorage, RTBrachyTreatmentRecordStorage, RTDoseStorage, RTImageStorage, RTIonBeamsTreatmentRecordStorage, RTIonPlanStorage, RTPlanStorage, RTStructureSetStorage, RTTreatmentSummaryRecordStorage, SecondaryCaptureImageStorage, SegmentationStorage, SpatialFiducialsStorage, SpatialRegistrationStorage, SpectaclePrescriptionReportStorage, StandaloneCurveStorage, StandaloneModalityLUTStorage, StandaloneOverlayStorage, StandalonePETCurveStorage, StandaloneVOILUTStorage, StereometricRelationshipStorage, StudyRootQueryRetrieveInformationModelFind, StudyRootQueryRetrieveInformationModelGet, StudyRootQueryRetrieveInformationModelMove, SubjectiveRefractionMeasurementsStorage, SurfaceScanMeshStorage, SurfaceScanPointCloudStorage, SurfaceSegmentationStorage, TextSRStorageTrialRetired, TwelveLeadECGStorage, UltrasoundImageStorage, UltrasoundImageStorageRetired, UltrasoundMultiframeImageStorage, UltrasoundMultiframeImageStorageRetired, Verification, VideoEndoscopicImageStorage, VideoMicroscopicImageStorage, VideoPhotographicImageStorage, VisibleLightDraftImageStorage, VisibleLightEndoscopicImageStorage, VisibleLightMicroscopicImageStorage, VisibleLightMultiFrameDraftImageStorage, VisibleLightPhotographicImageStorage, VisibleLightSlideCoordinatesMicroscopicImageStorage, VisualAcuityMeasurementsStorage, VLWholeSlideMicroscopyImageStorage, XAXRFGrayscaleSoftcopyPresentationStateStorage, XRay3DAngiographicImageStorage, XRay3DCraniofacialImageStorage, XRayAngiographicBiplaneImageStorage, XRayAngiographicImageStorage, XRayRadiationDoseSRStorage, XRayRadioFlouroscopicImageStorage`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `StorageSOPClassSCU()` Dummy constructor allows testing subclasses to use different constructor.
    `` | `StorageSOPClassSCU(Association association, SetOfDicomFiles dicomFiles, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, int debugLevel)` Send the specified instances contained in the files over an existing association.
    `` | `StorageSOPClassSCU(Association association, SetOfDicomFiles dicomFiles, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID, int debugLevel)` Send the specified instances contained in the files over an existing association.

    ``

    `StorageSOPClassSCU(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, java.util.Set setOfSOPClassUIDs, AttributeList[] lists, int compressionLevel, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID, int debugLevel)`
    Deprecated.
    use `StorageSOPClassSCU(String hostname,int port,String calledAETitle,String callingAETitle, SetOfDicomFiles dicomFiles,int compressionLevel,MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, String moveOriginatorApplicationEntityTitle,int moveOriginatorMessageID,int debugLevel)` instead

    `` | `StorageSOPClassSCU(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, SetOfDicomFiles dicomFiles, int compressionLevel, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, int debugLevel)` Establish an association to the specified AE, send the instances contained in the files, and release the association.

    ``

    `StorageSOPClassSCU(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, SetOfDicomFiles dicomFiles, int compressionLevel, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID, int debugLevel)`
    Establish an association to the specified AE, send the instances contained in the files, and release the association.

    `` | `StorageSOPClassSCU(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, java.lang.String fileName, java.lang.String affectedSOPClass, java.lang.String affectedSOPInstance, int compressionLevel, int debugLevel)` Establish an association to the specified AE, send the instance contained in the file, and release the association.

    ``

    `StorageSOPClassSCU(java.lang.String hostname, int port, java.lang.String calledAETitle, java.lang.String callingAETitle, java.lang.String fileName, java.lang.String affectedSOPClass, java.lang.String affectedSOPInstance, int compressionLevel, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID, int debugLevel)`
    Establish an association to the specified AE, send the instance contained in the file, and release the association.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `encounteredTrappedExceptions()`
    `static void` | `main(java.lang.String[] arg)` For testing, establish an association to the specified AE and send one or more DICOM instances (C-STORE requests).
    `protected void` | `sendMultipleSOPInstances(Association association, AttributeList[] lists, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID)` Send the specified instances contained in the attribute lists over an existing association.
    `protected void` | `sendMultipleSOPInstances(Association association, SetOfDicomFiles dicomFiles, MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID)` Send the specified instances contained in the files over an existing association.
    `protected boolean` | `sendOneSOPInstance(Association association, java.lang.String affectedSOPClass, java.lang.String affectedSOPInstance, AttributeList list, byte presentationContextID, java.lang.String outputTransferSyntaxUID, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID)`
    `protected boolean` | `sendOneSOPInstance(Association association, java.lang.String affectedSOPClass, java.lang.String affectedSOPInstance, java.lang.String inputTransferSyntaxUID, DicomInputStream din, byte presentationContextID, java.lang.String outputTransferSyntaxUID)`
    `protected boolean` | `sendOneSOPInstance(Association association, java.lang.String affectedSOPClass, java.lang.String affectedSOPInstance, java.lang.String inputTransferSyntaxUID, DicomInputStream din, byte presentationContextID, java.lang.String outputTransferSyntaxUID, java.lang.String moveOriginatorApplicationEntityTitle, int moveOriginatorMessageID)`

    - ### Methods inherited from class com.pixelmed.dicom.SOPClass

      `getPlausibleStandardSOPClassUIDsForModality, getSetOfStorageSOPClasses, isCompositeInstanceQuery, isCompositeInstanceRetrieve, isCompositeInstanceRetrieveWithGet, isCompositeInstanceRetrieveWithMove, isDICONDEImageStorage, isDICOSImageStorage, isDICOSNonImageStorage, isDirectory, isEncapsulatedDocument, isEnhancedMultiframeImageStorage, isEnhancedMultiframeImageWithPlanePositionOrientationAndMeasuresStorage, isImageStorage, isKeyObjectSelectionDocument, isMiscellaneousCompositeNonImageStorage, isMiscellaneousNonCompositeStorage, isMultiframeSecondaryCaptureImageStorage, isNonImageStorage, isOphthalmicMeasurementStorage, isPatientRootCompositeInstanceQuery, isPatientRootCompositeInstanceRetrieve, isPatientRootCompositeInstanceRetrieveWithGet, isPatientRootCompositeInstanceRetrieveWithMove, isPatientStudyOnlyCompositeInstanceQuery, isPatientStudyOnlyCompositeInstanceRetrieve, isPatientStudyOnlyCompositeInstanceRetrieveWithGet, isPatientStudyOnlyCompositeInstanceRetrieveWithMove, isPresentationState, isPrivateImageStorage, isPrivateNonImageStorage, isRadiotherapy, isRawData, isSecondaryCaptureImageStorage, isSpectroscopy, isStandalone, isStandardImageStorage, isStorage, isStructuredReport, isStudyRootCompositeInstanceQuery, isStudyRootCompositeInstanceRetrieve, isStudyRootCompositeInstanceRetrieveWithGet, isStudyRootCompositeInstanceRetrieveWithMove, isTrialRetiredStructuredReport, isVerification, isWaveform`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### debugLevel

          protected int debugLevel

    - #### trappedExceptions

          protected boolean trappedExceptions

  - ### Constructor Detail

    - #### StorageSOPClassSCU

          protected StorageSOPClassSCU()
                                throws DicomNetworkException,
                                       DicomException,
                                       java.io.IOException

      Dummy constructor allows testing subclasses to use different constructor.

      Throws:
        `DicomNetworkException`
        `DicomException`
        `java.io.IOException`

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(java.lang.String hostname,
                                    int port,
                                    java.lang.String calledAETitle,
                                    java.lang.String callingAETitle,
                                    java.lang.String fileName,
                                    java.lang.String affectedSOPClass,
                                    java.lang.String affectedSOPInstance,
                                    int compressionLevel,
                                    int debugLevel)
                             throws DicomNetworkException,
                                    DicomException,
                                    java.io.IOException

      Establish an association to the specified AE, send the instance contained in the file, and release the association.

      Parameters:
        `hostname` - their hostname or IP address
        `port` - their port
        `calledAETitle` - their AE Title
        `callingAETitle` - our AE Title
        `fileName` - the name of the file containing the data set to send
        `affectedSOPClass` - must be the same as the SOP Class UID contained within the data set, may be null if file has a meta information header
        `affectedSOPInstance` - must be the same as the SOP Instance UID contained within the data set, may be null if file has a meta information header
        `compressionLevel` - 0=none,1=propose deflate,2=propose deflate and bzip2
        `debugLevel` - zero for no debugging messages, higher values more verbose messages
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(java.lang.String hostname,
                                    int port,
                                    java.lang.String calledAETitle,
                                    java.lang.String callingAETitle,
                                    java.lang.String fileName,
                                    java.lang.String affectedSOPClass,
                                    java.lang.String affectedSOPInstance,
                                    int compressionLevel,
                                    java.lang.String moveOriginatorApplicationEntityTitle,
                                    int moveOriginatorMessageID,
                                    int debugLevel)
                             throws DicomNetworkException,
                                    DicomException,
                                    java.io.IOException

      Establish an association to the specified AE, send the instance contained in the file, and release the association.

      Parameters:
        `hostname` - their hostname or IP address
        `port` - their port
        `calledAETitle` - their AE Title
        `callingAETitle` - our AE Title
        `fileName` - the name of the file containing the data set to send
        `affectedSOPClass` - must be the same as the SOP Class UID contained within the data set, may be null if file has a meta information header
        `affectedSOPInstance` - must be the same as the SOP Instance UID contained within the data set, may be null if file has a meta information header
        `compressionLevel` - 0=none,1=propose deflate,2=propose deflate and bzip2
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
        `debugLevel` - zero for no debugging messages, higher values more verbose messages
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(Association association,
                                    SetOfDicomFiles dicomFiles,
                                    MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                    int debugLevel)

      Send the specified instances contained in the files over an existing association.

      Parameters:
        `association` - already existing association to SCP
        `dicomFiles` - the set of DICOM files containing names, SOP Class UIDs, SOP Instance UIDs and optionally Transfer Syntaxes
        `debugLevel` - zero for no debugging messages, higher values more verbose messages

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(Association association,
                                    SetOfDicomFiles dicomFiles,
                                    MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                    java.lang.String moveOriginatorApplicationEntityTitle,
                                    int moveOriginatorMessageID,
                                    int debugLevel)

      Send the specified instances contained in the files over an existing association.

      Parameters:
        `association` - already existing association to SCP
        `dicomFiles` - the set of DICOM files containing names, SOP Class UIDs, SOP Instance UIDs and optionally Transfer Syntaxes
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
        `debugLevel` - zero for no debugging messages, higher values more verbose messages

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(java.lang.String hostname,
                                    int port,
                                    java.lang.String calledAETitle,
                                    java.lang.String callingAETitle,
                                    SetOfDicomFiles dicomFiles,
                                    int compressionLevel,
                                    MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                    int debugLevel)

      Establish an association to the specified AE, send the instances contained in the files, and release the association.

      Parameters:
        `hostname` - their hostname or IP address
        `port` - their port
        `calledAETitle` - their AE Title
        `callingAETitle` - our AE Title
        `dicomFiles` - the set of DICOM files containing names, SOP Class UIDs, SOP Instance UIDs and optionally Transfer Syntaxes
        `compressionLevel` - 0=none,1=propose deflate,2=propose deflate and bzip2
        `multipleInstanceTransferStatusHandler` - transfer handler for reporting pending status (may be null if not required)
        `debugLevel` - zero for no debugging messages, higher values more verbose messages

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(java.lang.String hostname,
                                    int port,
                                    java.lang.String calledAETitle,
                                    java.lang.String callingAETitle,
                                    SetOfDicomFiles dicomFiles,
                                    int compressionLevel,
                                    MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                    java.lang.String moveOriginatorApplicationEntityTitle,
                                    int moveOriginatorMessageID,
                                    int debugLevel)

      Establish an association to the specified AE, send the instances contained in the files, and release the association.

      Parameters:
        `hostname` - their hostname or IP address
        `port` - their port
        `calledAETitle` - their AE Title
        `callingAETitle` - our AE Title
        `dicomFiles` - the set of DICOM files containing names, SOP Class UIDs, SOP Instance UIDs and optionally Transfer Syntaxes
        `compressionLevel` - 0=none,1=propose deflate,2=propose deflate and bzip2
        `multipleInstanceTransferStatusHandler` - transfer handler for reporting pending status (may be null if not required)
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
        `debugLevel` - zero for no debugging messages, higher values more verbose messages

    - #### StorageSOPClassSCU

          public StorageSOPClassSCU(java.lang.String hostname,
                                    int port,
                                    java.lang.String calledAETitle,
                                    java.lang.String callingAETitle,
                                    java.util.Set setOfSOPClassUIDs,
                                    AttributeList[] lists,
                                    int compressionLevel,
                                    MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                    java.lang.String moveOriginatorApplicationEntityTitle,
                                    int moveOriginatorMessageID,
                                    int debugLevel)

      Deprecated. use `StorageSOPClassSCU(String hostname,int port,String calledAETitle,String callingAETitle, SetOfDicomFiles dicomFiles,int compressionLevel,MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler, String moveOriginatorApplicationEntityTitle,int moveOriginatorMessageID,int debugLevel)` instead

      Establish an association to the specified AE, send the instances contained in the attribute lists, and release the association.

      Deprecated because establishing presentation contexts based on the set of SOP Classes without knowledge of encoded Transfer Syntax may lead to failure during C-STORE because of inability to convert.

      Parameters:
        `hostname` - their hostname or IP address
        `port` - their port
        `calledAETitle` - their AE Title
        `callingAETitle` - our AE Title
        `setOfSOPClassUIDs` - the set of SOP Classes contained in the attribute lists
        `lists` - the attribute lists to send
        `compressionLevel` - 0=none,1=propose deflate,2=propose deflate and bzip2
        `multipleInstanceTransferStatusHandler` - transfer handler for reporting pending status (may be null if not required)
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
        `debugLevel` - zero for no debugging messages, higher values more verbose messages

  - ### Method Detail

    - #### encounteredTrappedExceptions

          public boolean encounteredTrappedExceptions()

      Returns:
        true if in multiple instance constructors exceptions were trapped, e.g., connection or association failure before transfers attempted

    - #### sendOneSOPInstance

          protected boolean sendOneSOPInstance(Association association,
                                               java.lang.String affectedSOPClass,
                                               java.lang.String affectedSOPInstance,
                                               java.lang.String inputTransferSyntaxUID,
                                               DicomInputStream din,
                                               byte presentationContextID,
                                               java.lang.String outputTransferSyntaxUID)
                                        throws AReleaseException,
                                               DicomNetworkException,
                                               DicomException,
                                               java.io.IOException

      Parameters:
        `association` -
        `affectedSOPClass` -
        `affectedSOPInstance` -
        `inputTransferSyntaxUID` -
        `din` -
        `presentationContextID` -
        `outputTransferSyntaxUID` -
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`
        `AReleaseException`

    - #### sendOneSOPInstance

          protected boolean sendOneSOPInstance(Association association,
                                               java.lang.String affectedSOPClass,
                                               java.lang.String affectedSOPInstance,
                                               java.lang.String inputTransferSyntaxUID,
                                               DicomInputStream din,
                                               byte presentationContextID,
                                               java.lang.String outputTransferSyntaxUID,
                                               java.lang.String moveOriginatorApplicationEntityTitle,
                                               int moveOriginatorMessageID)
                                        throws AReleaseException,
                                               DicomNetworkException,
                                               DicomException,
                                               java.io.IOException

      Parameters:
        `association` -
        `affectedSOPClass` -
        `affectedSOPInstance` -
        `inputTransferSyntaxUID` -
        `din` -
        `presentationContextID` -
        `outputTransferSyntaxUID` -
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`
        `AReleaseException`

    - #### sendOneSOPInstance

          protected boolean sendOneSOPInstance(Association association,
                                               java.lang.String affectedSOPClass,
                                               java.lang.String affectedSOPInstance,
                                               AttributeList list,
                                               byte presentationContextID,
                                               java.lang.String outputTransferSyntaxUID,
                                               java.lang.String moveOriginatorApplicationEntityTitle,
                                               int moveOriginatorMessageID)
                                        throws AReleaseException,
                                               DicomNetworkException,
                                               DicomException,
                                               java.io.IOException

      Parameters:
        `association` -
        `affectedSOPClass` -
        `affectedSOPInstance` -
        `list` -
        `presentationContextID` -
        `outputTransferSyntaxUID` -
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`
        `AReleaseException`

    - #### sendMultipleSOPInstances

          protected void sendMultipleSOPInstances(Association association,
                                                  SetOfDicomFiles dicomFiles,
                                                  MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                                  java.lang.String moveOriginatorApplicationEntityTitle,
                                                  int moveOriginatorMessageID)
                                           throws AReleaseException,
                                                  DicomNetworkException,
                                                  java.io.IOException

      Send the specified instances contained in the files over an existing association.

      Parameters:
        `association` - already existing association to SCP
        `dicomFiles` - the set of DICOM files containing names, SOP Class UIDs, SOP Instance UIDs and optionally Transfer Syntaxes
        `multipleInstanceTransferStatusHandler` - handler called after each transfer (may be null if not required)
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
      Throws:
        `AReleaseException`
        `DicomNetworkException`
        `java.io.IOException`

    - #### sendMultipleSOPInstances

          protected void sendMultipleSOPInstances(Association association,
                                                  AttributeList[] lists,
                                                  MultipleInstanceTransferStatusHandler multipleInstanceTransferStatusHandler,
                                                  java.lang.String moveOriginatorApplicationEntityTitle,
                                                  int moveOriginatorMessageID)
                                           throws AReleaseException,
                                                  DicomNetworkException,
                                                  java.io.IOException

      Send the specified instances contained in the attribute lists over an existing association.

      Parameters:
        `association` - already existing association to SCP
        `lists` - the array of attribute lists to send
        `multipleInstanceTransferStatusHandler` - handler called after each transfer (may be null if not required)
        `moveOriginatorApplicationEntityTitle` - the AET of the C-MOVE that originated this C-STORE, or null if none
        `moveOriginatorMessageID` - the MessageID of the C-MOVE that originated this C-STORE, or -1 if none
      Throws:
        `AReleaseException`
        `DicomNetworkException`
        `java.io.IOException`

    - #### main

          public static void main(java.lang.String[] arg)

      For testing, establish an association to the specified AE and send one or more DICOM instances (C-STORE requests).

      Parameters:
        `arg` - array of seven or nine strings - their hostname, their port, their AE Title, our AE Title, the filename containing the instance to send (or a hyphen '-' if a list of one or more filenames is to be read from stdin) optionally the SOP Class and the SOP Instance (otherwise will be read from the file(s); if multiple files use an empty string for the SOP Instance), the compression level (0=none,1=propose deflate,2=propose deflate and bzip2) and the debugging level