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 "osconfig.h"
00039
00040 #include "dctk.h"
00041
00042 #include "ofstream.h"
00043 #include "oftypes.h"
00044 #include "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_useDcmsrNamespace;
00269
00271 static const size_t XF_addSchemaReference;
00272
00274 static const size_t XF_validateSchema;
00275
00277 static const size_t XF_enableLibxmlErrorOutput;
00278
00280 static const size_t XF_encodeEverythingAsAttribute;
00282
00283
00289
00291 static const size_t PF_printItemPosition;
00292
00294 static const size_t PF_shortenLongItemValues;
00295
00297 static const size_t PF_printSOPInstanceUID;
00298
00300 static const size_t PF_printConceptNameCodes;
00301
00303 static const size_t PF_printNoDocumentHeader;
00304
00306 static const size_t PF_printTemplateIdentification;
00307
00309 static const size_t PF_printAllCodes;
00311
00312
00313
00314
00317 enum E_DocumentType
00318 {
00320 DT_invalid,
00322 DT_unknown = DT_invalid,
00324 DT_BasicTextSR,
00326 DT_EnhancedSR,
00328 DT_ComprehensiveSR,
00330 DT_KeyObjectDoc,
00332 DT_MammographyCadSR,
00334 DT_ChestCadSR,
00336 DT_ProcedureLog,
00338 DT_last = DT_ProcedureLog
00339 };
00340
00343 enum E_RelationshipType
00344 {
00346 RT_invalid,
00348 RT_unknown = RT_invalid,
00350 RT_isRoot,
00352 RT_contains,
00354 RT_hasObsContext,
00356 RT_hasAcqContext,
00358 RT_hasConceptMod,
00360 RT_hasProperties,
00362 RT_inferredFrom,
00364 RT_selectedFrom,
00366 RT_last = RT_selectedFrom
00367 };
00368
00371 enum E_ValueType
00372 {
00374 VT_invalid,
00376 VT_unknown = VT_invalid,
00378 VT_Text,
00380 VT_Code,
00382 VT_Num,
00384 VT_DateTime,
00386 VT_Date,
00388 VT_Time,
00390 VT_UIDRef,
00392 VT_PName,
00394 VT_SCoord,
00396 VT_TCoord,
00398 VT_Composite,
00400 VT_Image,
00402 VT_Waveform,
00404 VT_Container,
00406 VT_byReference,
00408 VT_last = VT_byReference
00409 };
00410
00413 enum E_GraphicType
00414 {
00416 GT_invalid,
00418 GT_unknown = GT_invalid,
00420 GT_Point,
00422 GT_Multipoint,
00424 GT_Polyline,
00426 GT_Circle,
00428 GT_Ellipse,
00430 GT_last = GT_Ellipse
00431 };
00432
00435 enum E_TemporalRangeType
00436 {
00438 TRT_invalid,
00440 TRT_unknown = TRT_invalid,
00442 TRT_Point,
00444 TRT_Multipoint,
00446 TRT_Segment,
00448 TRT_Multisegment,
00450 TRT_Begin,
00452 TRT_End,
00454 TRT_last = TRT_End
00455 };
00456
00459 enum E_ContinuityOfContent
00460 {
00462 COC_invalid,
00464 COC_Separate,
00466 COC_Continuous,
00468 COC_last = COC_Continuous
00469 };
00470
00473 enum E_CompletionFlag
00474 {
00476 CF_invalid,
00478 CF_Partial,
00480 CF_Complete,
00482 CF_last = CF_Complete
00483 };
00484
00487 enum E_VerificationFlag
00488 {
00490 VF_invalid,
00492 VF_Unverified,
00494 VF_Verified,
00496 VF_last = VF_Verified
00497 };
00498
00501 enum E_CharacterSet
00502 {
00504 CS_invalid,
00506 CS_unknown = CS_invalid,
00508 CS_ASCII,
00510 CS_Latin1,
00512 CS_Latin2,
00514 CS_Latin3,
00516 CS_Latin4,
00518 CS_Latin5,
00520 CS_Cyrillic,
00522 CS_Arabic,
00524 CS_Greek,
00526 CS_Hebrew,
00528 CS_Thai,
00530 CS_Japanese,
00532 CS_last = CS_Japanese
00533 };
00534
00537 enum E_AddMode
00538 {
00540 AM_afterCurrent,
00542 AM_beforeCurrent,
00544 AM_belowCurrent
00545 };
00546
00547
00548
00549
00554 static const char *documentTypeToSOPClassUID(const E_DocumentType documentType);
00555
00560 static const char *documentTypeToModality(const E_DocumentType documentType);
00561
00567 static const char *documentTypeToReadableName(const E_DocumentType documentType);
00568
00575 static const char *documentTypeToDocumentTitle(const E_DocumentType documentType,
00576 OFString &documentTitle);
00577
00582 static const char *relationshipTypeToDefinedTerm(const E_RelationshipType relationshipType);
00583
00589 static const char *relationshipTypeToReadableName(const E_RelationshipType relationshipType);
00590
00595 static const char *valueTypeToDefinedTerm(const E_ValueType valueType);
00596
00601 static const char *valueTypeToXMLTagName(const E_ValueType valueType);
00602
00608 static const char *valueTypeToReadableName(const E_ValueType valueType);
00609
00614 static const char *graphicTypeToEnumeratedValue(const E_GraphicType graphicType);
00615
00621 static const char *graphicTypeToReadableName(const E_GraphicType graphicType);
00622
00627 static const char *temporalRangeTypeToEnumeratedValue(const E_TemporalRangeType temporalRangeType);
00628
00634 static const char *temporalRangeTypeToReadableName(const E_TemporalRangeType temporalRangeType);
00635
00640 static const char *continuityOfContentToEnumeratedValue(const E_ContinuityOfContent continuityOfContent);
00641
00646 static const char *completionFlagToEnumeratedValue(const E_CompletionFlag completionFlag);
00647
00652 static const char *verificationFlagToEnumeratedValue(const E_VerificationFlag verificationFlag);
00653
00658 static const char *characterSetToDefinedTerm(const E_CharacterSet characterSet);
00659
00665 static const char *characterSetToHTMLName(const E_CharacterSet characterSet);
00666
00672 static const char *characterSetToXMLName(const E_CharacterSet characterSet);
00673
00678 static E_DocumentType sopClassUIDToDocumentType(const OFString &sopClassUID);
00679
00684 static E_RelationshipType definedTermToRelationshipType(const OFString &definedTerm);
00685
00690 static E_ValueType definedTermToValueType(const OFString &definedTerm);
00691
00696 static E_ValueType xmlTagNameToValueType(const OFString &xmlTagName);
00697
00702 static E_GraphicType enumeratedValueToGraphicType(const OFString &enumeratedValue);
00703
00708 static E_TemporalRangeType enumeratedValueToTemporalRangeType(const OFString &enumeratedValue);
00709
00714 static E_ContinuityOfContent enumeratedValueToContinuityOfContent(const OFString &enumeratedValue);
00715
00720 static E_CompletionFlag enumeratedValueToCompletionFlag(const OFString &enumeratedValue);
00721
00726 static E_VerificationFlag enumeratedValueToVerificationFlag(const OFString &enumeratedValue);
00727
00732 static E_CharacterSet definedTermToCharacterSet(const OFString &definedTerm);
00733
00734
00735
00736
00743 static OFBool isDocumentTypeSupported(const E_DocumentType documentType);
00744
00750 static const OFString ¤tDate(OFString &dateString);
00751
00758 static const OFString ¤tTime(OFString &timeString);
00759
00768 static const OFString ¤tDateTime(OFString &dateTimeString);
00769
00776 static const OFString &dicomToReadableDate(const OFString &dicomDate,
00777 OFString &readableDate);
00778
00786 static const OFString &dicomToReadableTime(const OFString &dicomTime,
00787 OFString &readableTime);
00788
00796 static const OFString &dicomToReadableDateTime(const OFString &dicomDateTime,
00797 OFString &readableDateTime);
00798
00808 static const OFString &dicomToReadablePersonName(const OFString &dicomPersonName,
00809 OFString &readablePersonName);
00810
00822 static const OFString &dicomToXMLPersonName(const OFString &dicomPersonName,
00823 OFString &xmlPersonName,
00824 const OFBool writeEmptyValue = OFFalse);
00825
00831 static const char *numberToString(const size_t number,
00832 char *stringValue);
00833
00838 static size_t stringToNumber(const char *stringValue);
00839
00847 static const OFString &convertToPrintString(const OFString &sourceString,
00848 OFString &printString);
00849
00867 static const OFString &convertToMarkupString(const OFString &sourceString,
00868 OFString &markupString,
00869 const OFBool convertNonASCII = OFFalse,
00870 const OFBool newlineAllowed = OFFalse,
00871 const OFBool xmlMode = OFFalse);
00872
00881 static OFBool checkForValidUIDFormat(const OFString &stringValue);
00882
00888 static DSRIODConstraintChecker *createIODConstraintChecker(const E_DocumentType documentType);
00889
00897 static DSRDocumentTreeNode *createDocumentTreeNode(const E_RelationshipType relationshipType,
00898 const E_ValueType valueType);
00899
00900
00901
00902
00910 static OFCondition addElementToDataset(OFCondition &result,
00911 DcmItem &dataset,
00912 DcmElement *delem);
00913
00919 static void removeAttributeFromSequence(DcmSequenceOfItems &sequence,
00920 const DcmTagKey &tagKey);
00921
00929 static OFCondition getElementFromDataset(DcmItem &dataset,
00930 DcmElement &delem);
00931
00941 static OFCondition getSequenceFromDataset(DcmItem &dataset,
00942 DcmSequenceOfItems &dseq);
00943
00948 static const char *getStringValueFromElement(const DcmElement &delem);
00949
00955 static const OFString &getStringValueFromElement(const DcmElement &delem,
00956 OFString &stringValue);
00957
00963 static const OFString &getPrintStringFromElement(const DcmElement &delem,
00964 OFString &stringValue);
00965
00972 static const OFString &getMarkupStringFromElement(const DcmElement &delem,
00973 OFString &stringValue,
00974 const OFBool convertNonASCII = OFFalse);
00975
00984 static OFCondition getStringValueFromDataset(DcmItem &dataset,
00985 const DcmTagKey &tagKey,
00986 OFString &stringValue);
00987
00996 static OFCondition putStringValueToDataset(DcmItem &dataset,
00997 const DcmTag &tag,
00998 const OFString &stringValue,
00999 const OFBool allowEmpty = OFTrue);
01000
01013 static OFBool checkElementValue(DcmElement &delem,
01014 const OFString &vm,
01015 const OFString &type,
01016 OFConsole *stream = NULL,
01017 const OFCondition &searchCond = EC_Normal,
01018 const char *moduleName = NULL);
01019
01033 static OFCondition getAndCheckElementFromDataset(DcmItem &dataset,
01034 DcmElement &delem,
01035 const OFString &vm,
01036 const OFString &type,
01037 OFConsole *stream = NULL,
01038 const char *moduleName = NULL);
01039
01055 static OFCondition getAndCheckStringValueFromDataset(DcmItem &dataset,
01056 const DcmTagKey &tagKey,
01057 OFString &stringValue,
01058 const OFString &vm,
01059 const OFString &type,
01060 OFConsole *stream = NULL,
01061 const char *moduleName = NULL);
01062
01063
01064
01069 static void printMessage(OFConsole *stream,
01070 const char *message);
01071
01077 static void printWarningMessage(OFConsole *stream,
01078 const char *message);
01079
01085 static void printErrorMessage(OFConsole *stream,
01086 const char *message);
01087
01095 static void printInvalidContentItemMessage(OFConsole *stream,
01096 const char *action,
01097 const DSRDocumentTreeNode *node,
01098 const char *location = NULL);
01099
01108 static void printContentItemErrorMessage(OFConsole *stream,
01109 const char *action,
01110 const OFCondition &result,
01111 const DSRDocumentTreeNode *node,
01112 const char *location = NULL);
01113
01120 static void printUnknownValueWarningMessage(OFConsole *stream,
01121 const char *valueName,
01122 const char *readValue = NULL,
01123 const char *action = "Reading");
01124
01133 static OFBool writeStringValueToXML(ostream &stream,
01134 const OFString &stringValue,
01135 const OFString &tagName,
01136 const OFBool writeEmptyValue = OFFalse);
01137
01147 static OFBool writeStringFromElementToXML(ostream &stream,
01148 DcmElement &delem,
01149 const OFString &tagName,
01150 const OFBool writeEmptyValue = OFFalse);
01151
01162 static size_t createHTMLAnnexEntry(ostream &docStream,
01163 ostream &annexStream,
01164 const OFString &referenceText,
01165 size_t &annexNumber);
01166
01176 static size_t createHTMLFootnote(ostream &docStream,
01177 ostream &footnoteStream,
01178 size_t &footnoteNumber,
01179 const size_t nodeID);
01180
01188 static OFCondition appendStream(ostream &mainStream,
01189 OFOStringStream &tempStream,
01190 const char *heading = NULL);
01191 };
01192
01193
01194 #endif
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214
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