00001 /* 00002 * 00003 * Copyright (C) 2002-2005, OFFIS 00004 * 00005 * This software and supporting documentation were developed by 00006 * 00007 * Kuratorium OFFIS e.V. 00008 * Healthcare Information and Communication Systems 00009 * Escherweg 2 00010 * D-26121 Oldenburg, Germany 00011 * 00012 * THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND OFFIS MAKES NO WARRANTY 00013 * REGARDING THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR 00014 * FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES OR 00015 * ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND 00016 * PERFORMANCE OF THE SOFTWARE IS WITH THE USER. 00017 * 00018 * Module: dcmsr 00019 * 00020 * Author: Joerg Riesmeier 00021 * 00022 * Purpose: 00023 * classes: DSRSOPInstanceReferenceList 00024 * - InstanceStruct, SeriesStruct, StudyStruct 00025 * 00026 * Last Update: $Author: meichel $ 00027 * Update Date: $Date: 2005/12/08 16:05:18 $ 00028 * CVS/RCS Revision: $Revision: 1.9 $ 00029 * Status: $State: Exp $ 00030 * 00031 * CVS/RCS Log at end of file 00032 * 00033 */ 00034 00035 00036 #ifndef DSRSOPRF_H 00037 #define DSRSOPRF_H 00038 00039 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ 00040 00041 #include "dcmtk/ofstd/oflist.h" 00042 #include "dcmtk/ofstd/ofstring.h" 00043 #include "dcmtk/ofstd/ofconsol.h" 00044 #include "dcmtk/ofstd/ofcond.h" 00045 00046 #include "dcmtk/dcmdata/dcitem.h" 00047 #include "dcmtk/dcmdata/dctagkey.h" 00048 00049 #include "dcmtk/dcmsr/dsrtypes.h" 00050 00051 00052 /*---------------------* 00053 * class declaration * 00054 *---------------------*/ 00055 00058 class DSRSOPInstanceReferenceList 00059 : public DSRTypes 00060 { 00061 00062 public: 00063 00066 struct InstanceStruct 00067 { 00072 InstanceStruct(const OFString &sopClassUID, 00073 const OFString &instanceUID); 00074 00076 const OFString SOPClassUID; 00078 const OFString InstanceUID; 00079 }; 00080 00083 struct SeriesStruct 00084 { 00088 SeriesStruct(const OFString &seriesUID); 00089 00092 ~SeriesStruct(); 00093 00097 size_t getNumberOfInstances() const; 00098 00104 OFCondition read(DcmItem &dataset, 00105 OFConsole *logStream); 00106 00112 OFCondition write(DcmItem &dataset, 00113 OFConsole *logStream) const; 00114 00120 OFCondition readXML(const DSRXMLDocument &doc, 00121 DSRXMLCursor cursor); 00122 00128 OFCondition writeXML(ostream &stream, 00129 const size_t flags = 0) const; 00130 00135 InstanceStruct *gotoInstance(const OFString &instanceUID); 00136 00141 OFCondition gotoFirstItem(); 00142 00147 OFCondition gotoNextItem(); 00148 00155 OFCondition addItem(const OFString &sopClassUID, 00156 const OFString &instanceUID); 00157 00162 OFCondition removeItem(); 00163 00168 OFBool containsExtendedCharacters(); 00169 00171 const OFString SeriesUID; 00173 OFString RetrieveAETitle; 00175 OFString StorageMediaFileSetID; 00177 OFString StorageMediaFileSetUID; 00178 00180 OFList<InstanceStruct *> InstanceList; 00182 OFListIterator(InstanceStruct *) Iterator; 00183 }; 00184 00187 struct StudyStruct 00188 { 00192 StudyStruct(const OFString &studyUID); 00193 00196 ~StudyStruct(); 00197 00201 size_t getNumberOfInstances() const; 00202 00208 OFCondition read(DcmItem &dataset, 00209 OFConsole *logStream); 00210 00216 OFCondition write(DcmItem &dataset, 00217 OFConsole *logStream) const; 00218 00224 OFCondition readXML(const DSRXMLDocument &doc, 00225 DSRXMLCursor cursor); 00226 00232 OFCondition writeXML(ostream &stream, 00233 const size_t flags = 0) const; 00234 00239 SeriesStruct *gotoSeries(const OFString &seriesUID); 00240 00245 InstanceStruct *gotoInstance(const OFString &instanceUID); 00246 00251 OFCondition gotoFirstItem(); 00252 00258 OFCondition gotoNextItem(); 00259 00267 OFCondition addItem(const OFString &seriesUID, 00268 const OFString &sopClassUID, 00269 const OFString &instanceUID); 00270 00275 OFCondition removeItem(); 00276 00281 void removeIncompleteItems(); 00282 00287 OFBool containsExtendedCharacters(); 00288 00290 const OFString StudyUID; 00291 00293 OFList<SeriesStruct *> SeriesList; 00295 OFListIterator(SeriesStruct *) Iterator; 00296 }; 00297 00298 00302 DSRSOPInstanceReferenceList(const DcmTagKey &sequence); 00303 00306 ~DSRSOPInstanceReferenceList(); 00307 00310 void clear(); 00311 00315 OFBool empty() const; 00316 00320 size_t getNumberOfInstances() const; 00321 00331 OFCondition read(DcmItem &dataset, 00332 OFConsole *logStream); 00333 00340 OFCondition write(DcmItem &dataset, 00341 OFConsole *logStream) const; 00342 00353 OFCondition readXML(const DSRXMLDocument &doc, 00354 DSRXMLCursor cursor, 00355 const size_t flags); 00356 00362 OFCondition writeXML(ostream &stream, 00363 const size_t flags = 0) const; 00364 00375 OFCondition addItem(const OFString &studyUID, 00376 const OFString &seriesUID, 00377 const OFString &sopClassUID, 00378 const OFString &instanceUID); 00379 00387 OFCondition addItem(DcmItem &dataset); 00388 00393 OFCondition removeItem(); 00394 00401 OFCondition removeItem(const OFString &sopClassUID, 00402 const OFString &instanceUID); 00403 00411 OFCondition removeItem(const OFString &studyUID, 00412 const OFString &seriesUID, 00413 const OFString &instanceUID); 00414 00420 OFCondition gotoItem(const OFString &sopClassUID, 00421 const OFString &instanceUID); 00422 00429 OFCondition gotoItem(const OFString &studyUID, 00430 const OFString &seriesUID, 00431 const OFString &instanceUID); 00432 00439 OFCondition gotoFirstItem(); 00440 00449 OFCondition gotoNextItem(); 00450 00455 const OFString &getStudyInstanceUID(OFString &stringValue) const; 00456 00461 const OFString &getSeriesInstanceUID(OFString &stringValue) const; 00462 00467 const OFString &getSOPInstanceUID(OFString &stringValue) const; 00468 00473 const OFString &getSOPClassUID(OFString &stringValue) const; 00474 00480 const OFString &getRetrieveAETitle(OFString &stringValue) const; 00481 00486 const OFString &getStorageMediaFileSetID(OFString &stringValue) const; 00487 00492 const OFString &getStorageMediaFileSetUID(OFString &stringValue) const; 00493 00499 OFCondition setRetrieveAETitle(const OFString &value); 00500 00505 OFCondition setStorageMediaFileSetID(const OFString &value); 00506 00511 OFCondition setStorageMediaFileSetUID(const OFString &value); 00512 00517 OFBool containsExtendedCharacters(); 00518 00519 protected: 00520 00525 StudyStruct *gotoStudy(const OFString &studyUID); 00526 00530 StudyStruct *getCurrentStudy() const; 00531 00535 SeriesStruct *getCurrentSeries() const; 00536 00540 InstanceStruct *getCurrentInstance() const; 00541 00546 void removeIncompleteItems(); 00547 00548 00549 private: 00550 00552 const DcmTagKey SequenceTag; 00553 00555 OFList<StudyStruct *> StudyList; 00557 OFListIterator(StudyStruct *) Iterator; 00558 00559 // default constructor - not implemented! 00560 DSRSOPInstanceReferenceList(); 00561 // copy constructor - not implemented! 00562 DSRSOPInstanceReferenceList(const DSRSOPInstanceReferenceList &); 00563 // assignment operator - not implemented! 00564 DSRSOPInstanceReferenceList &operator=(const DSRSOPInstanceReferenceList &); 00565 }; 00566 00567 00568 #endif 00569 00570 00571 /* 00572 * CVS/RCS Log: 00573 * $Log: dsrsoprf.h,v $ 00574 * Revision 1.9 2005/12/08 16:05:18 meichel 00575 * Changed include path schema for all DCMTK header files 00576 * 00577 * Revision 1.8 2005/07/27 16:33:39 joergr 00578 * Added method that allows to add a DICOM dataset to the list of references. 00579 * 00580 * Revision 1.7 2004/11/22 16:39:09 meichel 00581 * Added method that checks if the SR document contains non-ASCII characters 00582 * in any of the strings affected by SpecificCharacterSet. 00583 * 00584 * Revision 1.6 2003/08/07 18:01:42 joergr 00585 * Removed libxml dependency from header files. 00586 * 00587 * Revision 1.5 2003/08/07 12:50:12 joergr 00588 * Added readXML functionality. 00589 * Renamed parameters/variables "string" to avoid name clash with STL class. 00590 * Enhanced class DSRSOPInstanceReferenceList: empty/incomplete items (e.g. 00591 * series with no instances or studies with no series) are automatically 00592 * removed from the list. 00593 * 00594 * Revision 1.4 2002/08/30 14:16:59 joergr 00595 * Removed "friend" statements from class declaration and moved sub-classes to 00596 * the "public" section (required for Sun CC 6). 00597 * 00598 * Revision 1.3 2002/05/14 08:16:07 joergr 00599 * Added removeItem() methods. 00600 * 00601 * Revision 1.2 2002/05/07 14:04:44 joergr 00602 * Added "friend" statements to class declaration (required for MSVC). 00603 * 00604 * Revision 1.1 2002/05/07 12:49:31 joergr 00605 * Added support for the Current Requested Procedure Evidence Sequence and the 00606 * Pertinent Other Evidence Sequence to the dcmsr module. 00607 * 00608 * 00609 */