+
+ return dynamic_cast<SeqEntry*>(currentEntry);
+}
+
+/**
+ * \brief Accesses an existing DocEntry (i.e. a Dicom Element)
+ * through it's (group, element) and modifies it's content with
+ * the given value.
+ * @param content new value (string) to substitute with
+ * @param group group number of the Dicom Element to modify
+ * @param elem element number of the Dicom Element to modify
+ */
+bool DocEntrySet::SetEntryString(std::string const &content,
+ uint16_t group, uint16_t elem)
+{
+ DataEntry *entry = GetDataEntry(group, elem);
+ if (!entry )
+ {
+ gdcmWarningMacro( "No corresponding DataEntry " << std::hex << group <<
+ "," << elem << " element (try promotion first).");
+ return false;
+ }
+ return SetEntryString(content,entry);
+}
+
+/**
+ * \brief Accesses an existing DocEntry (i.e. a Dicom Element)
+ * through it's (group, element) and modifies it's content with
+ * the given value.
+ * @param content new value (void* -> uint8_t*) to substitute with
+ * @param lgth new value length
+ * @param group group number of the Dicom Element to modify
+ * @param elem element number of the Dicom Element to modify
+ */
+bool DocEntrySet::SetEntryBinArea(uint8_t *content, int lgth,
+ uint16_t group, uint16_t elem)
+{
+ DataEntry *entry = GetDataEntry(group, elem);
+ if (!entry )
+ {
+ gdcmWarningMacro( "No corresponding DataEntry " << std::hex << group <<
+ "," << elem << " element (try promotion first).");
+ return false;
+ }
+
+ return SetEntryBinArea(content,lgth,entry);
+}
+
+/**
+ * \brief Accesses an existing DocEntry (i.e. a Dicom Element)
+ * and modifies it's content with the given value.
+ * @param content new value (string) to substitute with
+ * @param entry Entry to be modified
+ */
+bool DocEntrySet::SetEntryString(std::string const &content, DataEntry *entry)
+{
+ if (entry)
+ {
+ entry->SetString(content);
+ return true;
+ }
+ return false;
+}
+
+/**
+ * \brief Accesses an existing DataEntry (i.e. a Dicom Element)
+ * and modifies it's content with the given value.
+ * @param content new value (void* -> uint8_t*) to substitute with
+ * @param entry Entry to be modified
+ * @param lgth new value length
+ */
+bool DocEntrySet::SetEntryBinArea(uint8_t *content, int lgth, DataEntry *entry)
+{
+ if (entry)
+ {
+ entry->SetLength(lgth);
+ entry->SetBinArea(content);
+ return true;
+ }
+ return false;
+}
+
+/**
+ * \brief Modifies the value of a given Doc Entry (Dicom Element)
+ * when it exists. Create it with the given value when unexistant.
+ * @param value (string) Value to be set
+ * @param group Group number of the Entry
+ * @param elem Element number of the Entry
+ * @param vr V(alue) R(epresentation) of the Entry -if private Entry-
+ * \return pointer to the modified/created Header Entry (NULL when creation
+ * failed).
+ */
+DataEntry *DocEntrySet::InsertEntryString(std::string const &value,
+ uint16_t group, uint16_t elem,
+ VRKey const &vr )
+{
+ DataEntry *dataEntry = 0;
+ DocEntry *currentEntry = GetDocEntry( group, elem );
+
+ if (currentEntry)
+ {
+ dataEntry = dynamic_cast<DataEntry *>(currentEntry);
+
+ // Verify the VR
+ if ( dataEntry )
+ if ( dataEntry->GetVR()!=vr )
+ dataEntry = NULL;
+
+ // if currentEntry doesn't correspond to the requested dataEntry
+ if ( !dataEntry)
+ {
+ if ( !RemoveEntry(currentEntry) )
+ {
+ gdcmWarningMacro( "Removal of previous DocEntry failed.");
+ return NULL;
+ }
+ }
+ }
+
+ // Create a new dataEntry if necessary
+ if ( !dataEntry )
+ {
+ dataEntry = NewDataEntry( group, elem, vr );
+
+ if ( !AddEntry(dataEntry) )
+ {
+ gdcmWarningMacro("AddEntry failed although this is a creation.");
+
+ delete dataEntry;
+ return NULL;
+ }
+ }
+
+ // Set the dataEntry value
+ SetEntryString(value, dataEntry); // The std::string value
+ return dataEntry;