UniSet  1.4.0
NCRestorer.h
См. документацию.
00001 /* This file is part of the UniSet project
00002  * Copyright (c) 2002 Free Software Foundation, Inc.
00003  * Copyright (c) 2002 Pavel Vainerman
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00018  */
00019 // --------------------------------------------------------------------------
00024 // --------------------------------------------------------------------------
00025 #ifndef NCRestorer_H_
00026 #define NCRestorer_H_
00027 // ------------------------------------------------------------------------------------------
00028 #include <sigc++/sigc++.h>
00029 #include <string>
00030 #include "UniXML.h"
00031 #include "Restorer.h"
00032 #include "IOController.h"
00033 #include "IONotifyController.h"
00034 // ------------------------------------------------------------------------------------------
00038 class NCRestorer
00039 {
00040     public:
00041 
00042         NCRestorer();
00043         virtual ~NCRestorer();
00044 
00045         struct SInfo:
00046             public IOController::UniAnalogIOInfo
00047         {
00048             SInfo( IOController_i::SensorInfo& si, UniversalIO::IOTypes& t,
00049                     UniSetTypes::Message::Message::Priority& p, long& def )
00050             {
00051                 this->si = si;
00052                 this->type = t;
00053                 this->priority = p;
00054                 this->default_val = def;
00055             }
00056 
00057             SInfo()
00058             {
00059                 this->type = UniversalIO::DigitalInput;
00060                 this->priority = UniSetTypes::Message::Medium;
00061                 this->default_val = 0;
00062             }
00063 
00064             SInfo &operator=(IOController_i::DigitalIOInfo& inf);
00065             SInfo &operator=(IOController_i::AnalogIOInfo& inf);
00066             
00067             operator IOController::UniDigitalIOInfo();
00068         };
00069 
00070         virtual void read(IONotifyController* ic, const std::string fn="" )=0;
00071         virtual void buildDependsList( IONotifyController* ic, const std::string fn="" )=0;
00072         virtual void dump(IONotifyController* ic, SInfo& inf, const IONotifyController::ConsumerList& lst)=0;
00073         virtual void dumpThreshold(IONotifyController* ic, SInfo& inf, const IONotifyController::ThresholdExtList& lst)=0;
00074 
00075     protected:
00076 
00077         // добавление списка заказчиков
00078         static void addlist( IONotifyController* ic, SInfo& inf, IONotifyController::ConsumerList& lst, bool force=false );
00079 
00080         // добавление списка порогов и заказчиков
00081         static void addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyController::ThresholdExtList& lst, bool force=false );
00082         
00084         static inline void dsRegistration( IONotifyController* ic, IOController::UniDigitalIOInfo& inf, bool force=false )
00085         {
00086             ic->dsRegistration(inf,force);
00087         }
00088 
00090         static inline void asRegistration( IONotifyController* ic, IOController::UniAnalogIOInfo& inf, bool force=false )
00091         {
00092             ic->asRegistration(inf,force);
00093         }
00094 
00095         static inline IOController::AIOStateList::iterator aioFind(IONotifyController* ic, UniSetTypes::KeyType k)
00096         {
00097             return ic->myafind(k);
00098         }
00099 
00100         static inline IOController::DIOStateList::iterator dioFind(IONotifyController* ic, UniSetTypes::KeyType k)
00101         {
00102             return ic->mydfind(k);
00103         }
00104 
00105         static inline IOController::DIOStateList::iterator dioEnd( IONotifyController* ic )
00106         {
00107             return ic->mydioEnd();
00108         }
00109         static inline IOController::AIOStateList::iterator aioEnd( IONotifyController* ic )
00110         {
00111             return ic->myaioEnd();
00112         }
00113         static inline IOController::DIOStateList::iterator dioBegin( IONotifyController* ic )
00114         {
00115             return ic->mydioBegin();
00116         }
00117         static inline IOController::AIOStateList::iterator aioBegin( IONotifyController* ic )
00118         {
00119             return ic->myaioBegin();
00120         }
00121         
00122 };
00123 // ------------------------------------------------------------------------------------------
00128 class NCRestorer_XML:
00129     public Restorer_XML,
00130     public NCRestorer
00131 {
00132     public:
00133 
00137         NCRestorer_XML(const std::string fname);
00138 
00144         NCRestorer_XML( const std::string fname, const std::string sensor_filterField, const std::string sensor_filterValue="" );
00145 
00146         virtual ~NCRestorer_XML();
00147         NCRestorer_XML();
00148 
00152         void setDependsFilter( const std::string filterField, const std::string filterValue="" );
00153 
00155         void setThresholdsFilter( const std::string filterField, const std::string filterValue="" );
00156 
00157         bool setFileName( const std::string& file, bool create );
00158         inline std::string getFileName(){ return fname; }
00159 
00169         void setReadThresholdItem( ReaderSlot sl );
00170 
00179         void setReadDependItem( ReaderSlot sl );
00180 
00181 
00182         typedef sigc::slot<bool,UniXML&,UniXML_iterator&,xmlNode*,SInfo&> NCReaderSlot;
00183 
00184         void setNCReadItem( NCReaderSlot sl );
00185 
00186         virtual void read(IONotifyController* ic, const std::string filename="" );
00187         virtual void read(IONotifyController* ic, UniXML& xml );
00188 
00189         virtual void dump(IONotifyController* ic, SInfo& inf, const IONotifyController::ConsumerList& lst);
00190         virtual void dumpThreshold(IONotifyController* ic, SInfo& inf, const IONotifyController::ThresholdExtList& lst);
00191 
00192         virtual void buildDependsList( IONotifyController* ic, const std::string fn="" );
00193         virtual void buildDependsList( IONotifyController* ic, UniXML& xml );
00194         
00195     protected:
00196         
00197         bool check_thresholds_item( UniXML_iterator& it );
00198         bool check_depend_item( UniXML_iterator& it );
00199         void read_consumers(UniXML& xml, xmlNode* node, NCRestorer_XML::SInfo& inf, IONotifyController* ic );
00200         void read_list(UniXML& xml, xmlNode* node, IONotifyController* ic);
00201         void read_thresholds(UniXML& xml, xmlNode* node, IONotifyController* ic);
00202         void build_depends( UniXML& xml, xmlNode* node, IONotifyController* ic );
00203         void init( std::string fname );
00204 
00205         bool getBaseInfo( UniXML& xml, xmlNode* it, IOController_i::SensorInfo& si );
00206         bool getSensorInfo(UniXML& xml, xmlNode* snode, SInfo& si );
00207         bool getConsumerList(UniXML& xml,xmlNode* node, IONotifyController::ConsumerList& lst);
00208         bool getThresholdInfo(UniXML& xml,xmlNode* tnode, IONotifyController::ThresholdInfoExt& ti);
00209         bool getDependsInfo( UniXML& xml, xmlNode* node, IOController::DependsInfo& di );
00210 
00211         static void set_dumptime( UniXML& xml, xmlNode* node );
00212         static xmlNode* bind_node(UniXML& xml, xmlNode* root, const std::string& nodename, const std::string nm="");
00213         static xmlNode* rebind_node(UniXML& xml, xmlNode* root, const std::string& nodename, const std::string nm="");      
00214 
00215 
00216         std::string s_filterField;
00217         std::string s_filterValue;
00218         std::string c_filterField;
00219         std::string c_filterValue;
00220         std::string d_filterField;
00221         std::string d_filterValue;
00222         std::string t_filterField;
00223         std::string t_filterValue;
00224 
00225         std::string fname;
00226         UniXML uxml;
00227         ReaderSlot rtslot;
00228         ReaderSlot depslot;
00229         NCReaderSlot ncrslot;
00230 
00231     private:
00232 };
00233 // ------------------------------------------------------------------------------------------
00234 #endif