/usr/include/dcmtk/dcmwlm/wldsfs.h is in libdcmtk-dev 3.6.2-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | /*
*
* Copyright (C) 1996-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: dcmwlm
*
* Author: Thomas Wilkens
*
* Purpose: Class for connecting to a file-based data source.
*
*/
#ifndef WlmDataSourceFileSystem_h
#define WlmDataSourceFileSystem_h
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmwlm/wlds.h"
#include "dcmtk/dcmwlm/wlfsim.h"
//class WlmFileSystemInteractionManager;
class DcmItem;
class DcmDataset;
class OFCondition;
class DcmElement;
class DcmItem;
/** This class encapsulates data structures and operations for connecting to a file-based
* data source in the framework of the DICOM basic worklist management service.
*/
class DCMTK_DCMWLM_EXPORT WlmDataSourceFileSystem : public WlmDataSource
{
protected:
/// manager for file system interaction
WlmFileSystemInteractionManager fileSystemInteractionManager;
/// path to database files
OFString dfPath;
/// indicates if wl-files which are lacking return type 1 attributes or information in such attributes shall be rejected or not
OFBool enableRejectionOfIncompleteWlFiles;
/// handle to the read lock file
int handleToReadLockFile;
/** This function sets a read lock on the LOCKFILE in the directory
* that is specified through dfPath and calledApplicationEntityTitle.
* @return true in case the read lock has been set successfully, false otherwise.
*/
OFBool SetReadlock();
/** This function releases a read lock on the LOCKFILE in the given directory.
* @return true in case the read lock has been released successfully, false otherwise.
*/
OFBool ReleaseReadlock();
/** This function takes care of handling a certain non-sequence element whithin
* the structure of a certain result dataset. This function assumes that all
* elements in the result dataset are supported. In detail, a value for the
* current element with regard to the currently processed matching record will
* be requested from the fileSystemInteractionManager, and this value will be
* set in the element.
* @param element Pointer to the currently processed element.
* @param idx Index of the matching record (identifies this record).
*/
void HandleNonSequenceElementInResultDataset( DcmElement *element, unsigned long idx );
/** This function takes care of handling a certain sequence element within the structure
* of a certain result dataset. On the basis of the matching record from the data source,
* this function will add items and values for all elements in these items to the current
* sequence element in the result dataset. This function assumes that all elements in the
* result dataset are supported. In case the current sequence element contains no items or
* more than one item, this element will be left unchanged.
* @param element Pointer to the currently processed element.
* @param idx Index of the matching record (identifies this record).
*/
void HandleSequenceElementInResultDataset( DcmElement *element, unsigned long idx );
/** Protected undefined copy-constructor. Shall never be called.
* @param Src Source object.
*/
WlmDataSourceFileSystem( const WlmDataSourceFileSystem &Src );
/** Protected undefined operator=. Shall never be called.
* @param Src Source object.
* @return Reference to this.
*/
WlmDataSourceFileSystem &operator=( const WlmDataSourceFileSystem &Src );
public:
/** default constructor.
*/
WlmDataSourceFileSystem();
/** destructor
*/
~WlmDataSourceFileSystem();
/** Connects to the data source.
* @return Indicates if the connection was established successfully.
*/
OFCondition ConnectToDataSource();
/** Disconnects from the data source.
* @return Indicates if the disconnection was completed successfully.
*/
OFCondition DisconnectFromDataSource();
/** Set value in member variable.
* @param value The value to set.
*/
void SetDfPath( const OFString& value );
/** Set value in member variable.
* @param value The value to set.
*/
void SetEnableRejectionOfIncompleteWlFiles( OFBool value );
/** Checks if the called application entity title is supported. This function expects
* that the called application entity title was made available for this instance through
* WlmDataSource::SetCalledApplicationEntityTitle(). If this is not the case, OFFalse
* will be returned.
* @return OFTrue, if the called application entity title is supported;
* OFFalse, if the called application entity title is not supported or it is not given.
*/
OFBool IsCalledApplicationEntityTitleSupported();
/** This function performs a check on two attributes in the given dataset. At two different places
* in the definition of the DICOM worklist management service, a description attribute and a code
* sequence attribute with a return type of 1C are mentioned, and the condition specifies that
* either the description attribute or the code sequence attribute or both shall be supported by
* an SCP. (I am talking about RequestedProcedureDescription vs. RequestedProcedureCodeSequence
* and ScheduledProcedureStepDescription vs. ScheduledProtocolCodeSequence.) In both cases, this
* implementation actually supports both, the description _and_ the code sequence attributes.
* In cases where the description attribute is actually empty or the code sequence attribute
* is actually empty or contains exactly one item with an empty CodeValue and an empty
* CodingSchemeDesignator, we want to remove the empty attribute from the dataset. This is what
* this function does. (Please note, that this function will always only delete one of the two,
* and this function will start checking the sequence attribute.
* @param dataset Dataset in which the consistency of the two attributes shall be checked.
* @param descriptionTagKey DcmTagKey of the description attribute which shall be checked.
* @param codeSequenceTagKey DcmTagKey of the codeSequence attribute which shall be checked.
*/
void HandleExistentButEmptyDescriptionAndCodeSequenceAttributes( DcmItem *dataset, const DcmTagKey &descriptionTagKey, const DcmTagKey &codeSequenceTagKey );
/** This function performs a check on a sequence attribute in the given dataset. At two different places
* in the definition of the DICOM worklist management service, a sequence attribute with a return type
* of 2 is mentioned containing two 1C attributes in its item; the condition of the two 1C attributes
* specifies that in case a sequence item is present, then these two attributes must be existent and
* must contain a value. (I am talking about ReferencedStudySequence and ReferencedPatientSequence.)
* In cases where the sequence attribute contains exactly one item with an empty ReferencedSOPClass
* and an empty ReferencedSOPInstance, we want to remove the item from the sequence. This is what
* this function does.
* @param dataset Dataset in which the consistency of the sequence attribute shall be checked.
* @param sequenceTagKey DcmTagKey of the sequence attribute which shall be checked.
*/
void HandleExistentButEmptyReferencedStudyOrPatientSequenceAttributes( DcmDataset *dataset, const DcmTagKey &sequenceTagKey );
/** Based on the search mask which was passed, this function determines all the records in the
* worklist database files which match the values of matching key attributes in the search mask.
* For each matching record, a DcmDataset structure is generated which will later be
* returned to the SCU as a result of query. The DcmDataset structures for all matching
* records will be stored in the protected member variable matchingDatasets.
* @param findRequestIdentifiers Contains the search mask.
* @return A WlmDataSourceStatusType value denoting the following:
* WLM_SUCCESS: No matching records found;
* WLM_PENDING: Matching records found, all return keys supported by this application;
* WLM_PENDING_WARNING: Matching records found, not all return keys supported by this application;
* WLM_FAILED_IDENTIFIER_DOES_NOT_MATCH_SOP_CLASS: Error in the search mask encountered.
*/
WlmDataSourceStatusType StartFindRequest( const DcmDataset &findRequestIdentifiers );
/** This function will return the next dataset that matches the given search mask, if
* there is one more resulting dataset to return. In such a case, rstatus will be set
* to WLM_PENDING or WLM_PENDING_WARNING, depending on if an unsupported key attribute
* was encountered in the search mask or not. If there are no more datasets that match
* the search mask, this function will return an empty dataset and WLM_SUCCESS in rstatus.
* @param rStatus A value of type WlmDataSourceStatusType that can be used to
* decide if there are still elements that have to be returned.
* @return The next dataset that matches the given search mask, or an empty dataset if
* there are no more matching datasets in the worklist database files.
*/
DcmDataset *NextFindResponse( WlmDataSourceStatusType &rStatus );
};
#endif
|