1 /*
2 *
3 * Copyright (C) 1998-2018, OFFIS e.V.
4 * All rights reserved. See COPYRIGHT file for details.
5 *
6 * This software and supporting documentation were developed by
7 *
8 * OFFIS e.V.
9 * R&D Division Health
10 * Escherweg 2
11 * D-26121 Oldenburg, Germany
12 *
13 *
14 * Module: dcmpstat
15 *
16 * Author: Marco Eichelberg
17 *
18 * Purpose:
19 * classes: DVPSAnnotationContent
20 *
21 */
22
23 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
24 #include "dcmtk/dcmdata/dcdeftag.h"
25 #include "dcmtk/dcmdata/dcitem.h"
26 #include "dcmtk/dcmpstat/dvpsab.h"
27 #include "dcmtk/dcmpstat/dvpsdef.h" /* for constants and macros */
28
29
30 /* --------------- class DVPSAnnotationContent --------------- */
31
DVPSAnnotationContent()32 DVPSAnnotationContent::DVPSAnnotationContent()
33 : sOPInstanceUID(DCM_SOPInstanceUID)
34 , annotationPosition(DCM_AnnotationPosition)
35 , textString(DCM_TextString)
36 {
37 }
38
DVPSAnnotationContent(const DVPSAnnotationContent & copy)39 DVPSAnnotationContent::DVPSAnnotationContent(const DVPSAnnotationContent& copy)
40 : sOPInstanceUID(copy.sOPInstanceUID)
41 , annotationPosition(copy.annotationPosition)
42 , textString(copy.textString)
43 {
44 }
45
~DVPSAnnotationContent()46 DVPSAnnotationContent::~DVPSAnnotationContent()
47 {
48 }
49
clear()50 void DVPSAnnotationContent::clear()
51 {
52 sOPInstanceUID.clear();
53 annotationPosition.clear();
54 textString.clear();
55 return;
56 }
57
setContent(const char * instanceuid,const char * text,Uint16 position)58 OFCondition DVPSAnnotationContent::setContent(
59 const char *instanceuid,
60 const char *text,
61 Uint16 position)
62 {
63 OFCondition result = EC_Normal;
64 if (instanceuid && text)
65 {
66 clear();
67 result = sOPInstanceUID.putString(instanceuid);
68 if (EC_Normal == result) result = textString.putString(text);
69 if (EC_Normal == result) result = annotationPosition.putUint16(position,0);
70 } else result = EC_IllegalCall;
71 return result;
72 }
73
read(DcmItem & dset)74 OFCondition DVPSAnnotationContent::read(DcmItem &dset)
75 {
76 OFCondition result = EC_Normal;
77 DcmStack stack;
78
79 READ_FROM_DATASET(DcmUniqueIdentifier, EVR_UI, sOPInstanceUID)
80 READ_FROM_DATASET(DcmUnsignedShort, EVR_US, annotationPosition)
81 READ_FROM_DATASET(DcmLongString, EVR_LO, textString)
82
83 /* Now perform basic sanity checks */
84
85 if (result==EC_Normal)
86 {
87 if ((sOPInstanceUID.getLength() == 0)||(sOPInstanceUID.getVM() != 1))
88 {
89 result=EC_TagNotFound;
90 DCMPSTAT_WARN("SOPInstanceUID missing or incorrect in Stored Print Annotation");
91 }
92 if ((annotationPosition.getLength() == 0)||(annotationPosition.getVM() != 1))
93 {
94 result=EC_TagNotFound;
95 DCMPSTAT_WARN("AnnotationPosition missing or incorrect in Stored Print Annotation");
96 }
97 if ((textString.getLength() == 0)||(textString.getVM() != 1))
98 {
99 result=EC_TagNotFound;
100 DCMPSTAT_WARN("TextString missing or incorrect in Stored Print Annotation");
101 }
102 }
103
104 return result;
105 }
106
write(DcmItem & dset)107 OFCondition DVPSAnnotationContent::write(DcmItem &dset)
108 {
109 OFCondition result = EC_Normal;
110 DcmElement *delem=NULL;
111
112 /* before writing anything, check that we are able to write a correct item */
113 if (sOPInstanceUID.getLength() == 0)
114 {
115 result=EC_TagNotFound;
116 DCMPSTAT_WARN("cannot write Stored Print Annotation: SOPInstanceUID empty");
117 }
118 if (annotationPosition.getLength() == 0)
119 {
120 result=EC_TagNotFound;
121 DCMPSTAT_WARN("cannot write Stored Print Annotation: AnnotationPosition empty");
122 }
123 if (textString.getLength() == 0)
124 {
125 result=EC_TagNotFound;
126 DCMPSTAT_WARN("cannot write Stored Print Annotation: TextString empty");
127 }
128
129 ADD_TO_DATASET(DcmUniqueIdentifier, sOPInstanceUID)
130 ADD_TO_DATASET(DcmUnsignedShort, annotationPosition)
131 ADD_TO_DATASET(DcmLongString, textString)
132
133 return result;
134 }
135
prepareBasicAnnotationBox(DcmItem & dset)136 OFCondition DVPSAnnotationContent::prepareBasicAnnotationBox(DcmItem &dset)
137 {
138 OFCondition result = EC_Normal;
139 DcmElement *delem=NULL;
140
141 ADD_TO_DATASET(DcmUnsignedShort, annotationPosition)
142 ADD_TO_DATASET(DcmLongString, textString)
143 return result;
144 }
145
setSOPInstanceUID(const char * value)146 OFCondition DVPSAnnotationContent::setSOPInstanceUID(const char *value)
147 {
148 if ((value==NULL)||(strlen(value)==0))
149 {
150 sOPInstanceUID.clear();
151 return EC_Normal;
152 }
153 return sOPInstanceUID.putString(value);
154 }
155
getSOPInstanceUID()156 const char *DVPSAnnotationContent::getSOPInstanceUID()
157 {
158 char *c = NULL;
159 if (EC_Normal == sOPInstanceUID.getString(c)) return c; else return NULL;
160 }
161