+/**
+ * \brief Searches [both] the public [and the shadow dictionary (when they
+ * exist)] for the presence of the DictEntry with given
+ * group and element, and create a new virtual DictEntry if necessary
+ * @param group group number of the searched DictEntry
+ * @param elem element number of the searched DictEntry
+ * @param vr V(alue) R(epresentation) to use, if necessary
+ * @return Corresponding DictEntry when it exists, NULL otherwise.
+ * \remarks The returned DictEntry is registered
+ */
+DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem,
+ VRKey const &vr)
+{
+ DictEntry *dictEntry = GetDictEntry(group,elem);
+ DictEntry *goodEntry = dictEntry;
+ VRKey goodVR = vr;
+
+ if (elem == 0x0000)
+ goodVR="UL";
+
+ if ( goodEntry )
+ {
+ if ( goodVR != goodEntry->GetVR()
+ && goodVR != GDCM_VRUNKNOWN )
+ {
+ goodEntry = NULL;
+ }
+ dictEntry->Unregister();
+ }
+
+ // Create a new virtual DictEntry if necessary
+ if (!goodEntry)
+ {
+ if (dictEntry)
+ {
+ goodEntry = DictEntry::New(group, elem, goodVR, "FIXME",
+ dictEntry->GetName() );
+ }
+ else
+ {
+ goodEntry = DictEntry::New(group, elem, goodVR);
+ }
+ }
+ else
+ {
+ goodEntry->Register();
+ }
+ return goodEntry;
+}