]> Creatis software - gdcm.git/commitdiff
Enforce Validator:
authorjpr <jpr>
Thu, 3 Nov 2005 08:28:40 +0000 (08:28 +0000)
committerjpr <jpr>
Thu, 3 Nov 2005 08:28:40 +0000 (08:28 +0000)
 - to check uneven lengthes
 - to stop yelling on Implicit VR Private Tags

src/gdcmValidator.cxx

index 1ab8b91c472e140ec3632bff1a12a5ce9467a47e..a8f1b507a370434e85aa350e086a805062854192 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmValidator.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/10/28 15:52:15 $
-  Version:   $Revision: 1.6 $
+  Date:      $Date: 2005/11/03 08:28:40 $
+  Version:   $Revision: 1.7 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -19,6 +19,7 @@
 #include "gdcmValidator.h"
 #include "gdcmElementSet.h"
 #include "gdcmDataEntry.h"
+#include "gdcmUtil.h"
 
 #include <sstream>
 
@@ -44,17 +45,26 @@ bool CheckVM(DataEntry *entry)
      return true;
      
   const std::string &s = entry->GetString();
-  std::string::size_type n = s.find("\\");
+
+/*  std::string::size_type n = s.find("\\");
   if ( n == s.npos ) // none found
   {
     n = 0;
   }
+*/
+
+  int n = Util::CountSubstring( s , "\\");
+  
   n++; // number of '\' + 1 == Value Multiplicity
 
+  std::string vmFromDict = entry->GetVM();
+  if ( vmFromDict == "1-n" || vmFromDict == "2-n" || vmFromDict == "3-n" )
+     return true;
+     
   unsigned int m;
-  std::istringstream os;
-  os.str( entry->GetVM());
-  os >> m;
+  std::istringstream is;
+  is.str( vmFromDict );
+  is >> m;
 
   return n == m;
 }
@@ -63,16 +73,32 @@ void Validator::SetInput(ElementSet *input)
 {
   // berk for now SetInput do two things at the same time
   DocEntry *d=input->GetFirstEntry();
-  while(d)
+  if (!d)
   {
+     std::cout << "No Entry found" << std::endl;
+     return;
+  }
+  while(d)
+  { 
     if ( DataEntry *v = dynamic_cast<DataEntry *>(d) )
-    {   
-      if ( !CheckVM(v) )
+    { 
+      if ( v->GetVM() != gdcm::GDCM_UNKNOWN )
+         if ( !CheckVM(v) )
+         {
+           std::cout << "Tag (" <<  v->GetKey() 
+                     << ")-> [" << v->GetName() << "] contains an illegal VM. "
+                     << "value [" << v->GetString() << "] VR :"
+                     << v->GetVR() << ", Expected VM :" << v->GetVM() << " " 
+                     << std::endl;
+         }
+      
+      if ( v->GetReadLength() % 2 )
       {
-        std::cout << "Rah this DICOM contains one wrong tag:" << 
-        v->GetString() << " " <<
-        v->GetGroup() << "," << v->GetElement() << "," <<
-        v->GetVR() << " " << v->GetVM() << " " << v->GetName() << std::endl;
+        std::cout << "Tag (" <<  v->GetKey() 
+                  << ")-> [" << v->GetName() << "] has an uneven length :"
+                  << v->GetReadLength()
+                  << " [" << v->GetString() << "] " 
+                  << std::endl;         
       }
     }
     else