00001 /* 00002 * 00003 * Copyright (C) 2002-2010, OFFIS e.V. 00004 * All rights reserved. See COPYRIGHT file for details. 00005 * 00006 * This software and supporting documentation were developed by 00007 * 00008 * OFFIS e.V. 00009 * R&D Division Health 00010 * Escherweg 2 00011 * D-26121 Oldenburg, Germany 00012 * 00013 * 00014 * Module: dcmsr 00015 * 00016 * Author: Joerg Riesmeier 00017 * 00018 * Purpose: 00019 * classes: DSRSOPInstanceReferenceList 00020 * - InstanceStruct, SeriesStruct, StudyStruct 00021 * 00022 * Last Update: $Author: joergr $ 00023 * Update Date: $Date: 2010-10-14 13:16:33 $ 00024 * CVS/RCS Revision: $Revision: 1.15 $ 00025 * Status: $State: Exp $ 00026 * 00027 * CVS/RCS Log at end of file 00028 * 00029 */ 00030 00031 00032 #ifndef DSRSOPRF_H 00033 #define DSRSOPRF_H 00034 00035 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ 00036 00037 #include "dcmtk/ofstd/oflist.h" 00038 #include "dcmtk/ofstd/ofstring.h" 00039 #include "dcmtk/ofstd/ofcond.h" 00040 00041 #include "dcmtk/dcmdata/dcitem.h" 00042 #include "dcmtk/dcmdata/dctagkey.h" 00043 00044 #include "dcmtk/dcmsr/dsrtypes.h" 00045 00046 00047 /*---------------------* 00048 * class declaration * 00049 *---------------------*/ 00050 00053 class DSRSOPInstanceReferenceList 00054 : public DSRTypes 00055 { 00056 00057 public: 00058 00061 struct InstanceStruct 00062 { 00067 InstanceStruct(const OFString &sopClassUID, 00068 const OFString &instanceUID); 00069 00071 const OFString SOPClassUID; 00073 const OFString InstanceUID; 00074 }; 00075 00078 struct SeriesStruct 00079 { 00083 SeriesStruct(const OFString &seriesUID); 00084 00087 ~SeriesStruct(); 00088 00092 size_t getNumberOfInstances() const; 00093 00098 OFCondition read(DcmItem &dataset); 00099 00104 OFCondition write(DcmItem &dataset) const; 00105 00111 OFCondition readXML(const DSRXMLDocument &doc, 00112 DSRXMLCursor cursor); 00113 00119 OFCondition writeXML(STD_NAMESPACE ostream &stream, 00120 const size_t flags = 0) const; 00121 00126 InstanceStruct *gotoInstance(const OFString &instanceUID); 00127 00132 OFCondition gotoFirstItem(); 00133 00138 OFCondition gotoNextItem(); 00139 00146 OFCondition addItem(const OFString &sopClassUID, 00147 const OFString &instanceUID); 00148 00153 OFCondition removeItem(); 00154 00156 const OFString SeriesUID; 00158 OFString RetrieveAETitle; 00160 OFString StorageMediaFileSetID; 00162 OFString StorageMediaFileSetUID; 00163 00165 OFList<InstanceStruct *> InstanceList; 00167 OFListIterator(InstanceStruct *) Iterator; 00168 }; 00169 00172 struct StudyStruct 00173 { 00177 StudyStruct(const OFString &studyUID); 00178 00181 ~StudyStruct(); 00182 00186 size_t getNumberOfInstances() const; 00187 00192 OFCondition read(DcmItem &dataset); 00193 00198 OFCondition write(DcmItem &dataset) const; 00199 00205 OFCondition readXML(const DSRXMLDocument &doc, 00206 DSRXMLCursor cursor); 00207 00213 OFCondition writeXML(STD_NAMESPACE ostream &stream, 00214 const size_t flags = 0) const; 00215 00220 SeriesStruct *gotoSeries(const OFString &seriesUID); 00221 00226 InstanceStruct *gotoInstance(const OFString &instanceUID); 00227 00232 OFCondition gotoFirstItem(); 00233 00239 OFCondition gotoNextItem(); 00240 00248 OFCondition addItem(const OFString &seriesUID, 00249 const OFString &sopClassUID, 00250 const OFString &instanceUID); 00251 00256 OFCondition removeItem(); 00257 00262 void removeIncompleteItems(); 00263 00265 const OFString StudyUID; 00266 00268 OFList<SeriesStruct *> SeriesList; 00270 OFListIterator(SeriesStruct *) Iterator; 00271 }; 00272 00273 00277 DSRSOPInstanceReferenceList(const DcmTagKey &sequence); 00278 00281 ~DSRSOPInstanceReferenceList(); 00282 00285 void clear(); 00286 00290 OFBool empty() const; 00291 00295 size_t getNumberOfInstances() const; 00296 00305 OFCondition read(DcmItem &dataset); 00306 00312 OFCondition write(DcmItem &dataset) const; 00313 00324 OFCondition readXML(const DSRXMLDocument &doc, 00325 DSRXMLCursor cursor, 00326 const size_t flags); 00327 00333 OFCondition writeXML(STD_NAMESPACE ostream &stream, 00334 const size_t flags = 0) const; 00335 00346 OFCondition addItem(const OFString &studyUID, 00347 const OFString &seriesUID, 00348 const OFString &sopClassUID, 00349 const OFString &instanceUID); 00350 00358 OFCondition addItem(DcmItem &dataset); 00359 00364 OFCondition removeItem(); 00365 00372 OFCondition removeItem(const OFString &sopClassUID, 00373 const OFString &instanceUID); 00374 00382 OFCondition removeItem(const OFString &studyUID, 00383 const OFString &seriesUID, 00384 const OFString &instanceUID); 00385 00391 OFCondition gotoItem(const OFString &sopClassUID, 00392 const OFString &instanceUID); 00393 00400 OFCondition gotoItem(const OFString &studyUID, 00401 const OFString &seriesUID, 00402 const OFString &instanceUID); 00403 00410 OFCondition gotoFirstItem(); 00411 00420 OFCondition gotoNextItem(); 00421 00426 const OFString &getStudyInstanceUID(OFString &stringValue) const; 00427 00432 const OFString &getSeriesInstanceUID(OFString &stringValue) const; 00433 00438 const OFString &getSOPInstanceUID(OFString &stringValue) const; 00439 00444 const OFString &getSOPClassUID(OFString &stringValue) const; 00445 00451 const OFString &getRetrieveAETitle(OFString &stringValue) const; 00452 00457 const OFString &getStorageMediaFileSetID(OFString &stringValue) const; 00458 00463 const OFString &getStorageMediaFileSetUID(OFString &stringValue) const; 00464 00470 OFCondition setRetrieveAETitle(const OFString &value); 00471 00476 OFCondition setStorageMediaFileSetID(const OFString &value); 00477 00482 OFCondition setStorageMediaFileSetUID(const OFString &value); 00483 00484 00485 protected: 00486 00491 StudyStruct *gotoStudy(const OFString &studyUID); 00492 00496 StudyStruct *getCurrentStudy() const; 00497 00501 SeriesStruct *getCurrentSeries() const; 00502 00506 InstanceStruct *getCurrentInstance() const; 00507 00512 void removeIncompleteItems(); 00513 00514 00515 private: 00516 00518 const DcmTagKey SequenceTag; 00519 00521 OFList<StudyStruct *> StudyList; 00523 OFListIterator(StudyStruct *) Iterator; 00524 00525 // default constructor - not implemented! 00526 DSRSOPInstanceReferenceList(); 00527 // copy constructor - not implemented! 00528 DSRSOPInstanceReferenceList(const DSRSOPInstanceReferenceList &); 00529 // assignment operator - not implemented! 00530 DSRSOPInstanceReferenceList &operator=(const DSRSOPInstanceReferenceList &); 00531 }; 00532 00533 00534 #endif 00535 00536 00537 /* 00538 * CVS/RCS Log: 00539 * $Log: dsrsoprf.h,v $ 00540 * Revision 1.15 2010-10-14 13:16:33 joergr 00541 * Updated copyright header. Added reference to COPYRIGHT file. 00542 * 00543 * Revision 1.14 2010-02-22 11:39:55 uli 00544 * Remove some unneeded includes. 00545 * 00546 * Revision 1.13 2009-10-13 14:57:50 uli 00547 * Switched to logging mechanism provided by the "new" oflog module. 00548 * 00549 * Revision 1.12 2007-11-15 16:33:19 joergr 00550 * Fixed coding style to be more consistent. 00551 * 00552 * Revision 1.11 2006/08/15 16:40:03 meichel 00553 * Updated the code in module dcmsr to correctly compile when 00554 * all standard C++ classes remain in namespace std. 00555 * 00556 * Revision 1.10 2006/05/11 09:18:21 joergr 00557 * Moved containsExtendedCharacters() from dcmsr to dcmdata module. 00558 * 00559 * Revision 1.9 2005/12/08 16:05:18 meichel 00560 * Changed include path schema for all DCMTK header files 00561 * 00562 * Revision 1.8 2005/07/27 16:33:39 joergr 00563 * Added method that allows to add a DICOM dataset to the list of references. 00564 * 00565 * Revision 1.7 2004/11/22 16:39:09 meichel 00566 * Added method that checks if the SR document contains non-ASCII characters 00567 * in any of the strings affected by SpecificCharacterSet. 00568 * 00569 * Revision 1.6 2003/08/07 18:01:42 joergr 00570 * Removed libxml dependency from header files. 00571 * 00572 * Revision 1.5 2003/08/07 12:50:12 joergr 00573 * Added readXML functionality. 00574 * Renamed parameters/variables "string" to avoid name clash with STL class. 00575 * Enhanced class DSRSOPInstanceReferenceList: empty/incomplete items (e.g. 00576 * series with no instances or studies with no series) are automatically 00577 * removed from the list. 00578 * 00579 * Revision 1.4 2002/08/30 14:16:59 joergr 00580 * Removed "friend" statements from class declaration and moved sub-classes to 00581 * the "public" section (required for Sun CC 6). 00582 * 00583 * Revision 1.3 2002/05/14 08:16:07 joergr 00584 * Added removeItem() methods. 00585 * 00586 * Revision 1.2 2002/05/07 14:04:44 joergr 00587 * Added "friend" statements to class declaration (required for MSVC). 00588 * 00589 * Revision 1.1 2002/05/07 12:49:31 joergr 00590 * Added support for the Current Requested Procedure Evidence Sequence and the 00591 * Pertinent Other Evidence Sequence to the dcmsr module. 00592 * 00593 * 00594 */