00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef I2DOUTPL_H
00030 #define I2DOUTPL_H
00031
00032 #include "dcmtk/config/osconfig.h"
00033 #include "dcmtk/dcmdata/dcdatset.h"
00034 #include "dcmtk/dcmdata/dcelem.h"
00035 #include "dcmtk/oflog/oflog.h"
00036
00037
00038 OFLogger DCM_dcmdataLibi2dGetLogger();
00039
00040 #define DCMDATA_LIBI2D_TRACE(msg) OFLOG_TRACE(DCM_dcmdataLibi2dGetLogger(), msg)
00041 #define DCMDATA_LIBI2D_DEBUG(msg) OFLOG_DEBUG(DCM_dcmdataLibi2dGetLogger(), msg)
00042 #define DCMDATA_LIBI2D_INFO(msg) OFLOG_INFO(DCM_dcmdataLibi2dGetLogger(), msg)
00043 #define DCMDATA_LIBI2D_WARN(msg) OFLOG_WARN(DCM_dcmdataLibi2dGetLogger(), msg)
00044 #define DCMDATA_LIBI2D_ERROR(msg) OFLOG_ERROR(DCM_dcmdataLibi2dGetLogger(), msg)
00045 #define DCMDATA_LIBI2D_FATAL(msg) OFLOG_FATAL(DCM_dcmdataLibi2dGetLogger(), msg)
00046
00047
00048 class I2DOutputPlug
00049 {
00050
00051 public:
00052
00056 I2DOutputPlug() : m_doAttribChecking(OFTrue), m_inventMissingType2Attribs(OFTrue),
00057 m_inventMissingType1Attribs(OFTrue)
00058 {};
00059
00063 virtual OFString ident() =0;
00064
00069 virtual void supportedSOPClassUIDs(OFList<OFString> suppSOPs) =0;
00070
00075 virtual OFCondition convert(DcmDataset &dataset) const =0;
00076
00082 virtual OFString isValid(DcmDataset& dataset) const = 0;
00083
00087 virtual ~I2DOutputPlug() {};
00088
00099 virtual void setValidityChecking(OFBool doChecks,
00100 OFBool insertMissingType2 = OFTrue,
00101 OFBool inventMissingType1 = OFTrue)
00102 {
00103 m_doAttribChecking = doChecks;
00104 m_inventMissingType2Attribs = insertMissingType2;
00105 m_inventMissingType1Attribs = inventMissingType1;
00106 };
00107
00108 protected:
00109
00118 virtual OFString checkAndInventType1Attrib(const DcmTagKey& key,
00119 DcmDataset* targetDset,
00120 const OFString& defaultValue ="") const
00121 {
00122 OFBool exists = targetDset->tagExists(key);
00123 if (!exists && !m_inventMissingType1Attribs)
00124 {
00125 OFString err = "I2DOutputPlug: Missing type 1 attribute: "; err += DcmTag(key).getTagName(); err += "\n";
00126 return err;
00127 }
00128 DcmElement *elem;
00129 OFCondition cond = targetDset->findAndGetElement(key, elem);
00130 if (cond.bad() || !elem || (elem->getLength() == 0))
00131 {
00132 if (!m_inventMissingType1Attribs)
00133 {
00134 OFString err;
00135 err += "I2DOutputPlug: Empty value for type 1 attribute: ";
00136 err += DcmTag(key).getTagName();
00137 err += "\n";
00138 return err;
00139 }
00140
00141 elem = NULL;
00142 DcmTag tag(key); OFBool wasError = OFFalse;
00143
00144 if ( newDicomElement(elem, tag).good())
00145 {
00146 if (targetDset->insert(elem, OFTrue).good())
00147 {
00148 if (elem->putString(defaultValue.c_str()).good())
00149 {
00150 DCMDATA_LIBI2D_DEBUG("I2DOutputPlug: Inserting missing type 1 attribute: " << tag.getTagName() << " with value " << defaultValue);
00151 } else wasError = OFTrue;
00152 } else wasError = OFTrue;
00153 } else wasError = OFTrue;
00154 if (wasError)
00155 {
00156 OFString err = "Unable to insert type 1 attribute ";
00157 err += tag.getTagName(); err += " with value "; err += defaultValue; err += "\n";
00158 return err;
00159 }
00160 }
00161 return "";
00162 };
00163
00164
00171 virtual OFString checkAndInventType2Attrib(const DcmTagKey& key,
00172 DcmDataset* targetDset,
00173 const OFString& defaultValue ="") const
00174 {
00175 OFString err;
00176 OFBool exists = targetDset->tagExists(key);
00177 if (!exists)
00178 {
00179 if (m_inventMissingType2Attribs)
00180 {
00181
00182 DcmElement *elem = NULL;
00183 DcmTag tag(key); OFBool wasError = OFFalse;
00184
00185 if ( newDicomElement(elem, tag).good())
00186 {
00187 if (targetDset->insert(elem, OFTrue).good())
00188 {
00189 OFCondition result;
00190 if (!defaultValue.empty())
00191 {
00192 result = elem->putString(defaultValue.c_str());
00193 }
00194 if (result.good())
00195 {
00196 DCMDATA_LIBI2D_DEBUG("I2DOutputPlug: Inserting missing type 2 attribute: " << tag.getTagName() << " with value " << (defaultValue.empty() ? "<empty>" : defaultValue));
00197 } else wasError = OFTrue;
00198 } else wasError = OFTrue;
00199 } else wasError = OFTrue;
00200 if (wasError)
00201 {
00202 err += "Unable to insert type 2 attribute "; err += tag.getTagName(); err += " with value "; err += defaultValue; err += "\n";
00203 }
00204 }
00205 else
00206 {
00207 err = "Image2Dcm: Missing type 2 attribute: "; err += DcmTag(key).getTagName(); err += "\n";
00208 return err;
00209 }
00210 }
00211 return err;
00212 };
00213
00216 OFBool m_doAttribChecking;
00217
00220 OFBool m_inventMissingType2Attribs;
00221
00224 OFBool m_inventMissingType1Attribs;
00225
00226 };
00227
00228 #endif // #ifndef I2DOUTPL_H
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276