creaImageIOTreeHandlerImageAdder.h

Go to the documentation of this file.
00001 #ifndef __creaImageIOTreeHandlerImageAdder_h_INCLUDED__
00002 #define __creaImageIOTreeHandlerImageAdder_h_INCLUDED__
00003 
00004 #include <creaImageIOTreeHandler.h>
00005 #include <creaImageIOSynchron.h>
00006 #include <creaImageIOImageReader.h>
00007 //#include <creaImageIOImageWriter.h>
00008 
00009 // Signal/slot mechanism for progress events
00010 #include <boost/signal.hpp>
00011 #include <boost/bind.hpp>
00012 #if defined(USE_GDCM2)
00013 #include "creaImageIODicomScanner.h"
00014 #endif
00015 
00016 namespace creaImageIO
00017 {
00022   //=======================================================================
00024 
00025   class TreeHandlerImageAdder
00026   {
00027           
00028   public:
00029     //====================================================================
00031     TreeHandlerImageAdder(TreeHandler* tree);
00033     ~TreeHandlerImageAdder();
00035     void SetTreeHandler(TreeHandler* tree) { mTreeHandler = tree;}
00036         
00038         void SetSynchronizer(Synchronizer* s){mSynchronizer=s;}
00040         void SetCurrentDatabase(std::string cur){mCurrentDB=cur;}
00041     //====================================================================
00042 
00043     //====================================================================
00046     class Progress
00047     {
00048     public:
00049       Progress() { Reset(); }
00050       ~Progress() {}
00051       
00052       void Reset() 
00053       {
00054         mStop = false;
00055         mNumberScannedFiles = 0;
00056         mNumberScannedDirs = 0;
00057         mNumberHandledFiles = 0;
00058         mNumberAddedFiles = 0;
00059       }
00060 
00061       int GetNumberScannedFiles() const { return mNumberScannedFiles; }
00062       int GetNumberScannedDirs() const { return mNumberScannedDirs; }
00063       int GetNumberHandledFiles() const { return mNumberHandledFiles; }
00064       int GetNumberAddedFiles() const { return mNumberAddedFiles; }
00065 
00066       void IncNumberScannedFiles() { mNumberScannedFiles++; }
00067       void IncNumberScannedDirs() { mNumberScannedDirs++; }
00068       void IncNumberHandledFiles() { mNumberHandledFiles++; }
00069       void IncNumberAddedFiles() { mNumberAddedFiles++; }
00070 
00071       void SetStop() { mStop = true; }
00072       bool GetStop() const { return mStop; }
00073 
00074     private:
00075       bool mStop;
00076       int mNumberScannedFiles;
00077       int mNumberScannedDirs;
00078       int mNumberHandledFiles;
00079       int mNumberAddedFiles;
00080     };
00081     //=============================================
00082 
00083     //=============================================
00084     const Progress& GetProgress() const { return mProgress; }
00085     //=============================================
00086 
00087     //=============================================
00088     typedef boost::signal<void (Progress&)>  ProgressSignalType;
00089     typedef ProgressSignalType::slot_function_type ProgressCallbackType;
00090     //=============================================
00091 
00092    //==================================================================
00100     void ConnectProgressObserver(ProgressCallbackType callback);
00101    //==================================================================
00102 
00103     //====================================================================
00105     bool IsHandledFile( const std::string& filename);
00107     void AddFiles( const std::vector<std::string>& filename );
00109     void AddDirectory( const std::string& directory, 
00110                        bool recurse);
00111 
00112 
00113 #if defined(USE_GDCM2)
00114          void AddDirectoryRecursorScanner(const std::string &dirpath, 
00115                                                    bool recursive,const std::string &addKey,  DicomImageScanner i_sc, bool b_loaded);
00116 #endif
00117 
00119         void RemoveFile(tree::Node* node);
00121         void RemoveFiles(const std::vector<tree::Node*>& nodes);
00122 
00123     void remove( tree::Node* i_node);
00124 
00126         std::string Synchronize(bool repair, bool checkAttributes);
00128         void CheckSyncDirectory(const std::string &dirpath, 
00129                                                         bool recursive, 
00130                                                         bool repair,
00131                                                         bool checkAttributes,
00132                                                         std::vector<std::string> &i_ignorefiles,
00133                                                         std::vector<std::string> & attsModified,
00134                                                         std::vector<std::string> & newfiles);
00136         void CopyFiles(const std::vector<std::string>& filenames, const std::string directory  );
00137         
00139         void SaveAs(const std::vector<std::string>& filenames, std::vector<vtkImageData *> i_images);
00141         void FindNode(tree::Node* parent, int level, 
00142                 const std::string& searchParam, 
00143                 const std::string& searchVal, 
00144                 tree::Node*& node);
00145 
00147         void FindNodePartial(tree::Node* parent, int level, const std::string& searchParam, const std::string& searchVal, tree::Node*& node);
00148  
00150         void CheckAttributes(bool repair, std::string& file, std::vector<std::string>& attsModified);
00152         void DeleteDriveFromMainDB(const std::string& drive);
00154         void DeleteDriveFromOtherDB(const std::string& drive);
00156         void EditField(tree::Node* node, const std::string& name, const std::string& key, const std::string& val);
00158         void GetAttributes(const std::vector<std::string>& params, 
00159           const std::string& filename, 
00160           std::vector<std::string>& results);
00161 
00163         const std::string isAttributeExist(const std::string i_attr);
00164   
00165   
00166  
00167     //====================================================================
00168 
00169   private:
00170 
00174     void AddFile( const std::string& filename );
00175 
00177     void AddDirectoryRecursor( const std::string& directory, 
00178                                bool recurse,
00179                            const std::string &addKey);
00180 
00181     TreeHandler* mTreeHandler;
00182         Synchronizer* mSynchronizer;
00183     ImageReader mReader;
00184         //ImageWriter mWriter;
00185         std::string mCurrentDB;
00186     
00187     Progress mProgress;
00188     ProgressSignalType mProgressSignal;
00189 
00190 
00191   };
00192   // EO class TreeHandlerImageAdder
00193   //=======================================================================
00194 
00195 
00196  
00197 
00198 
00199 } // EO namespace creaImageIO
00200 
00201 #include <iostream>
00202 inline std::ostream& operator << ( std::ostream& o, 
00203                             const creaImageIO::TreeHandlerImageAdder::Progress& p)
00204 {
00205   o << p.GetNumberScannedFiles() << " files - "
00206     << p.GetNumberScannedDirs() << " dirs - "
00207     << p.GetNumberHandledFiles() << " handled -"
00208     << p.GetNumberAddedFiles() << " added";
00209   return o;
00210 }
00211 
00212 // EOF
00213 #endif  
00214