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 DSRDOCTR_H
00036 #define DSRDOCTR_H
00037
00038 #include "dcmtk/config/osconfig.h"
00039
00040 #include "dcmtk/dcmsr/dsrtree.h"
00041 #include "dcmtk/dcmsr/dsrdoctn.h"
00042 #include "dcmtk/dcmsr/dsrcitem.h"
00043
00044 #include "dcmtk/dcmdata/dcitem.h"
00045
00046
00047
00048
00049
00050
00051 class DSRIODConstraintChecker;
00052
00053
00054
00055
00056
00057
00060 class DSRDocumentTree
00061 : public DSRTree
00062 {
00063
00064 public:
00065
00069 DSRDocumentTree(const E_DocumentType documentType);
00070
00073 virtual ~DSRDocumentTree();
00074
00078 virtual void clear();
00079
00086 virtual OFBool isValid() const;
00087
00092 void setLogStream(OFConsole *stream);
00093
00099 OFCondition print(ostream &stream,
00100 const size_t flags = 0);
00101
00111 OFCondition read(DcmItem &dataset,
00112 const E_DocumentType documentType,
00113 const size_t flags = 0);
00114
00123 OFCondition write(DcmItem &dataset,
00124 DcmStack *markedItems = NULL);
00125
00132 OFCondition readXML(const DSRXMLDocument &doc,
00133 DSRXMLCursor cursor,
00134 const size_t flags);
00135
00141 OFCondition writeXML(ostream &stream,
00142 const size_t flags);
00143
00150 OFCondition renderHTML(ostream &docStream,
00151 ostream &annexStream,
00152 const size_t flags = 0);
00153
00157 E_DocumentType getDocumentType() const
00158 {
00159 return DocumentType;
00160 }
00161
00168 OFCondition changeDocumentType(const E_DocumentType documentType);
00169
00183 OFBool canAddContentItem(const E_RelationshipType relationshipType,
00184 const E_ValueType valueType,
00185 const E_AddMode addMode = AM_afterCurrent);
00186
00193 OFBool canAddByReferenceRelationship(const E_RelationshipType relationshipType,
00194 const E_ValueType targetValueType);
00195
00206 size_t addContentItem(const E_RelationshipType relationshipType,
00207 const E_ValueType valueType,
00208 const E_AddMode addMode = AM_afterCurrent);
00209
00218 size_t addByReferenceRelationship(const E_RelationshipType relationshipType,
00219 const size_t referencedNodeID);
00220
00228 size_t removeCurrentContentItem();
00229
00234 DSRContentItem &getCurrentContentItem();
00235
00246 size_t gotoNamedNode(const DSRCodedEntryValue &conceptName,
00247 const OFBool startFromRoot = OFTrue,
00248 const OFBool searchIntoSub = OFTrue);
00249
00258 size_t gotoNextNamedNode(const DSRCodedEntryValue &conceptName,
00259 const OFBool searchIntoSub = OFTrue);
00260
00267 void unmarkAllContentItems();
00268
00273 void removeSignatures();
00274
00279 OFBool containsExtendedCharacters();
00280
00281
00282 protected:
00283
00293 virtual size_t addNode(DSRDocumentTreeNode *node,
00294 const E_AddMode addMode = AM_afterCurrent);
00295
00303 virtual size_t removeNode();
00304
00319 OFCondition checkByReferenceRelationships(const OFBool updateString = OFFalse,
00320 const OFBool updateNodeID = OFFalse);
00321
00322
00323 private:
00324
00332 virtual size_t addNode(DSRTreeNode *node,
00333 const E_AddMode addMode = AM_afterCurrent);
00334
00336 E_DocumentType DocumentType;
00338 OFConsole *LogStream;
00340 DSRContentItem CurrentContentItem;
00342 DSRIODConstraintChecker *ConstraintChecker;
00343
00344
00345
00346
00347 DSRDocumentTree();
00348 DSRDocumentTree(const DSRDocumentTree &);
00349 DSRDocumentTree &operator=(const DSRDocumentTree &);
00350 };
00351
00352
00353 #endif
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414