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
00030
00031
00032
00033
00034
00035 #ifndef DSRTYPES_H
00036 #define DSRTYPES_H
00037
00038 #include "dcmtk/config/osconfig.h"
00039
00040 #include "dcmtk/dcmdata/dctk.h"
00041
00042 #include "dcmtk/ofstd/ofstream.h"
00043 #include "dcmtk/ofstd/oftypes.h"
00044 #include "dcmtk/ofstd/ofcond.h"
00045
00046
00047
00048
00049
00050
00051
00052 #define OFFIS_CODING_SCHEME_DESIGNATOR "99_OFFIS_DCMTK"
00053
00054 #define OFFIS_CODING_SCHEME_NAME "OFFIS DCMTK Coding Scheme"
00055
00056 #define OFFIS_RESPONSIBLE_ORGANIZATION "Kuratorium OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany"
00057
00058
00059 #define HTML_HYPERLINK_PREFIX_FOR_CGI "http://localhost/dicom.cgi"
00060
00061 #define DCMTK_INTERNET_URL "http://dicom.offis.de/dcmtk"
00062
00063
00064 #define DCMSR_XML_NAMESPACE_URI "http://dicom.offis.de/dcmsr"
00065
00066 #define DCMSR_XML_XSD_FILE "dsr2xml.xsd"
00067
00068 #define XML_SCHEMA_INSTANCE_URI "http://www.w3.org/2001/XMLSchema-instance"
00069
00070
00071
00072
00073
00074
00075 class DSRXMLCursor;
00076 class DSRXMLDocument;
00077 class DSRDocumentTreeNode;
00078 class DSRIODConstraintChecker;
00079
00080
00081
00082
00083
00084
00090
00092 extern const OFCondition SR_EC_UnknownDocumentType;
00093
00095 extern const OFCondition SR_EC_InvalidDocument;
00096
00098 extern const OFCondition SR_EC_InvalidDocumentTree;
00099
00101 extern const OFCondition SR_EC_MandatoryAttributeMissing;
00102
00104 extern const OFCondition SR_EC_InvalidValue;
00105
00107 extern const OFCondition SR_EC_UnsupportedValue;
00108
00110 extern const OFCondition SR_EC_UnknownValueType;
00111
00113 extern const OFCondition SR_EC_UnknownRelationshipType;
00114
00116 extern const OFCondition SR_EC_InvalidByValueRelationship;
00117
00119 extern const OFCondition SR_EC_InvalidByReferenceRelationship;
00120
00122 extern const OFCondition SR_EC_SOPInstanceNotFound;
00123
00125 extern const OFCondition SR_EC_DifferentSOPClassesForAnInstance;
00126
00128 extern const OFCondition SR_EC_CodingSchemeNotFound;
00129
00131 extern const OFCondition SR_EC_CorruptedXMLStructure;
00133
00134
00135
00136
00137
00138
00144 class DSRTypes
00145 {
00146
00147 public:
00148
00149
00150
00156
00158 static const size_t RF_readDigitalSignatures;
00159
00161 static const size_t RF_ignoreRelationshipConstraints;
00162
00164 static const size_t RF_ignoreContentItemErrors;
00165
00167 static const size_t RF_skipInvalidContentItems;
00168
00170 static const size_t RF_verboseDebugMode;
00171
00173 static const size_t RF_showCurrentlyProcessedItem;
00175
00176
00183
00185 static const size_t HF_neverExpandChildrenInline;
00186
00188 static const size_t HF_renderInlineCodes;
00189
00191 static const size_t HF_renderConceptNameCodes;
00192
00194 static const size_t HF_renderNumericUnitCodes;
00195
00197 static const size_t HF_useCodeMeaningAsUnit;
00198
00200 static const size_t HF_renderPatientTitle;
00201
00203 static const size_t HF_renderNoDocumentHeader;
00204
00206 static const size_t HF_renderDcmtkFootnote;
00207
00209 static const size_t HF_renderFullData;
00210
00212 static const size_t HF_copyStyleSheetContent;
00213
00215 static const size_t HF_version32Compatibility;
00216
00218 static const size_t HF_addDocumentTypeReference;
00219
00221 static const size_t HF_renderItemsSeparately;
00222
00224 static const size_t HF_renderItemInline;
00225
00227 static const size_t HF_currentlyInsideAnnex;
00228
00230 static const size_t HF_createFootnoteReferences;
00231
00233 static const size_t HF_convertNonASCIICharacters;
00234
00236 static const size_t HF_renderAllCodes;
00237
00239 static const size_t HF_internalUseOnly;
00241
00242
00248
00250 static const size_t XF_writeEmptyTags;
00251
00253 static const size_t XF_writeTemplateIdentification;
00254
00256 static const size_t XF_alwaysWriteItemIdentifier;
00257
00259 static const size_t XF_codeComponentsAsAttribute;
00260
00262 static const size_t XF_relationshipTypeAsAttribute;
00263
00265 static const size_t XF_valueTypeAsAttribute;
00266
00268 static const size_t XF_templateIdentifierAsAttribute;
00269
00271 static const size_t XF_useDcmsrNamespace;
00272
00274 static const size_t XF_addSchemaReference;
00275
00277 static const size_t XF_validateSchema;
00278
00280 static const size_t XF_enableLibxmlErrorOutput;
00281
00283 static const size_t XF_templateElementEnclosesItems;
00284
00286 static const size_t XF_encodeEverythingAsAttribute;
00288
00289
00295
00297 static const size_t PF_printItemPosition;
00298
00300 static const size_t PF_shortenLongItemValues;
00301
00303 static const size_t PF_printSOPInstanceUID;
00304
00306 static const size_t PF_printConceptNameCodes;
00307
00309 static const size_t PF_printNoDocumentHeader;
00310
00312 static const size_t PF_printTemplateIdentification;
00313
00315 static const size_t PF_printAllCodes;
00317
00318
00319
00320
00323 enum E_DocumentType
00324 {
00326 DT_invalid,
00328 DT_unknown = DT_invalid,
00330 DT_BasicTextSR,
00332 DT_EnhancedSR,
00334 DT_ComprehensiveSR,
00336 DT_KeyObjectDoc,
00338 DT_MammographyCadSR,
00340 DT_ChestCadSR,
00342 DT_ProcedureLog,
00344 DT_XRayRadiationDoseSR,
00346 DT_last = DT_XRayRadiationDoseSR
00347 };
00348
00351 enum E_RelationshipType
00352 {
00354 RT_invalid,
00356 RT_unknown = RT_invalid,
00358 RT_isRoot,
00360 RT_contains,
00362 RT_hasObsContext,
00364 RT_hasAcqContext,
00366 RT_hasConceptMod,
00368 RT_hasProperties,
00370 RT_inferredFrom,
00372 RT_selectedFrom,
00374 RT_last = RT_selectedFrom
00375 };
00376
00379 enum E_ValueType
00380 {
00382 VT_invalid,
00384 VT_unknown = VT_invalid,
00386 VT_Text,
00388 VT_Code,
00390 VT_Num,
00392 VT_DateTime,
00394 VT_Date,
00396 VT_Time,
00398 VT_UIDRef,
00400 VT_PName,
00402 VT_SCoord,
00404 VT_TCoord,
00406 VT_Composite,
00408 VT_Image,
00410 VT_Waveform,
00412 VT_Container,
00414 VT_byReference,
00416 VT_last = VT_byReference
00417 };
00418
00421 enum E_GraphicType
00422 {
00424 GT_invalid,
00426 GT_unknown = GT_invalid,
00428 GT_Point,
00430 GT_Multipoint,
00432 GT_Polyline,
00434 GT_Circle,
00436 GT_Ellipse,
00438 GT_last = GT_Ellipse
00439 };
00440
00443 enum E_TemporalRangeType
00444 {
00446 TRT_invalid,
00448 TRT_unknown = TRT_invalid,
00450 TRT_Point,
00452 TRT_Multipoint,
00454 TRT_Segment,
00456 TRT_Multisegment,
00458 TRT_Begin,
00460 TRT_End,
00462 TRT_last = TRT_End
00463 };
00464
00467 enum E_ContinuityOfContent
00468 {
00470 COC_invalid,
00472 COC_Separate,
00474 COC_Continuous,
00476 COC_last = COC_Continuous
00477 };
00478
00481 enum E_CompletionFlag
00482 {
00484 CF_invalid,
00486 CF_Partial,
00488 CF_Complete,
00490 CF_last = CF_Complete
00491 };
00492
00495 enum E_VerificationFlag
00496 {
00498 VF_invalid,
00500 VF_Unverified,
00502 VF_Verified,
00504 VF_last = VF_Verified
00505 };
00506
00509 enum E_CharacterSet
00510 {
00512 CS_invalid,
00514 CS_unknown = CS_invalid,
00516 CS_ASCII,
00518 CS_Latin1,
00520 CS_Latin2,
00522 CS_Latin3,
00524 CS_Latin4,
00526 CS_Cyrillic,
00528 CS_Arabic,
00530 CS_Greek,
00532 CS_Hebrew,
00534 CS_Latin5,
00536 CS_Japanese,
00538 CS_Thai,
00539
00540 CS_UTF8,
00542 CS_last = CS_UTF8
00543 };
00544
00547 enum E_AddMode
00548 {
00550 AM_afterCurrent,
00552 AM_beforeCurrent,
00554 AM_belowCurrent
00555 };
00556
00557
00558
00559
00564 static const char *documentTypeToSOPClassUID(const E_DocumentType documentType);
00565
00570 static const char *documentTypeToModality(const E_DocumentType documentType);
00571
00577 static const char *documentTypeToReadableName(const E_DocumentType documentType);
00578
00585 static const char *documentTypeToDocumentTitle(const E_DocumentType documentType,
00586 OFString &documentTitle);
00587
00592 static const char *relationshipTypeToDefinedTerm(const E_RelationshipType relationshipType);
00593
00599 static const char *relationshipTypeToReadableName(const E_RelationshipType relationshipType);
00600
00605 static const char *valueTypeToDefinedTerm(const E_ValueType valueType);
00606
00611 static const char *valueTypeToXMLTagName(const E_ValueType valueType);
00612
00618 static const char *valueTypeToReadableName(const E_ValueType valueType);
00619
00624 static const char *graphicTypeToEnumeratedValue(const E_GraphicType graphicType);
00625
00631 static const char *graphicTypeToReadableName(const E_GraphicType graphicType);
00632
00637 static const char *temporalRangeTypeToEnumeratedValue(const E_TemporalRangeType temporalRangeType);
00638
00644 static const char *temporalRangeTypeToReadableName(const E_TemporalRangeType temporalRangeType);
00645
00650 static const char *continuityOfContentToEnumeratedValue(const E_ContinuityOfContent continuityOfContent);
00651
00656 static const char *completionFlagToEnumeratedValue(const E_CompletionFlag completionFlag);
00657
00662 static const char *verificationFlagToEnumeratedValue(const E_VerificationFlag verificationFlag);
00663
00668 static const char *characterSetToDefinedTerm(const E_CharacterSet characterSet);
00669
00675 static const char *characterSetToHTMLName(const E_CharacterSet characterSet);
00676
00682 static const char *characterSetToXMLName(const E_CharacterSet characterSet);
00683
00688 static E_DocumentType sopClassUIDToDocumentType(const OFString &sopClassUID);
00689
00694 static E_RelationshipType definedTermToRelationshipType(const OFString &definedTerm);
00695
00700 static E_ValueType definedTermToValueType(const OFString &definedTerm);
00701
00706 static E_ValueType xmlTagNameToValueType(const OFString &xmlTagName);
00707
00712 static E_GraphicType enumeratedValueToGraphicType(const OFString &enumeratedValue);
00713
00718 static E_TemporalRangeType enumeratedValueToTemporalRangeType(const OFString &enumeratedValue);
00719
00724 static E_ContinuityOfContent enumeratedValueToContinuityOfContent(const OFString &enumeratedValue);
00725
00730 static E_CompletionFlag enumeratedValueToCompletionFlag(const OFString &enumeratedValue);
00731
00736 static E_VerificationFlag enumeratedValueToVerificationFlag(const OFString &enumeratedValue);
00737
00742 static E_CharacterSet definedTermToCharacterSet(const OFString &definedTerm);
00743
00744
00745
00746
00753 static OFBool isDocumentTypeSupported(const E_DocumentType documentType);
00754
00760 static const OFString ¤tDate(OFString &dateString);
00761
00768 static const OFString ¤tTime(OFString &timeString);
00769
00778 static const OFString ¤tDateTime(OFString &dateTimeString);
00779
00786 static const OFString &dicomToReadableDate(const OFString &dicomDate,
00787 OFString &readableDate);
00788
00796 static const OFString &dicomToReadableTime(const OFString &dicomTime,
00797 OFString &readableTime);
00798
00806 static const OFString &dicomToReadableDateTime(const OFString &dicomDateTime,
00807 OFString &readableDateTime);
00808
00818 static const OFString &dicomToReadablePersonName(const OFString &dicomPersonName,
00819 OFString &readablePersonName);
00820
00832 static const OFString &dicomToXMLPersonName(const OFString &dicomPersonName,
00833 OFString &xmlPersonName,
00834 const OFBool writeEmptyValue = OFFalse);
00835
00841 static const char *numberToString(const size_t number,
00842 char *stringValue);
00843
00848 static size_t stringToNumber(const char *stringValue);
00849
00857 static const OFString &convertToPrintString(const OFString &sourceString,
00858 OFString &printString);
00859
00877 static const OFString &convertToMarkupString(const OFString &sourceString,
00878 OFString &markupString,
00879 const OFBool convertNonASCII = OFFalse,
00880 const OFBool newlineAllowed = OFFalse,
00881 const OFBool xmlMode = OFFalse);
00882
00891 static OFBool checkForValidUIDFormat(const OFString &stringValue);
00892
00898 static DSRIODConstraintChecker *createIODConstraintChecker(const E_DocumentType documentType);
00899
00907 static DSRDocumentTreeNode *createDocumentTreeNode(const E_RelationshipType relationshipType,
00908 const E_ValueType valueType);
00909
00910
00914 static OFBool elementContainsExtendedCharacters(DcmElement &elem);
00915
00919 static OFBool stringContainsExtendedCharacters(const OFString &s);
00920
00921
00922
00930 static OFCondition addElementToDataset(OFCondition &result,
00931 DcmItem &dataset,
00932 DcmElement *delem);
00933
00939 static void removeAttributeFromSequence(DcmSequenceOfItems &sequence,
00940 const DcmTagKey &tagKey);
00941
00949 static OFCondition getElementFromDataset(DcmItem &dataset,
00950 DcmElement &delem);
00951
00961 static OFCondition getSequenceFromDataset(DcmItem &dataset,
00962 DcmSequenceOfItems &dseq);
00963
00968 static const char *getStringValueFromElement(const DcmElement &delem);
00969
00975 static const OFString &getStringValueFromElement(const DcmElement &delem,
00976 OFString &stringValue);
00977
00983 static const OFString &getPrintStringFromElement(const DcmElement &delem,
00984 OFString &stringValue);
00985
00992 static const OFString &getMarkupStringFromElement(const DcmElement &delem,
00993 OFString &stringValue,
00994 const OFBool convertNonASCII = OFFalse);
00995
01004 static OFCondition getStringValueFromDataset(DcmItem &dataset,
01005 const DcmTagKey &tagKey,
01006 OFString &stringValue);
01007
01016 static OFCondition putStringValueToDataset(DcmItem &dataset,
01017 const DcmTag &tag,
01018 const OFString &stringValue,
01019 const OFBool allowEmpty = OFTrue);
01020
01033 static OFBool checkElementValue(DcmElement &delem,
01034 const OFString &vm,
01035 const OFString &type,
01036 OFConsole *stream = NULL,
01037 const OFCondition &searchCond = EC_Normal,
01038 const char *moduleName = NULL);
01039
01053 static OFCondition getAndCheckElementFromDataset(DcmItem &dataset,
01054 DcmElement &delem,
01055 const OFString &vm,
01056 const OFString &type,
01057 OFConsole *stream = NULL,
01058 const char *moduleName = NULL);
01059
01075 static OFCondition getAndCheckStringValueFromDataset(DcmItem &dataset,
01076 const DcmTagKey &tagKey,
01077 OFString &stringValue,
01078 const OFString &vm,
01079 const OFString &type,
01080 OFConsole *stream = NULL,
01081 const char *moduleName = NULL);
01082
01083
01084
01089 static void printMessage(OFConsole *stream,
01090 const char *message);
01091
01097 static void printWarningMessage(OFConsole *stream,
01098 const char *message);
01099
01105 static void printErrorMessage(OFConsole *stream,
01106 const char *message);
01107
01115 static void printInvalidContentItemMessage(OFConsole *stream,
01116 const char *action,
01117 const DSRDocumentTreeNode *node,
01118 const char *location = NULL);
01119
01128 static void printContentItemErrorMessage(OFConsole *stream,
01129 const char *action,
01130 const OFCondition &result,
01131 const DSRDocumentTreeNode *node,
01132 const char *location = NULL);
01133
01140 static void printUnknownValueWarningMessage(OFConsole *stream,
01141 const char *valueName,
01142 const char *readValue = NULL,
01143 const char *action = "Reading");
01144
01153 static OFBool writeStringValueToXML(ostream &stream,
01154 const OFString &stringValue,
01155 const OFString &tagName,
01156 const OFBool writeEmptyValue = OFFalse);
01157
01167 static OFBool writeStringFromElementToXML(ostream &stream,
01168 DcmElement &delem,
01169 const OFString &tagName,
01170 const OFBool writeEmptyValue = OFFalse);
01171
01182 static size_t createHTMLAnnexEntry(ostream &docStream,
01183 ostream &annexStream,
01184 const OFString &referenceText,
01185 size_t &annexNumber);
01186
01196 static size_t createHTMLFootnote(ostream &docStream,
01197 ostream &footnoteStream,
01198 size_t &footnoteNumber,
01199 const size_t nodeID);
01200
01208 static OFCondition appendStream(ostream &mainStream,
01209 OFOStringStream &tempStream,
01210 const char *heading = NULL);
01211 };
01212
01213
01214 #endif
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343
01344
01345
01346
01347
01348
01349
01350
01351
01352
01353
01354
01355
01356
01357
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369
01370
01371
01372
01373
01374
01375
01376
01377
01378
01379
01380
01381
01382
01383
01384
01385
01386
01387
01388
01389
01390
01391
01392
01393
01394
01395
01396