Class StudyReceiver

java.lang.Object
com.pixelmed.apps.StudyReceiver

public class StudyReceiver extends Object

A class to wait for incoming composite instance storage operations and process when study is complete based on time since last instance received.

External (unsecure) SQL access to the database is possible if the Application.DatabaseServerName property is specified; further details are described in com.pixelmed.database.DatabaseInformationModel; for example:

% java -cp lib/additional/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing --url "jdbc:hsqldb:hsql://localhost/testserverdb"
 

For how to configure the necessary properties file, see:

See Also:
  • Field Details

    • defaultPropertiesFileName

      protected static String defaultPropertiesFileName
    • propertyName_CompletedStudiesFolderName

      protected static String propertyName_CompletedStudiesFolderName
    • propertyName_SleepTimeBetweenPassesToProcessReceivedFiles

      protected static String propertyName_SleepTimeBetweenPassesToProcessReceivedFiles
    • propertyName_IntervalAfterLastInstanceReceivedToWaitBeforeProcessingStudy

      protected static String propertyName_IntervalAfterLastInstanceReceivedToWaitBeforeProcessingStudy
    • defaultCompletedStudiesFolderName

      protected String defaultCompletedStudiesFolderName
    • defaultSleepTimeBetweenPassesToProcessReceivedFiles

      protected String defaultSleepTimeBetweenPassesToProcessReceivedFiles
    • defaultIntervalAfterLastInstanceReceivedToWaitBeforeProcessingStudy

      protected String defaultIntervalAfterLastInstanceReceivedToWaitBeforeProcessingStudy
    • sleepTimeBetweenPassesToProcessReceivedFiles

      protected static int sleepTimeBetweenPassesToProcessReceivedFiles
    • intervalAfterLastInstanceReceivedToWaitBeforeProcessingStudy

      protected static int intervalAfterLastInstanceReceivedToWaitBeforeProcessingStudy
    • properties

      protected Properties properties
    • networkApplicationProperties

      protected NetworkApplicationProperties networkApplicationProperties
    • networkApplicationInformation

      protected NetworkApplicationInformationFederated networkApplicationInformation
    • ourCalledAETitle

      protected String ourCalledAETitle
    • databaseInformationModel

      protected DatabaseInformationModel databaseInformationModel
    • buildDate

      protected String buildDate
    • completedStudiesFolder

      protected File completedStudiesFolder
    • savedImagesFolder

      protected File savedImagesFolder
    • storedFilePathStrategy

      protected StoredFilePathStrategy storedFilePathStrategy
    • studyHasBeenProcessedColumnName

      protected String studyHasBeenProcessedColumnName
    • studyMostRecentInsertionTimeColumnName

      protected String studyMostRecentInsertionTimeColumnName
    • instanceHasBeenProcessedColumnName

      protected String instanceHasBeenProcessedColumnName
    • studyInstanceUIDColumnName

      protected String studyInstanceUIDColumnName
    • sopClassUIDColumnName

      protected String sopClassUIDColumnName
    • instanceLocalFileNameColumnName

      protected String instanceLocalFileNameColumnName
    • instanceLocalFileReferenceTypeColumnName

      protected String instanceLocalFileReferenceTypeColumnName
    • instanceLocalPrimaryKeyColumnName

      protected String instanceLocalPrimaryKeyColumnName
    • seriesLocalPrimaryKeyColumnName

      protected String seriesLocalPrimaryKeyColumnName
    • terminateAfterRelationshipGroup

      protected static final AttributeList.ReadTerminationStrategy terminateAfterRelationshipGroup
  • Constructor Details

  • Method Details

    • getBuildDate

      protected String getBuildDate()

      Get the date the package was built.

      Returns:
      the build date
    • loadProperties

      protected void loadProperties(String propertiesFileName) throws IOException

      Load properties.

      Throws:
      IOException - thrown if properties file is missing
    • renameFileWithHierarchicalPathFromAttributes

      protected String renameFileWithHierarchicalPathFromAttributes(File file, AttributeList list, String hierarchicalFolderName, String duplicatesFolderNamePrefix) throws IOException, DicomException, NoSuchAlgorithmException

      Rename a DICOM file into a folder hierarchy based on its attributes that are already available.

      Called by processStudy() for each file that has been received for a completed study.

      Override this method in a sub-class if you want to override the default folder structure used to store the received files, otherwise creates a folder structure using com.pixelmed.dicom.MoveDicomFilesIntoHierarchy.renameFileWithHierarchicalPathFromAttributes().

      Parameters:
      file - the DICOM file
      list - the attributes of the file (already read in)
      hierarchicalFolderName - where to store the renamed file
      duplicatesFolderNamePrefix - where to store the renamed file if it is a non-identical duplicate of the existing file
      Returns:
      the path to the new file if successful, null if not
      Throws:
      IOException - if an error occurs renaming the files
      DicomException - if there is an error parsing the attribute list
      NoSuchAlgorithmException - if there is an error checking duplicate files contain identical content caused by absence of a hash algorithm
    • doSomethingWithProcessedDicomFile

      protected void doSomethingWithProcessedDicomFile(String processedFileName)

      Do something with the processed DICOM file.

      This method may be implemented in a sub-class to do something useful even if it is only logging to the user interface.

      The default method does nothing.

      This method is called on the WatchDatabaseAndProcessCompleteStudies thread.

      This method does not define any exceptions and hence must handle any errors locally.

      Parameters:
      processedFileName - the path name to a DICOM file
    • processStudy

      protected boolean processStudy(String studyLocalPrimaryKeyValue) throws DicomException, IOException, Exception
      Throws:
      DicomException
      IOException
      Exception
    • processStudyIfComplete

      protected boolean processStudyIfComplete(String studyLocalPrimaryKeyValue) throws DicomException, IOException, Exception
      Throws:
      DicomException
      IOException
      Exception
    • updateStudyMostRecentInsertionTime

      protected void updateStudyMostRecentInsertionTime(String studyInstanceUID, long insertionTime) throws DicomException
      Throws:
      DicomException
    • doSomethingWithReceivedDicomFile

      protected void doSomethingWithReceivedDicomFile(String receivedFileName, String sourceApplicationEntityTitle, String transferSyntaxUID, String sopClassUID)

      Do something with the received DICOM file.

      This method may be implemented in a sub-class to do something useful even if it is only logging to the user interface.

      The default method does nothing.

      This method is called on the ReceivedFileProcessor thread.

      This method does not define any exceptions and hence must handle any errors locally.

      Parameters:
      receivedFileName - the path name to a DICOM file
      sourceApplicationEntityTitle - the Application Entity from which the file was received
      transferSyntaxUID - the Transfer Syntax of the Data Set in the DICOM file
      sopClassUID - the SOP Class of the Data Set in the DICOM file
    • getCompletedStudiesFolderNameCreatingItIfNecessary

      protected File getCompletedStudiesFolderNameCreatingItIfNecessary(String completedStudiesFolderName) throws IOException

      Return the folder, creating it if necessary.

      If not an absolute path, will be sought or created relative to the current user's home directory.

      Returns:
      the folder
      Throws:
      IOException
    • activateStorageSCP

      public void activateStorageSCP() throws DicomException, IOException

      Start or restart DICOM storage listener.

      Shuts down existing listener, if any, so may be used to restart after configuration change.

      Throws:
      DicomException
      IOException
    • shutdownStorageSCP

      public void shutdownStorageSCP()

      Shutdown DICOM storage listener.

    • main

      public static void main(String[] arg)

      Wait for incoming composite instance storage operations and process when study is complete based on time since last instance received.

      Parameters:
      arg - none