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 DSRDOCTN_H
00036 #define DSRDOCTN_H
00037
00038 #include "dcmtk/config/osconfig.h"
00039
00040 #include "dcmtk/dcmsr/dsrtree.h"
00041 #include "dcmtk/dcmsr/dsrcodvl.h"
00042 #include "dcmtk/dcmdata/dcitem.h"
00043
00044
00045
00046
00047
00048
00049 class DSRIODConstraintChecker;
00050
00051
00052
00053
00054
00055
00058 class DSRDocumentTreeNode
00059 : public DSRTreeNode
00060 {
00061
00062 friend class DSRContentItem;
00063
00064 public:
00065
00076 DSRDocumentTreeNode(const E_RelationshipType relationshipType,
00077 const E_ValueType valueType);
00078
00081 virtual ~DSRDocumentTreeNode();
00082
00086 virtual void clear();
00087
00093 virtual OFBool isValid() const;
00094
00101 virtual OFBool isShort(const size_t flags) const;
00102
00112 virtual OFCondition print(ostream &stream,
00113 const size_t flags) const;
00114
00124 virtual OFCondition read(DcmItem &dataset,
00125 const DSRIODConstraintChecker *constraintChecker,
00126 const size_t flags,
00127 OFConsole *logStream = NULL);
00128
00139 virtual OFCondition write(DcmItem &dataset,
00140 DcmStack *markedItems = NULL,
00141 OFConsole *logStream = NULL);
00142
00151 virtual OFCondition readXML(const DSRXMLDocument &doc,
00152 DSRXMLCursor cursor,
00153 const E_DocumentType documentType,
00154 const size_t flags);
00155
00162 virtual OFCondition writeXML(ostream &stream,
00163 const size_t flags,
00164 OFConsole *logStream = NULL) const;
00165
00178 virtual OFCondition renderHTML(ostream &docStream,
00179 ostream &annexStream,
00180 const size_t nestingLevel,
00181 size_t &annexNumber,
00182 const size_t flags,
00183 OFConsole *logStream = NULL) const;
00184
00190 inline OFBool isSigned()
00191 {
00192 return (DigitalSignatures.card() > 0);
00193 }
00194
00202 inline OFBool isMarked() const
00203 {
00204 return MarkFlag;
00205 }
00206
00211 inline void setMark(const OFBool flag)
00212 {
00213 MarkFlag = flag;
00214 }
00215
00219 inline OFBool isReferenceTarget() const
00220 {
00221 return ReferenceTarget;
00222 }
00223
00227 inline void setReferenceTarget(const OFBool isTarget = OFTrue)
00228 {
00229 ReferenceTarget = isTarget;
00230 }
00231
00235 inline OFBool hasChildNodes() const
00236 {
00237 return (Down != NULL);
00238 }
00239
00243 inline OFBool hasSiblingNodes() const
00244 {
00245 return (Prev != NULL) || (Next != NULL);
00246 }
00247
00251 inline size_t getNodeID() const
00252 {
00253 return Ident;
00254 }
00255
00259 inline E_RelationshipType getRelationshipType() const
00260 {
00261 return RelationshipType;
00262 }
00263
00267 inline E_ValueType getValueType() const
00268 {
00269 return ValueType;
00270 }
00271
00275 inline const DSRCodedEntryValue &getConceptName() const
00276 {
00277 return ConceptName;
00278 }
00279
00286 OFCondition getConceptName(DSRCodedEntryValue &conceptName) const;
00287
00296 virtual OFCondition setConceptName(const DSRCodedEntryValue &conceptName);
00297
00303 inline const OFString &getObservationDateTime() const
00304 {
00305 return ObservationDateTime;
00306 }
00307
00316 virtual OFCondition setObservationDateTime(const OFString &observationDateTime);
00317
00330 OFCondition getTemplateIdentification(OFString &templateIdentifier,
00331 OFString &mappingResource) const;
00332
00340 virtual OFCondition setTemplateIdentification(const OFString &templateIdentifier,
00341 const OFString &mappingResource);
00342
00347 void removeSignatures();
00348
00353 virtual OFBool containsExtendedCharacters() const;
00354
00355 protected:
00356
00360 inline DSRCodedEntryValue *getConceptNamePtr()
00361 {
00362 return &ConceptName;
00363 }
00364
00376 OFCondition createAndAppendNewNode(DSRDocumentTreeNode *&previousNode,
00377 const E_RelationshipType relationshipType,
00378 const E_ValueType valueType,
00379 const DSRIODConstraintChecker *constraintChecker = NULL);
00380
00388 virtual OFCondition readContentItem(DcmItem &dataset,
00389 OFConsole *logStream);
00390
00398 virtual OFCondition writeContentItem(DcmItem &dataset,
00399 OFConsole *logStream) const;
00400
00408 virtual OFCondition readXMLContentItem(const DSRXMLDocument &doc,
00409 DSRXMLCursor cursor);
00410
00423 virtual OFCondition renderHTMLContentItem(ostream &docStream,
00424 ostream &annexStream,
00425 const size_t nestingLevel,
00426 size_t &annexNumber,
00427 const size_t flags,
00428 OFConsole *logStream) const;
00429
00436 void writeXMLItemStart(ostream &stream,
00437 const size_t flags,
00438 const OFBool closingBracket = OFTrue) const;
00439
00444 void writeXMLItemEnd(ostream &stream,
00445 const size_t flags) const;
00446
00454 OFCondition readSRDocumentContentModule(DcmItem &dataset,
00455 const DSRIODConstraintChecker *constraintChecker,
00456 const size_t flags,
00457 OFConsole *logStream);
00458
00466 OFCondition writeSRDocumentContentModule(DcmItem &dataset,
00467 DcmStack *markedItems,
00468 OFConsole *logStream);
00469
00478 OFCondition readDocumentRelationshipMacro(DcmItem &dataset,
00479 const DSRIODConstraintChecker *constraintChecker,
00480 const OFString &posString,
00481 const size_t flags,
00482 OFConsole *logStream);
00483
00491 OFCondition writeDocumentRelationshipMacro(DcmItem &dataset,
00492 DcmStack *markedItems,
00493 OFConsole *logStream);
00494
00502 OFCondition readDocumentContentMacro(DcmItem &dataset,
00503 const OFString &posString,
00504 const size_t flags,
00505 OFConsole *logStream);
00506
00512 OFCondition writeDocumentContentMacro(DcmItem &dataset,
00513 OFConsole *logStream) const;
00514
00523 OFCondition readContentSequence(DcmItem &dataset,
00524 const DSRIODConstraintChecker *constraintChecker,
00525 const OFString &posString,
00526 const size_t flags,
00527 OFConsole *logStream);
00528
00536 OFCondition writeContentSequence(DcmItem &dataset,
00537 DcmStack *markedItems,
00538 OFConsole *logStream) const;
00539
00547 OFCondition renderHTMLConceptName(ostream &docStream,
00548 const size_t flags,
00549 OFConsole *logStream) const;
00550
00561 OFCondition renderHTMLChildNodes(ostream &docStream,
00562 ostream &annexStream,
00563 const size_t nestingLevel,
00564 size_t &annexNumber,
00565 const size_t flags,
00566 OFConsole *logStream) const;
00567
00568
00569
00578 static const OFString &getRelationshipText(const E_RelationshipType relationshipType,
00579 OFString &relationshipText,
00580 const size_t flags);
00581
00582
00583 private:
00584
00586 OFBool MarkFlag;
00588 OFBool ReferenceTarget;
00589
00591 const E_RelationshipType RelationshipType;
00593 const E_ValueType ValueType;
00594
00596 DSRCodedEntryValue ConceptName;
00598 OFString ObservationDateTime;
00599
00601 OFString TemplateIdentifier;
00603 OFString MappingResource;
00604
00606 DcmSequenceOfItems MACParameters;
00608 DcmSequenceOfItems DigitalSignatures;
00609
00610
00611
00612
00613 DSRDocumentTreeNode();
00614 DSRDocumentTreeNode(const DSRDocumentTreeNode &);
00615 DSRDocumentTreeNode &operator=(const DSRDocumentTreeNode &);
00616 };
00617
00618
00619 #endif
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700