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 #ifndef DSRDOCTN_H
00032 #define DSRDOCTN_H
00033
00034 #include "dcmtk/config/osconfig.h"
00035
00036 #include "dcmtk/dcmsr/dsrtree.h"
00037 #include "dcmtk/dcmsr/dsrcodvl.h"
00038 #include "dcmtk/dcmdata/dcitem.h"
00039
00040
00041
00042
00043
00044
00045 class DSRIODConstraintChecker;
00046
00047
00048
00049
00050
00051
00054 class DSRDocumentTreeNode
00055 : public DSRTreeNode
00056 {
00057
00058 friend class DSRContentItem;
00059
00060 public:
00061
00072 DSRDocumentTreeNode(const E_RelationshipType relationshipType,
00073 const E_ValueType valueType);
00074
00077 virtual ~DSRDocumentTreeNode();
00078
00082 virtual void clear();
00083
00089 virtual OFBool isValid() const;
00090
00097 virtual OFBool isShort(const size_t flags) const;
00098
00108 virtual OFCondition print(STD_NAMESPACE ostream &stream,
00109 const size_t flags) const;
00110
00119 virtual OFCondition read(DcmItem &dataset,
00120 const DSRIODConstraintChecker *constraintChecker,
00121 const size_t flags);
00122
00132 virtual OFCondition write(DcmItem &dataset,
00133 DcmStack *markedItems = NULL);
00134
00143 virtual OFCondition readXML(const DSRXMLDocument &doc,
00144 DSRXMLCursor cursor,
00145 const E_DocumentType documentType,
00146 const size_t flags);
00147
00153 virtual OFCondition writeXML(STD_NAMESPACE ostream &stream,
00154 const size_t flags) const;
00155
00167 virtual OFCondition renderHTML(STD_NAMESPACE ostream &docStream,
00168 STD_NAMESPACE ostream &annexStream,
00169 const size_t nestingLevel,
00170 size_t &annexNumber,
00171 const size_t flags) const;
00172
00178 inline OFBool isSigned()
00179 {
00180 return (DigitalSignatures.card() > 0);
00181 }
00182
00190 inline OFBool isMarked() const
00191 {
00192 return MarkFlag;
00193 }
00194
00199 inline void setMark(const OFBool flag)
00200 {
00201 MarkFlag = flag;
00202 }
00203
00207 inline OFBool isReferenceTarget() const
00208 {
00209 return ReferenceTarget;
00210 }
00211
00215 inline void setReferenceTarget(const OFBool isTarget = OFTrue)
00216 {
00217 ReferenceTarget = isTarget;
00218 }
00219
00223 inline OFBool hasChildNodes() const
00224 {
00225 return (Down != NULL);
00226 }
00227
00231 inline OFBool hasSiblingNodes() const
00232 {
00233 return (Prev != NULL) || (Next != NULL);
00234 }
00235
00239 inline size_t getNodeID() const
00240 {
00241 return Ident;
00242 }
00243
00247 inline E_RelationshipType getRelationshipType() const
00248 {
00249 return RelationshipType;
00250 }
00251
00255 inline E_ValueType getValueType() const
00256 {
00257 return ValueType;
00258 }
00259
00263 inline const DSRCodedEntryValue &getConceptName() const
00264 {
00265 return ConceptName;
00266 }
00267
00274 OFCondition getConceptName(DSRCodedEntryValue &conceptName) const;
00275
00284 virtual OFCondition setConceptName(const DSRCodedEntryValue &conceptName);
00285
00291 inline const OFString &getObservationDateTime() const
00292 {
00293 return ObservationDateTime;
00294 }
00295
00304 virtual OFCondition setObservationDateTime(const OFString &observationDateTime);
00305
00318 OFCondition getTemplateIdentification(OFString &templateIdentifier,
00319 OFString &mappingResource) const;
00320
00328 virtual OFCondition setTemplateIdentification(const OFString &templateIdentifier,
00329 const OFString &mappingResource);
00330
00335 void removeSignatures();
00336
00337
00338 protected:
00339
00343 inline DSRCodedEntryValue *getConceptNamePtr()
00344 {
00345 return &ConceptName;
00346 }
00347
00359 OFCondition createAndAppendNewNode(DSRDocumentTreeNode *&previousNode,
00360 const E_RelationshipType relationshipType,
00361 const E_ValueType valueType,
00362 const DSRIODConstraintChecker *constraintChecker = NULL);
00363
00370 virtual OFCondition readContentItem(DcmItem &dataset);
00371
00378 virtual OFCondition writeContentItem(DcmItem &dataset) const;
00379
00387 virtual OFCondition readXMLContentItem(const DSRXMLDocument &doc,
00388 DSRXMLCursor cursor);
00389
00401 virtual OFCondition renderHTMLContentItem(STD_NAMESPACE ostream &docStream,
00402 STD_NAMESPACE ostream &annexStream,
00403 const size_t nestingLevel,
00404 size_t &annexNumber,
00405 const size_t flags) const;
00406
00413 void writeXMLItemStart(STD_NAMESPACE ostream &stream,
00414 const size_t flags,
00415 const OFBool closingBracket = OFTrue) const;
00416
00421 void writeXMLItemEnd(STD_NAMESPACE ostream &stream,
00422 const size_t flags) const;
00423
00430 OFCondition readSRDocumentContentModule(DcmItem &dataset,
00431 const DSRIODConstraintChecker *constraintChecker,
00432 const size_t flags);
00433
00440 OFCondition writeSRDocumentContentModule(DcmItem &dataset,
00441 DcmStack *markedItems);
00442
00450 OFCondition readDocumentRelationshipMacro(DcmItem &dataset,
00451 const DSRIODConstraintChecker *constraintChecker,
00452 const OFString &posString,
00453 const size_t flags);
00454
00461 OFCondition writeDocumentRelationshipMacro(DcmItem &dataset,
00462 DcmStack *markedItems);
00463
00470 OFCondition readDocumentContentMacro(DcmItem &dataset,
00471 const OFString &posString,
00472 const size_t flags);
00473
00478 OFCondition writeDocumentContentMacro(DcmItem &dataset) const;
00479
00487 OFCondition readContentSequence(DcmItem &dataset,
00488 const DSRIODConstraintChecker *constraintChecker,
00489 const OFString &posString,
00490 const size_t flags);
00491
00498 OFCondition writeContentSequence(DcmItem &dataset,
00499 DcmStack *markedItems) const;
00500
00507 OFCondition renderHTMLConceptName(STD_NAMESPACE ostream &docStream,
00508 const size_t flags) const;
00509
00519 OFCondition renderHTMLChildNodes(STD_NAMESPACE ostream &docStream,
00520 STD_NAMESPACE ostream &annexStream,
00521 const size_t nestingLevel,
00522 size_t &annexNumber,
00523 const size_t flags) const;
00524
00525
00526
00535 static const OFString &getRelationshipText(const E_RelationshipType relationshipType,
00536 OFString &relationshipText,
00537 const size_t flags);
00538
00539
00540 private:
00541
00543 OFBool MarkFlag;
00545 OFBool ReferenceTarget;
00546
00548 const E_RelationshipType RelationshipType;
00550 const E_ValueType ValueType;
00551
00553 DSRCodedEntryValue ConceptName;
00555 OFString ObservationDateTime;
00556
00558 OFString TemplateIdentifier;
00560 OFString MappingResource;
00561
00563 DcmSequenceOfItems MACParameters;
00565 DcmSequenceOfItems DigitalSignatures;
00566
00567
00568
00569
00570 DSRDocumentTreeNode();
00571 DSRDocumentTreeNode(const DSRDocumentTreeNode &);
00572 DSRDocumentTreeNode &operator=(const DSRDocumentTreeNode &);
00573 };
00574
00575
00576 #endif
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
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