+ e_0008_0016 ->SetValue("1.2.840.10008.5.1.4.1.1.7");
+ Archive->Push(e_0008_0016);
+ }
+
+// ---- The user will never have to take any action on the following ----.
+
+ // new value for 'SOP Instance UID'
+ ValEntry *e_0008_0018 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x0018) );
+ e_0008_0018->SetValue( Util::CreateUniqueUID() );
+ Archive->Push(e_0008_0018);
+
+ // Instance Creation Date
+ ValEntry *e_0008_0012 = CopyValEntry(0x0008,0x0012);
+ std::string date = Util::GetCurrentDate();
+ e_0008_0012->SetValue(date.c_str());
+ Archive->Push(e_0008_0012);
+
+ // Instance Creation Time
+ ValEntry *e_0008_0013 = CopyValEntry(0x0008,0x0013);
+ std::string time = Util::GetCurrentTime();
+ e_0008_0013->SetValue(time.c_str());
+ Archive->Push(e_0008_0013);
+
+// ----- Add Mandatory Entries if missing ---
+
+// Entries whose type is 1 are mandatory, with a mandatory value
+// Entries whose type is 1c are mandatory-inside-a-Sequence
+// Entries whose type is 2 are mandatory, with a optional value
+// Entries whose type is 2c are mandatory-inside-a-Sequence
+// Entries whose type is 3 are optional
+
+ // 'Serie Instance UID'
+ // Keep the value if exists
+ // The user is allowed to create his own Series,
+ // keeping the same 'Serie Instance UID' for various images
+ // The user shouldn't add any image to a 'Manufacturer Serie'
+ // but there is no way no to allowed him to do that
+ ValEntry *e_0020_000e = FileInternal->GetValEntry(0x0020, 0x000e);
+ if ( !e_0020_000e )
+ {
+ e_0020_000e = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0020, 0x000e) );
+ e_0020_000e->SetValue(Util::CreateUniqueUID() );
+ Archive->Push(e_0020_000e);
+ }
+
+ // 'Study Instance UID'
+ // Keep the value if exists
+ // The user is allowed to create his own Study,
+ // keeping the same 'Study Instance UID' for various images
+ // The user may add images to a 'Manufacturer Study',
+ // adding new series to an already existing Study
+ ValEntry *e_0020_000d = FileInternal->GetValEntry(0x0020, 0x000d);
+ if ( !e_0020_000d )
+ {
+ e_0020_000d = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0020, 0x000d) );
+ e_0020_000d->SetValue(Util::CreateUniqueUID() );
+ Archive->Push(e_0020_000d);
+ }
+
+ // Modality : if missing we set it to 'OTher'
+ ValEntry *e_0008_0060 = FileInternal->GetValEntry(0x0008, 0x0060);
+ if ( !e_0008_0060 )
+ {
+ e_0008_0060 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x0060) );
+ e_0008_0060->SetValue("OT");
+ Archive->Push(e_0008_0060);
+ }
+
+ // Manufacturer : if missing we set it to 'GDCM Factory'
+ ValEntry *e_0008_0070 = FileInternal->GetValEntry(0x0008, 0x0070);
+ if ( !e_0008_0070 )
+ {
+ e_0008_0070 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x0070) );
+ e_0008_0070->SetValue("GDCM Factory");
+ Archive->Push(e_0008_0070);
+ }
+
+ // Institution Name : if missing we set it to 'GDCM Hospital'
+ ValEntry *e_0008_0080 = FileInternal->GetValEntry(0x0008, 0x0080);
+ if ( !e_0008_0080 )
+ {
+ e_0008_0080 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x0080) );
+ e_0008_0080->SetValue("GDCM Hospital");
+ Archive->Push(e_0008_0080);
+ }
+
+ // Patient's Name : if missing, we set it to 'GDCM^Patient'
+ ValEntry *e_0010_0010 = FileInternal->GetValEntry(0x0010, 0x0010);
+ if ( !e_0010_0010 )
+ {
+ e_0010_0010 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0010, 0x0010) );
+ e_0010_0010->SetValue("GDCM^Patient");
+ Archive->Push(e_0010_0010);
+ }
+
+ // Patient's Birth Date : 'type 2' entry -> must exist, value not mandatory
+ ValEntry *e_0010_0030 = FileInternal->GetValEntry(0x0010, 0x0030);
+ if ( !e_0010_0030 )
+ {
+ e_0010_0030 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0010, 0x0030) );
+ e_0010_0030->SetValue("");
+ Archive->Push(e_0010_0030);
+ }
+
+ // Patient's Sex :'type 2' entry -> must exist, value not mandatory
+ ValEntry *e_0010_0040 = FileInternal->GetValEntry(0x0010, 0x0040);
+ if ( !e_0010_0040 )
+ {
+ e_0010_0040 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0010, 0x0040) );
+ e_0010_0040->SetValue("");
+ Archive->Push(e_0010_0040);
+ }
+
+ // Referring Physician's Name :'type 2' entry -> must exist, value not mandatory
+ ValEntry *e_0008_0090 = FileInternal->GetValEntry(0x0008, 0x0090);
+ if ( !e_0008_0090 )
+ {
+ e_0008_0090 = new ValEntry(
+ Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x0090) );
+ e_0008_0090->SetValue("");
+ Archive->Push(e_0008_0090);
+ }
+
+ // Remove some inconstencies (probably some more will be added)
+
+ // if (0028 0008)Number of Frames exists
+ // Push out (0020 0052),Frame of Reference UID
+ // (only meaningfull within a Serie)
+ ValEntry *e_0028_0008 = FileInternal->GetValEntry(0x0028, 0x0008);
+ if ( !e_0028_0008 )
+ {
+ Archive->Push(0x0020, 0X0052);
+ }