/* * * Copyright (C) 2015, Open Connections GmbH * All rights reserved. See COPYRIGHT file for details. * * This software and supporting documentation are maintained by * * OFFIS e.V. * R&D Division Health * Escherweg 2 * D-26121 Oldenburg, Germany * * * Module: dcmiod * * Author: Michael Onken * * Purpose: Class representing IODs by exposing common DICOM module attributes * */ #ifndef IODCOMMN_H #define IODCOMMN_H #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmiod/iodrules.h" #include "dcmtk/dcmiod/modpatient.h" #include "dcmtk/dcmiod/modpatientstudy.h" #include "dcmtk/dcmiod/modgeneralstudy.h" #include "dcmtk/dcmiod/modequipment.h" #include "dcmtk/dcmiod/modgeneralseries.h" #include "dcmtk/dcmiod/modfor.h" #include "dcmtk/dcmiod/modsopcommon.h" #include "dcmtk/dcmiod/modcommoninstanceref.h" /** Interface class to those modules and data attributes are common for many * DICOM IODs. The class offers a dedicated API for getting and settings those * attributes. Modules included: Patient Module, General Study Module, General * Equipment Module, General Series Module, Frame of Reference Module, SOP * Common Module. */ class DCMTK_DCMIOD_EXPORT DcmIODCommon { public: /** Constructor */ DcmIODCommon(); /** Get rules handled by this IOD * @return The rules */ OFshared_ptr getRules(); /** Get item managed by this IOD * @return The item */ OFshared_ptr getData(); /** Get Patient Module * @return Reference to Patient Module */ IODPatientModule& getPatient(); /** Get Patient Study Module * @return Reference to Patient Study Module */ IODPatientStudyModule& getPatientStudy(); /** Get General Study Module * @return Reference to General Study Module */ IODGeneralStudyModule& getStudy(); /** Get General Equipment Module * @return Reference to General Equipment Module */ IODGeneralEquipmentModule& getEquipment(); /** Get Series Module * @return Reference to General Series Module */ IODGeneralSeriesModule& getSeries(); /** Get Frame of Reference Module * @return Reference to Frame of Reference Module */ IODFoRModule& getFrameOfReference(); /** Get SOP Common Module * @return Reference to SOP Common Module */ IODSOPCommonModule& getSOPCommon(); /** Get Common Instance Reference Module * @return Common Instance Reference Module */ IODCommonInstanceReferenceModule& getCommonInstanceReference(); /** Destructor */ virtual ~DcmIODCommon(); /** Clear (removes) all attributes handled by the modules of this IOD. * IOD Rules are not reset. */ virtual void clearData(); /** Create new study. * After generating a new Study Instance UID the method createNewSeries() is * called, i.e.\ also a new Series Instance UID and SOP instance UID are * generated. This is a requirement of the DICOM standard. All other * study-related attributes from the study-level modules managed by this class * are cleared (as well as Series and Instance level attributes). * @param clearEquipment If OFTrue (default), also the equipment information is * cleared (General Equipment Module)) */ virtual void createNewStudy(const OFBool clearEquipment = OFTrue); /** Create a new series. * After generating a new Series Instance UID the method * createNewSOPInstance() is called, i.e.\ Series-related attributes managed * by the series-level modules of this class are cleared, as well as * instance-level data. * @param clearFoR If OFTrue (default), also the frame of reference is * cleared (FoR Module) */ virtual void createNewSeries(const OFBool clearFoR = OFTrue); /** Create a new SOP instance. * Generate a new SOP Instance UID and set the Instance Creation Date/Time * to the current date and time. * It could be used explicitly from the calling application if a new UID * should be created (this is the case if the Study Instance UID or Series * Instance UID has changed as well as any other attribute on the instance * level, e.g.\ image pixel data). Also clears other instance related data. */ virtual void createNewSOPInstance(); /** Make sure that the IOD contains a SOP Instance, Series Instance and Study * Instance UID. They are created if empty. Invalid UIDs are corrected if * desired. */ virtual void ensureInstanceUIDs(const OFBool correctInvalid = OFFalse); /** Read data into this class. * Please note that the current content is also deleted if the reading * process fails. If the log stream is set and valid the reason for any * error might be obtained from the error/warning output. The reading * process will ignore missing attributes or values as possible in order * to read as as much as possible. * @param dataset DICOM dataset from which the document should be read * @return EC_Normal if successful, an error code otherwise */ virtual OFCondition read(DcmItem &dataset); /** Import common module attributes from dataset but only read Patient, Study, * Series and/or Frame of Reference level portions. The current content * is not deleted before reading. If the log stream is set and valid the * reason for any error might be obtained from the error/warning output. * @param dataset Reference to DICOM dataset from which the document * should be read * @param readPatient Read Patient-level information if OFTrue * @param readStudy Read Study-level information if OFTrue, including * equipment module * @param readFoR Read Frame of Reference information if OFTrue. See * also readSeries parameter. * @param readSeries Read Series-level information if OFTrue, always * includes Frame of Reference, i.e.\ readFoR is * considered to be OFTrue * @return EC_Normal if successful, an error code otherwise */ virtual OFCondition import(DcmItem& dataset, OFBool readPatient, OFBool readStudy, OFBool readFoR = OFFalse, OFBool readSeries = OFFalse); /** Write the attributes managed by this class to DICOM dataset. * @param dataset Reference to DICOM dataset to which the current document * should be written. The dataset is not cleared * before writing to it. * @return EC_Normal if successful, an error code otherwise */ virtual OFCondition write(DcmItem &dataset); private: /// The data hold by this class (shared with modules below) OFshared_ptr m_Item; /// The rules hold by this class (shared with modules below) OFshared_ptr m_Rules; /// Patient Module IODPatientModule m_Patient; /// Patient Study Module IODPatientStudyModule m_PatientStudy; /// General Study Module IODGeneralStudyModule m_Study; /// General Equipment Module IODGeneralEquipmentModule m_Equipment; /// General Series Module IODGeneralSeriesModule m_Series; /// Frame of Reference Module IODFoRModule m_FrameOfReference; /// SOP Common Module IODSOPCommonModule m_SOPCommon; /// Common Instance Reference Module IODCommonInstanceReferenceModule m_CommonInstanceReferenceModule; /// Collects all modules of this class for convenience (iteration) OFVector m_Modules; }; #endif // IODCOMMN_H