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 &
currentDate(
OFString &dateString);
00751
00758
static const OFString &
currentTime(
OFString &timeString);
00759
00768
static const OFString &
currentDateTime(
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