Package com.pixelmed.network

## Class StorageSOPClassSCP

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

- All Implemented Interfaces:
    `java.lang.Runnable`

      public class StorageSOPClassSCP
      extends SOPClass
      implements java.lang.Runnable

  This class implements the SCP role of SOP Classes of the Storage Service Class, the Study Root Query Retrieve Information Model Find, Get and Move SOP Classes, and the Verification SOP Class.

  The class has a constructor and a `run()` method. The constructor is passed a socket on which has been received a transport connection open indication. The `run()` method waits for an association to be initiated (i.e. acts as an association acceptor), then waits for storage or verification commands, storing data sets in Part 10 files in the specified folder.

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

  This class is not normally used directly, but rather is instantiated by the `StorageSOPClassSCPDispatcher`, which takes care of listening for transport connection open indications, and creates new threads and starts them to handle each incoming association request.

  See Also:
    `StorageSOPClassSCPDispatcher`

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected StoredFilePathStrategy` | `storedFilePathStrategy` |

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

      `AcquisitionContextSRStorage, AdvancedBlendingPresentationStateStorage, AmbulatoryECGStorage, arrayOfQuerySOPClasses, arrayOfRetrieveWithGetSOPClasses, arrayOfRetrieveWithMoveSOPClasses, arrayOfStorageSOPClasses, ArterialPulseWaveformStorage, AudioSRStorageTrialRetired, AutorefractionMeasurementsStorage, BasicStructuredDisplayStorage, BasicTextSRStorage, BasicVoiceStorage, BlendingSoftcopyPresentationStateStorage, BodyPositionWaveformStorage, BreastProjectionXRayImageStorageForPresentation, BreastProjectionXRayImageStorageForProcessing, BreastTomosynthesisImageStorage, CardiacElectrophysiologyWaveformStorage, CArmPhotonElectronRadiationRecordStorage, CArmPhotonElectronRadiationStorage, ChestCADSRStorage, ColonCADSRStorage, ColorPaletteInformationModelFind, ColorPaletteInformationModelGet, ColorPaletteInformationModelMove, ColorPaletteStorage, ColorSoftcopyPresentationStateStorage, CompositingPlanarMPRVolumetricPresentationStateStorage, Comprehensive3DSRStorage, ComprehensiveSRStorage, ComprehensiveSRStorageTrialRetired, ComputedRadiographyImageStorage, CornealTopographyMapStorage, CTImageStorage, DeformableSpatialRegistrationStorage, DermoscopicPhotographyImageStorage, DetailSRStorageTrialRetired, DICONDEEddyCurrentImageStorage, DICONDEEddyCurrentMultiframeImageStorage, DICOS2DAITStorage, DICOS3DAITStorage, DICOSCTImageStorage, DICOSDigitalXRayImageStorageForPresentation, DICOSDigitalXRayImageStorageForProcessing, DICOSQuadrupoleResonanceStorage, DICOSThreatDetectionReportStorage, DigitalIntraoralXRayImageStorageForPresentation, DigitalIntraoralXRayImageStorageForProcessing, DigitalMammographyXRayImageStorageForPresentation, DigitalMammographyXRayImageStorageForProcessing, DigitalXRayImageStorageForPresentation, DigitalXRayImageStorageForProcessing, ElectromyogramWaveformStorage, ElectrooculogramWaveformStorage, EncapsulatedCDAStorage, EncapsulatedPDFStorage, EncapsulatedSTLStorage, 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, MultichannelRespiratoryWaveformStorage, MultiframeGrayscaleByteSecondaryCaptureImageStorage, MultiframeGrayscaleWordSecondaryCaptureImageStorage, MultiframeSingleBitSecondaryCaptureImageStorage, MultiframeTrueColorSecondaryCaptureImageStorage, MultipleVolumeRenderingVolumetricPresentationStateStorage, NuclearMedicineImageStorage, NuclearMedicineImageStorageRetired, OphthalmicAxialMeasurementsStorage, OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage, OphthalmicOpticalCoherenceTomographyEnFaceImageStorage, OphthalmicPhotography16BitImageStorage, OphthalmicPhotography8BitImageStorage, OphthalmicThicknessMapStorage, OphthalmicTomographyImageStorage, OphthalmicVisualFieldStaticPerimetryMeasurementsStorage, ParametricMapStorage, PatientRadiationDoseSRStorage, PatientRootQueryRetrieveInformationModelFind, PatientRootQueryRetrieveInformationModelGet, PatientRootQueryRetrieveInformationModelMove, PatientStudyOnlyQueryRetrieveInformationModelFind, PatientStudyOnlyQueryRetrieveInformationModelGet, PatientStudyOnlyQueryRetrieveInformationModelMove, PETImageStorage, PrivateAcusonStructuredReportDetailStorage, PrivateAgfaBasicAttributePresentationStateStorage, PrivateDcm4cheEncapsulatedDocumentStorage, PrivateDcm4cheUpgradedCTImageStorage, PrivateDcm4cheUpgradedMRImageStorage, PrivateDcm4cheUpgradedPETImageStorage, PrivateERADPracticeBuilderReportDictationStorage, PrivateERADPracticeBuilderReportTextStorage, PrivateFujiCRImageStorage, PrivateGE3DModelStorage, PrivateGECollageStorage, PrivateGEDicomCTImageInfoObject, PrivateGEDicomDisplayImageInfoObject, PrivateGEDicomMRImageInfoObject, PrivateGEeNTEGRAProtocolOrNMGenieStorage, PrivateGEPETRawDataStorage, PrivateGERTPlanStorage, PrivateMedicalInsight3DSoftcopyPresentationStateStorage, 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, RoboticArmRadiationStorage, RoboticRadiationRecordStorage, RoutineScalpElectroencephalogramWaveformStorage, RTBeamsDeliveryInstructionStorage, RTBeamsDeliveryInstructionStorageTrial, RTBeamsTreatmentRecordStorage, RTBrachyTreatmentRecordStorage, RTDoseStorage, RTImageStorage, RTIonBeamsTreatmentRecordStorage, RTIonPlanStorage, RTPhysicianIntentStorage, RTPlanStorage, RTRadiationRecordSetStorage, RTRadiationSalvageRecordStorage, RTRadiationSetStorage, RTSegmentAnnotationStorage, RTStructureSetStorage, RTTreatmentSummaryRecordStorage, SecondaryCaptureImageStorage, SegmentationStorage, SegmentedVolumeRenderingVolumetricPresentationStateStorage, SimplifiedAdultEchoSRStorage, SleepElectroencephalogramWaveformStorage, SpatialFiducialsStorage, SpatialRegistrationStorage, SpectaclePrescriptionReportStorage, StandaloneCurveStorage, StandaloneModalityLUTStorage, StandaloneOverlayStorage, StandalonePETCurveStorage, StandaloneVOILUTStorage, StereometricRelationshipStorage, StudyRootQueryRetrieveInformationModelFind, StudyRootQueryRetrieveInformationModelGet, StudyRootQueryRetrieveInformationModelMove, SubjectiveRefractionMeasurementsStorage, SurfaceScanMeshStorage, SurfaceScanPointCloudStorage, SurfaceSegmentationStorage, TextSRStorageTrialRetired, TomotherapeuticRadiationRecordStorage, TomotherapeuticRadiationStorage, TractographyResultsStorage, TwelveLeadECGStorage, UltrasoundImageStorage, UltrasoundImageStorageRetired, UltrasoundMultiframeImageStorage, UltrasoundMultiframeImageStorageRetired, Verification, VideoEndoscopicImageStorage, VideoMicroscopicImageStorage, VideoPhotographicImageStorage, VisibleLightDraftImageStorage, VisibleLightEndoscopicImageStorage, VisibleLightMicroscopicImageStorage, VisibleLightMultiFrameDraftImageStorage, VisibleLightPhotographicImageStorage, VisibleLightSlideCoordinatesMicroscopicImageStorage, VisualAcuityMeasurementsStorage, VLWholeSlideMicroscopyImageStorage, VolumeRenderingVolumetricPresentationStateStorage, WideFieldOphthalmicPhotography3DCoordinatesImageStorage, WideFieldOphthalmicPhotographyStereographicProjectionImageStorage, XAXRFGrayscaleSoftcopyPresentationStateStorage, XRay3DAngiographicImageStorage, XRay3DCraniofacialImageStorage, XRayAngiographicBiplaneImageStorage, XRayAngiographicImageStorage, XRayRadiationDoseSRStorage, XRayRadioFlouroscopicImageStorage`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---

    `StorageSOPClassSCP​(java.net.Socket socket, java.lang.String calledAETitle, int ourMaximumLengthReceived, int socketReceiveBufferSize, int socketSendBufferSize, java.io.File savedImagesFolder, StoredFilePathStrategy storedFilePathStrategy, ReceivedObjectHandler receivedObjectHandler, AssociationStatusHandler associationStatusHandler, QueryResponseGeneratorFactory queryResponseGeneratorFactory, RetrieveResponseGeneratorFactory retrieveResponseGeneratorFactory, ApplicationEntityMap applicationEntityMap, PresentationContextSelectionPolicy presentationContextSelectionPolicy)`

    Construct an instance of an association acceptor and storage, query, retrieve and verification SCP to be passed to the constructor of a thread that will be started.

    `StorageSOPClassSCP​(java.net.Socket socket, java.lang.String calledAETitle, int ourMaximumLengthReceived, int socketReceiveBufferSize, int socketSendBufferSize, java.io.File savedImagesFolder, StoredFilePathStrategy storedFilePathStrategy, ReceivedObjectHandler receivedObjectHandler, AssociationStatusHandler associationStatusHandler, QueryResponseGeneratorFactory queryResponseGeneratorFactory, RetrieveResponseGeneratorFactory retrieveResponseGeneratorFactory, ApplicationEntityMap applicationEntityMap, PresentationContextSelectionPolicy presentationContextSelectionPolicy, int debugLevel)`

    Construct an instance of an association acceptor and storage, query, retrieve and verification SCP to be passed to the constructor of a thread that will be started.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `run()` | Waits for an association to be initiated (acts as an association acceptor), then waits for storage or verification commands, storing data sets in Part 10 files in the specified folder, until the association is released or the transport connection closes.

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

      `getPlausibleStandardSOPClassUIDsForModality, getSetOfStorageSOPClasses, isCompositeInstanceQuery, isCompositeInstanceRetrieve, isCompositeInstanceRetrieveWithGet, isCompositeInstanceRetrieveWithMove, isDICONDEImageStorage, isDICOSImageStorage, isDICOSNonImageStorage, isDirectory, isEncapsulatedDocument, isEnhancedMultiframeImageStorage, isEnhancedMultiframeImageWithPlanePositionOrientationAndMeasuresStorage, isImageStorage, isImageWithFrameOfReferenceStorage, isImageWithSynchronizationStorage, isKeyObjectSelectionDocument, isLegacyConvertedEnhancedImageStorage, isMiscellaneousCompositeNonImageStorage, isMiscellaneousNonCompositeStorage, isMultiframeImageStorage, 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, isTiledImageStorage, isTrialRetiredStructuredReport, isVerification, isWaveform`

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

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

- - ### Field Detail

    - #### storedFilePathStrategy

          protected StoredFilePathStrategy storedFilePathStrategy

  - ### Constructor Detail

    - #### StorageSOPClassSCP

          public StorageSOPClassSCP​(java.net.Socket socket,
                                    java.lang.String calledAETitle,
                                    int ourMaximumLengthReceived,
                                    int socketReceiveBufferSize,
                                    int socketSendBufferSize,
                                    java.io.File savedImagesFolder,
                                    StoredFilePathStrategy storedFilePathStrategy,
                                    ReceivedObjectHandler receivedObjectHandler,
                                    AssociationStatusHandler associationStatusHandler,
                                    QueryResponseGeneratorFactory queryResponseGeneratorFactory,
                                    RetrieveResponseGeneratorFactory retrieveResponseGeneratorFactory,
                                    ApplicationEntityMap applicationEntityMap,
                                    PresentationContextSelectionPolicy presentationContextSelectionPolicy,
                                    int debugLevel)
                             throws DicomNetworkException,
                                    DicomException,
                                    java.io.IOException

      Construct an instance of an association acceptor and storage, query, retrieve and verification SCP to be passed to the constructor of a thread that will be started.

      Parameters:
        `socket` - the socket on which a transport connection open indication has been received
        `calledAETitle` - our AE Title
        `ourMaximumLengthReceived` - the maximum PDU length that we will offer to receive
        `socketReceiveBufferSize` - the TCP socket receive buffer size to set (if possible), 0 means leave at the default
        `socketSendBufferSize` - the TCP socket send buffer size to set (if possible), 0 means leave at the default
        `savedImagesFolder` - the folder in which to store received data sets (may be null, to ignore received data for testing)
        `storedFilePathStrategy` - the strategy to use for naming received files and folders
        `receivedObjectHandler` - the handler to call after each data set has been received and stored
        `associationStatusHandler` - the handler to call when the Association is closed
        `queryResponseGeneratorFactory` - a factory to make handlers to generate query responses from a supplied query message
        `retrieveResponseGeneratorFactory` - a factory to make handlers to generate retrieve responses from a supplied retrieve message
        `applicationEntityMap` - a map of application entity titles to presentation addresses
        `presentationContextSelectionPolicy` - which SOP Classes and Transfer Syntaxes to accept and reject
        `debugLevel` - ignored
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`

    - #### StorageSOPClassSCP

          public StorageSOPClassSCP​(java.net.Socket socket,
                                    java.lang.String calledAETitle,
                                    int ourMaximumLengthReceived,
                                    int socketReceiveBufferSize,
                                    int socketSendBufferSize,
                                    java.io.File savedImagesFolder,
                                    StoredFilePathStrategy storedFilePathStrategy,
                                    ReceivedObjectHandler receivedObjectHandler,
                                    AssociationStatusHandler associationStatusHandler,
                                    QueryResponseGeneratorFactory queryResponseGeneratorFactory,
                                    RetrieveResponseGeneratorFactory retrieveResponseGeneratorFactory,
                                    ApplicationEntityMap applicationEntityMap,
                                    PresentationContextSelectionPolicy presentationContextSelectionPolicy)
                             throws DicomNetworkException,
                                    DicomException,
                                    java.io.IOException

      Construct an instance of an association acceptor and storage, query, retrieve and verification SCP to be passed to the constructor of a thread that will be started.

      Parameters:
        `socket` - the socket on which a transport connection open indication has been received
        `calledAETitle` - our AE Title
        `ourMaximumLengthReceived` - the maximum PDU length that we will offer to receive
        `socketReceiveBufferSize` - the TCP socket receive buffer size to set (if possible), 0 means leave at the default
        `socketSendBufferSize` - the TCP socket send buffer size to set (if possible), 0 means leave at the default
        `savedImagesFolder` - the folder in which to store received data sets (may be null, to ignore received data for testing)
        `storedFilePathStrategy` - the strategy to use for naming received files and folders
        `receivedObjectHandler` - the handler to call after each data set has been received and stored
        `associationStatusHandler` - the handler to call when the Association is closed
        `queryResponseGeneratorFactory` - a factory to make handlers to generate query responses from a supplied query message
        `retrieveResponseGeneratorFactory` - a factory to make handlers to generate retrieve responses from a supplied retrieve message
        `applicationEntityMap` - a map of application entity titles to presentation addresses
        `presentationContextSelectionPolicy` - which SOP Classes and Transfer Syntaxes to accept and reject
      Throws:
        `java.io.IOException`
        `DicomException`
        `DicomNetworkException`

  - ### Method Detail

    - #### run

          public void run()

      Waits for an association to be initiated (acts as an association acceptor), then waits for storage or verification commands, storing data sets in Part 10 files in the specified folder, until the association is released or the transport connection closes.

      Specified by:
        `run` in interface `java.lang.Runnable`