224 lines
9.7 KiB
C
224 lines
9.7 KiB
C
|
/*
|
||
|
*
|
||
|
* Copyright (C) 1993-2011, OFFIS e.V.
|
||
|
* All rights reserved. See COPYRIGHT file for details.
|
||
|
*
|
||
|
* This software and supporting documentation were developed by
|
||
|
*
|
||
|
* OFFIS e.V.
|
||
|
* R&D Division Health
|
||
|
* Escherweg 2
|
||
|
* D-26121 Oldenburg, Germany
|
||
|
*
|
||
|
*
|
||
|
* Module: dcmqrdb
|
||
|
*
|
||
|
* Author: Andrew Hewett, Marco Eichelberg
|
||
|
*
|
||
|
* Purpose: class DcmQueryRetrieveDatabaseHandle
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef DCMQRDBA_H
|
||
|
#define DCMQRDBA_H
|
||
|
|
||
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
||
|
|
||
|
#define INCLUDE_CSTDLIB
|
||
|
#define INCLUDE_CSTDIO
|
||
|
#define INCLUDE_UNISTD
|
||
|
#include "dcmtk/ofstd/ofstdinc.h"
|
||
|
#include "dcmtk/ofstd/ofcond.h"
|
||
|
#include "dcmtk/dcmqrdb/qrdefine.h"
|
||
|
|
||
|
class DcmDataset;
|
||
|
class DcmQueryRetrieveDatabaseStatus;
|
||
|
|
||
|
#ifndef MAXPATHLEN
|
||
|
#define MAXPATHLEN 1024
|
||
|
#endif
|
||
|
|
||
|
/** abstract base class for database handles. A database handle maintains
|
||
|
* a connection to a database and encapsulates database support for
|
||
|
* store, find and move/get operations.
|
||
|
*/
|
||
|
class DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveDatabaseHandle
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/// default constructor
|
||
|
DcmQueryRetrieveDatabaseHandle() { }
|
||
|
|
||
|
/** Destructor. Destroys handle, cancels any ongoing
|
||
|
* request if necessary, deletes temporary files used for C-STORE and
|
||
|
* sub-operations of C-MOVE.
|
||
|
*/
|
||
|
virtual ~DcmQueryRetrieveDatabaseHandle();
|
||
|
|
||
|
/** create a filename under which a DICOM object that is currently
|
||
|
* being received through a C-STORE operation can be stored.
|
||
|
* @param SOPClassUID SOP class UID of DICOM instance
|
||
|
* @param SOPInstanceUID SOP instance UID of DICOM instance
|
||
|
* @param newImageFileName file name is returned in this parameter.
|
||
|
* Memory must be provided by the caller and should be at least MAXPATHLEN+1
|
||
|
* characters. The file name generated should be an absolute file name.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition makeNewStoreFileName(
|
||
|
const char *SOPClassUID,
|
||
|
const char *SOPInstanceUID,
|
||
|
char *newImageFileName) = 0;
|
||
|
|
||
|
/** register the given DICOM object, which has been received through a C-STORE
|
||
|
* operation and stored in a file, in the database.
|
||
|
* @param SOPClassUID SOP class UID of DICOM instance
|
||
|
* @param SOPInstanceUID SOP instance UID of DICOM instance
|
||
|
* @param imageFileName file name (full path) of DICOM instance
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
suitable for use with the C-STORE-RSP message is set.
|
||
|
* @param isNew if true, the instance is marked as "new" in the database,
|
||
|
* if such a flag is maintained in the database.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition storeRequest(
|
||
|
const char *SOPClassUID,
|
||
|
const char *SOPInstanceUID,
|
||
|
const char *imageFileName,
|
||
|
DcmQueryRetrieveDatabaseStatus *status,
|
||
|
OFBool isNew = OFTrue ) = 0;
|
||
|
|
||
|
/** initiate FIND operation using the given SOP class UID (which identifies
|
||
|
* the query model) and DICOM dataset containing find request identifiers.
|
||
|
* @param SOPClassUID SOP class UID of query service, identifies Q/R model
|
||
|
* @param findRequestIdentifiers dataset containing request identifiers (i.e., the query)
|
||
|
* The caller retains responsibility for destroying the
|
||
|
* findRequestIdentifiers when no longer needed.
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
* suitable for use with the C-FIND-RSP message is set. Status will be
|
||
|
* PENDING if any FIND responses will be generated or SUCCESS if no FIND responses will
|
||
|
* be generated (SUCCESS indicates the completion of a operation), or
|
||
|
* another status code upon failure.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition startFindRequest(
|
||
|
const char *SOPClassUID,
|
||
|
DcmDataset *findRequestIdentifiers,
|
||
|
DcmQueryRetrieveDatabaseStatus *status) = 0;
|
||
|
|
||
|
/** return the next available FIND response as a new DICOM dataset.
|
||
|
* @param findResponseIdentifiers DICOM dataset returned in this parameter.
|
||
|
* The caller is responsible for destroying the findResponseIdentifiers
|
||
|
* when no longer needed.
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
* suitable for use with the C-FIND-RSP message is set. Status will be
|
||
|
* PENDING if more FIND responses will be generated or SUCCESS if no more
|
||
|
* FIND responses will be generated (SUCCESS indicates the completion of
|
||
|
* a operation), or another status code upon failure.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition nextFindResponse(
|
||
|
DcmDataset **findResponseIdentifiers,
|
||
|
DcmQueryRetrieveDatabaseStatus *status) = 0;
|
||
|
|
||
|
/** cancel the ongoing FIND request, stop and reset every running operation
|
||
|
* associated with this request, delete existing temporary files.
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
* suitable for use with the C-FIND-RSP message is set.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition cancelFindRequest(DcmQueryRetrieveDatabaseStatus *status) = 0;
|
||
|
|
||
|
/** initiate MOVE operation using the given SOP class UID (which identifies
|
||
|
* the retrieve model) and DICOM dataset containing move request identifiers.
|
||
|
* @param SOPClassUID SOP class UID of retrieve service, identifies Q/R model
|
||
|
* @param moveRequestIdentifiers dataset containing request identifiers (i.e., the query)
|
||
|
* The caller retains responsibility for destroying the
|
||
|
* moveRequestIdentifiers when no longer needed.
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
* suitable for use with the C-MOVE-RSP message is set. Status will be
|
||
|
* PENDING if any MOVE responses will be generated or SUCCESS if no MOVE responses will
|
||
|
* be generated (SUCCESS indicates the completion of a operation), or
|
||
|
* another status code upon failure.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition startMoveRequest(
|
||
|
const char *SOPClassUID,
|
||
|
DcmDataset *moveRequestIdentifiers,
|
||
|
DcmQueryRetrieveDatabaseStatus *status) = 0;
|
||
|
|
||
|
/** Constructs the information required for the next available C-MOVE
|
||
|
* sub-operation (the image SOP class UID, SOP Instance UID and an
|
||
|
* imageFileName containing the requested data).
|
||
|
* @param SOPClassUID pointer to string of at least 65 characters into
|
||
|
* which the SOP class UID for the next DICOM object to be transferred is copied.
|
||
|
* @param SOPInstanceUID pointer to string of at least 65 characters into
|
||
|
* which the SOP instance UID for the next DICOM object to be transferred is copied.
|
||
|
* @param imageFileName pointer to string of at least MAXPATHLEN+1 characters into
|
||
|
* which the file path for the next DICOM object to be transferred is copied.
|
||
|
* @param numberOfRemainingSubOperations On return, this parameter will contain
|
||
|
* the number of suboperations still remaining for the request
|
||
|
* (this number is needed by move responses with PENDING status).
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
* suitable for use with the C-MOVE-RSP message is set. Status will be
|
||
|
* PENDING if more MOVE responses will be generated or SUCCESS if no more
|
||
|
* MOVE responses will be generated (SUCCESS indicates the completion of
|
||
|
* a operation), or another status code upon failure.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition nextMoveResponse(
|
||
|
char *SOPClassUID,
|
||
|
char *SOPInstanceUID,
|
||
|
char *imageFileName,
|
||
|
unsigned short *numberOfRemainingSubOperations,
|
||
|
DcmQueryRetrieveDatabaseStatus *status) = 0;
|
||
|
|
||
|
/** cancel the ongoing MOVE request, stop and reset every running operation
|
||
|
* associated with this request, delete existing temporary files.
|
||
|
* @param status pointer to DB status object in which a DIMSE status code
|
||
|
* suitable for use with the C-MOVE-RSP message is set.
|
||
|
* @return EC_Normal upon normal completion, or some other OFCondition code upon failure.
|
||
|
*/
|
||
|
virtual OFCondition cancelMoveRequest(DcmQueryRetrieveDatabaseStatus *status) = 0;
|
||
|
|
||
|
/** Prune invalid records from the database.
|
||
|
* Records referring to non-existant image files are invalid.
|
||
|
*/
|
||
|
virtual OFCondition pruneInvalidRecords() = 0;
|
||
|
|
||
|
/** Configure the DB module to perform (or not perform) checking
|
||
|
* of FIND and MOVE request identifiers. Default is no checking.
|
||
|
* @param checkFind checking for C-FIND parameters
|
||
|
* @param checkMove checking for C-MOVE parameters
|
||
|
*/
|
||
|
virtual void setIdentifierChecking(OFBool checkFind, OFBool checkMove) = 0;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
/** abstract factory class. Instances of this class are able to create database
|
||
|
* handles for a given called application entity title.
|
||
|
*/
|
||
|
class DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveDatabaseHandleFactory
|
||
|
{
|
||
|
public:
|
||
|
/** this method creates a new database handle instance on the heap and returns
|
||
|
* a pointer to it, along with a result that indicates if the instance was
|
||
|
* successfully initialized, i.e. connected to the database
|
||
|
* @param callingAETitle calling aetitle
|
||
|
* @param calledAETitle called aetitle
|
||
|
* @param result result returned in this variable
|
||
|
* @return pointer to database object, must not be NULL if result is EC_Normal.
|
||
|
*/
|
||
|
virtual DcmQueryRetrieveDatabaseHandle *createDBHandle(
|
||
|
const char *callingAETitle,
|
||
|
const char *calledAETitle,
|
||
|
OFCondition& result) const = 0;
|
||
|
|
||
|
/** Virtual Destructor
|
||
|
*/
|
||
|
virtual ~DcmQueryRetrieveDatabaseHandleFactory() {}
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif
|