/*----- PROTECTED REGION ID(DataImporterClass.cpp) ENABLED START -----*/ static const char *TagName = "$Name: $"; static const char *CvsPath = "$Source: $"; static const char *SvnPath = "$HeadURL: $"; static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/"; //============================================================================= // // file : DataImporterClass.cpp // // description : C++ source for the DataImporterClass. // A singleton class derived from DeviceClass. // It implements the command and attribute list // and all properties and methods required // by the DataImporter once per process. // // project : Data importer // // This file is part of Tango device class. // // Tango is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Tango is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Tango. If not, see . // // $Author: $ // // $Revision: $ // $Date: $ // // $HeadURL: $ // //============================================================================= // This file is generated by POGO // (Program Obviously used to Generate tango Object) //============================================================================= #include /*----- PROTECTED REGION END -----*/ // DataImporterClass.cpp //------------------------------------------------------------------- /** * Create DataImporterClass singleton and * return it in a C function for Python usage */ //------------------------------------------------------------------- extern "C" { #ifdef _TG_WINDOWS_ __declspec(dllexport) #endif Tango::DeviceClass *_create_DataImporter_class(const char *name) { return DataImporter_ns::DataImporterClass::init(name); } } namespace DataImporter_ns { //=================================================================== // Initialize pointer for singleton pattern //=================================================================== DataImporterClass *DataImporterClass::_instance = NULL; //-------------------------------------------------------- /** * method : DataImporterClass::DataImporterClass(string &s) * description : constructor for the DataImporterClass * * @param s The class name */ //-------------------------------------------------------- DataImporterClass::DataImporterClass(string &s):Tango::DeviceClass(s) { cout2 << "Entering DataImporterClass constructor" << endl; set_default_property(); get_class_property(); write_class_property(); /*----- PROTECTED REGION ID(DataImporterClass::constructor) ENABLED START -----*/ /*----- PROTECTED REGION END -----*/ // DataImporterClass::constructor cout2 << "Leaving DataImporterClass constructor" << endl; } //-------------------------------------------------------- /** * method : DataImporterClass::~DataImporterClass() * description : destructor for the DataImporterClass */ //-------------------------------------------------------- DataImporterClass::~DataImporterClass() { /*----- PROTECTED REGION ID(DataImporterClass::destructor) ENABLED START -----*/ /*----- PROTECTED REGION END -----*/ // DataImporterClass::destructor _instance = NULL; } //-------------------------------------------------------- /** * method : DataImporterClass::init * description : Create the object if not already done. * Otherwise, just return a pointer to the object * * @param name The class name */ //-------------------------------------------------------- DataImporterClass *DataImporterClass::init(const char *name) { if (_instance == NULL) { try { string s(name); _instance = new DataImporterClass(s); } catch (bad_alloc &) { throw; } } return _instance; } //-------------------------------------------------------- /** * method : DataImporterClass::instance * description : Check if object already created, * and return a pointer to the object */ //-------------------------------------------------------- DataImporterClass *DataImporterClass::instance() { if (_instance == NULL) { cerr << "Class is not initialised !!" << endl; exit(-1); } return _instance; } //=================================================================== // Command execution method calls //=================================================================== //-------------------------------------------------------- /** * method : OnClass::execute() * description : method to trigger the execution of the command. * * @param device The device on which the command must be executed * @param in_any The command input data * * returns The command output data (packed in the Any object) */ //-------------------------------------------------------- CORBA::Any *OnClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { cout2 << "OnClass::execute(): arrived" << endl; ((static_cast(device))->on()); return new CORBA::Any(); } //-------------------------------------------------------- /** * method : OffClass::execute() * description : method to trigger the execution of the command. * * @param device The device on which the command must be executed * @param in_any The command input data * * returns The command output data (packed in the Any object) */ //-------------------------------------------------------- CORBA::Any *OffClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { cout2 << "OffClass::execute(): arrived" << endl; ((static_cast(device))->off()); return new CORBA::Any(); } //=================================================================== // Properties management //=================================================================== //-------------------------------------------------------- /** * Method : DataImporterClass::get_class_property() * Description : Get the class property for specified name. */ //-------------------------------------------------------- Tango::DbDatum DataImporterClass::get_class_property(string &prop_name) { for (unsigned int i=0 ; i_UseDb==true) get_db_class()->get_property(cl_prop); Tango::DbDatum def_prop; int i = -1; // Try to extract CertificateFile value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> certificateFile; else { // Check default value for CertificateFile def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> certificateFile; cl_prop[i] << certificateFile; } } // Try to extract StoragePath value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> storagePath; else { // Check default value for StoragePath def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> storagePath; cl_prop[i] << storagePath; } } // Try to extract AuxDatabaseHost value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabaseHost; else { // Check default value for AuxDatabaseHost def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabaseHost; cl_prop[i] << auxDatabaseHost; } } // Try to extract AuxDatabasePort value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabasePort; else { // Check default value for AuxDatabasePort def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabasePort; cl_prop[i] << auxDatabasePort; } } // Try to extract AuxDatabaseUsername value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabaseUsername; else { // Check default value for AuxDatabaseUsername def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabaseUsername; cl_prop[i] << auxDatabaseUsername; } } // Try to extract AuxDatabasePassword value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabasePassword; else { // Check default value for AuxDatabasePassword def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabasePassword; cl_prop[i] << auxDatabasePassword; } } // Try to extract AuxDatabaseSchema value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabaseSchema; else { // Check default value for AuxDatabaseSchema def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabaseSchema; cl_prop[i] << auxDatabaseSchema; } } // Try to extract AuxDatabaseTimestampTable value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabaseTimestampTable; else { // Check default value for AuxDatabaseTimestampTable def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabaseTimestampTable; cl_prop[i] << auxDatabaseTimestampTable; } } // Try to extract AuxDatabaseFailedTable value if (cl_prop[++i].is_empty()==false) cl_prop[i] >> auxDatabaseFailedTable; else { // Check default value for AuxDatabaseFailedTable def_prop = get_default_class_property(cl_prop[i].name); if (def_prop.is_empty()==false) { def_prop >> auxDatabaseFailedTable; cl_prop[i] << auxDatabaseFailedTable; } } /*----- PROTECTED REGION ID(DataImporterClass::get_class_property_after) ENABLED START -----*/ // Check class property data members init /*----- PROTECTED REGION END -----*/ // DataImporterClass::get_class_property_after } //-------------------------------------------------------- /** * Method : DataImporterClass::set_default_property() * Description : Set default property (class and device) for wizard. * For each property, add to wizard property name and description. * If default value has been set, add it to wizard property and * store it in a DbDatum. */ //-------------------------------------------------------- void DataImporterClass::set_default_property() { string prop_name; string prop_desc; string prop_def; vector vect_data; // Set Default Class Properties prop_name = "CertificateFile"; prop_desc = "Absolute path to certificate chain file"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "StoragePath"; prop_desc = "Absolute path to storage"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabaseHost"; prop_desc = "File transfer auxiliary database host"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabasePort"; prop_desc = "File transfer auxiliary database port"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabaseUsername"; prop_desc = "File transfer auxiliary database username"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabasePassword"; prop_desc = "File transfer auxiliary database password"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabaseSchema"; prop_desc = "File transfer auxiliary database schema"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabaseTimestampTable"; prop_desc = "File transfer auxiliary database device timestamp table"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); prop_name = "AuxDatabaseFailedTable"; prop_desc = "File transfer auxiliary database failed transfer table"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } else add_wiz_class_prop(prop_name, prop_desc); // Set Default device Properties prop_name = "CertificateFile"; prop_desc = "Absolute path to certificate chain file"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "StoragePath"; prop_desc = "Absolute path to storage"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RemoteHost"; prop_desc = "Metadata exporter remote host"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RemotePort"; prop_desc = "Metadata exporter remote port"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RemoteUsername"; prop_desc = "Metadata exporter login username"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RemotePassword"; prop_desc = "Metadata exporter remote password"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "EnableSSL"; prop_desc = "Enable or disable SSL connections"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabaseHost"; prop_desc = "Metadata local database host"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabasePort"; prop_desc = "Metadata local database port"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabaseUsername"; prop_desc = "Metadata local database username"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabasePassword"; prop_desc = "Metadata local database password"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabaseSchema"; prop_desc = "Metadata local database schema"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "DatabaseTable"; prop_desc = "Metadata local database table"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RefreshTime"; prop_desc = "Local database request period (seconds)"; prop_def = "10"; vect_data.clear(); vect_data.push_back("10"); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "Timeout"; prop_desc = "Connection timeout (seconds)"; prop_def = "60"; vect_data.clear(); vect_data.push_back("60"); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RecoveryTime"; prop_desc = "Time between failed file download attempt"; prop_def = "60"; vect_data.clear(); vect_data.push_back("60"); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AutoStart"; prop_desc = "Exec On command after init if state is not fault"; prop_def = "false"; vect_data.clear(); vect_data.push_back("false"); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabaseHost"; prop_desc = "File transfer auxiliary database host"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabasePort"; prop_desc = "File transfer auxiliary database port"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabaseUsername"; prop_desc = "File transfer auxiliary database username"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabasePassword"; prop_desc = "File transfer auxiliary database password"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabaseSchema"; prop_desc = "File transfer auxiliary database schema"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabaseTimestampTable"; prop_desc = "File transfer auxiliary database device timestamp table"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "AuxDatabaseFailedTable"; prop_desc = "File transfer auxiliary database failed transfer table"; prop_def = ""; vect_data.clear(); if (prop_def.length()>0) { Tango::DbDatum data(prop_name); data << vect_data ; dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } else add_wiz_dev_prop(prop_name, prop_desc); } //-------------------------------------------------------- /** * Method : DataImporterClass::write_class_property() * Description : Set class description fields as property in database */ //-------------------------------------------------------- void DataImporterClass::write_class_property() { // First time, check if database used if (Tango::Util::_UseDb == false) return; Tango::DbData data; string classname = get_name(); string header; string::size_type start, end; // Put title Tango::DbDatum title("ProjectTitle"); string str_title("Data importer"); title << str_title; data.push_back(title); // Put Description Tango::DbDatum description("Description"); vector str_desc; str_desc.push_back(""); description << str_desc; data.push_back(description); // put cvs or svn location string filename("DataImporter"); filename += "Class.cpp"; // check for cvs information string src_path(CvsPath); start = src_path.find("/"); if (start!=string::npos) { end = src_path.find(filename); if (end>start) { string strloc = src_path.substr(start, end-start); // Check if specific repository start = strloc.find("/cvsroot/"); if (start!=string::npos && start>0) { string repository = strloc.substr(0, start); if (repository.find("/segfs/")!=string::npos) strloc = "ESRF:" + strloc.substr(start, strloc.length()-start); } Tango::DbDatum cvs_loc("cvs_location"); cvs_loc << strloc; data.push_back(cvs_loc); } } // check for svn information else { string src_path(SvnPath); start = src_path.find("://"); if (start!=string::npos) { end = src_path.find(filename); if (end>start) { header = "$HeadURL: "; start = header.length(); string strloc = src_path.substr(start, (end-start)); Tango::DbDatum svn_loc("svn_location"); svn_loc << strloc; data.push_back(svn_loc); } } } // Get CVS or SVN revision tag // CVS tag string tagname(TagName); header = "$Name: "; start = header.length(); string endstr(" $"); end = tagname.find(endstr); if (end!=string::npos && end>start) { string strtag = tagname.substr(start, end-start); Tango::DbDatum cvs_tag("cvs_tag"); cvs_tag << strtag; data.push_back(cvs_tag); } // SVN tag string svnpath(SvnPath); header = "$HeadURL: "; start = header.length(); end = svnpath.find(endstr); if (end!=string::npos && end>start) { string strloc = svnpath.substr(start, end-start); string tagstr ("/tags/"); start = strloc.find(tagstr); if ( start!=string::npos ) { start = start + tagstr.length(); end = strloc.find(filename); string strtag = strloc.substr(start, end-start-1); Tango::DbDatum svn_tag("svn_tag"); svn_tag << strtag; data.push_back(svn_tag); } } // Get URL location string httpServ(HttpServer); if (httpServ.length()>0) { Tango::DbDatum db_doc_url("doc_url"); db_doc_url << httpServ; data.push_back(db_doc_url); } // Put inheritance Tango::DbDatum inher_datum("InheritedFrom"); vector inheritance; inheritance.push_back("TANGO_BASE_CLASS"); inher_datum << inheritance; data.push_back(inher_datum); // Call database and and values get_db_class()->put_property(data); } //=================================================================== // Factory methods //=================================================================== //-------------------------------------------------------- /** * Method : DataImporterClass::device_factory() * Description : Create the device object(s) * and store them in the device list */ //-------------------------------------------------------- void DataImporterClass::device_factory(const Tango::DevVarStringArray *devlist_ptr) { /*----- PROTECTED REGION ID(DataImporterClass::device_factory_before) ENABLED START -----*/ // Add your own code /*----- PROTECTED REGION END -----*/ // DataImporterClass::device_factory_before // Create devices and add it into the device list for (unsigned long i=0 ; ilength() ; i++) { cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl; device_list.push_back(new DataImporter(this, (*devlist_ptr)[i])); } // Manage dynamic attributes if any erase_dynamic_attributes(devlist_ptr, get_class_attr()->get_attr_list()); // Export devices to the outside world for (unsigned long i=1 ; i<=devlist_ptr->length() ; i++) { // Add dynamic attributes if any DataImporter *dev = static_cast(device_list[device_list.size()-i]); dev->add_dynamic_attributes(); // Check before if database used. if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false)) export_device(dev); else export_device(dev, dev->get_name().c_str()); } /*----- PROTECTED REGION ID(DataImporterClass::device_factory_after) ENABLED START -----*/ // Add your own code /*----- PROTECTED REGION END -----*/ // DataImporterClass::device_factory_after } //-------------------------------------------------------- /** * Method : DataImporterClass::attribute_factory() * Description : Create the attribute object(s) * and store them in the attribute list */ //-------------------------------------------------------- void DataImporterClass::attribute_factory(vector &att_list) { /*----- PROTECTED REGION ID(DataImporterClass::attribute_factory_before) ENABLED START -----*/ // Add your own code /*----- PROTECTED REGION END -----*/ // DataImporterClass::attribute_factory_before // Create a list of static attributes create_static_attribute_list(get_class_attr()->get_attr_list()); /*----- PROTECTED REGION ID(DataImporterClass::attribute_factory_after) ENABLED START -----*/ // Add your own code /*----- PROTECTED REGION END -----*/ // DataImporterClass::attribute_factory_after } //-------------------------------------------------------- /** * Method : DataImporterClass::command_factory() * Description : Create the command object(s) * and store them in the command list */ //-------------------------------------------------------- void DataImporterClass::command_factory() { /*----- PROTECTED REGION ID(DataImporterClass::command_factory_before) ENABLED START -----*/ // Add your own code /*----- PROTECTED REGION END -----*/ // DataImporterClass::command_factory_before // Command On OnClass *pOnCmd = new OnClass("On", Tango::DEV_VOID, Tango::DEV_VOID, "", "", Tango::OPERATOR); command_list.push_back(pOnCmd); // Command Off OffClass *pOffCmd = new OffClass("Off", Tango::DEV_VOID, Tango::DEV_VOID, "", "", Tango::OPERATOR); command_list.push_back(pOffCmd); /*----- PROTECTED REGION ID(DataImporterClass::command_factory_after) ENABLED START -----*/ // Add your own code /*----- PROTECTED REGION END -----*/ // DataImporterClass::command_factory_after } //=================================================================== // Dynamic attributes related methods //=================================================================== //-------------------------------------------------------- /** * method : DataImporterClass::create_static_attribute_list * description : Create the a list of static attributes * * @param att_list the ceated attribute list */ //-------------------------------------------------------- void DataImporterClass::create_static_attribute_list(vector &att_list) { for (unsigned long i=0 ; iget_name()); transform(att_name.begin(), att_name.end(), att_name.begin(), ::tolower); defaultAttList.push_back(att_name); } cout2 << defaultAttList.size() << " attributes in default list" << endl; /*----- PROTECTED REGION ID(DataImporterClass::create_static_att_list) ENABLED START -----*/ /*----- PROTECTED REGION END -----*/ // DataImporterClass::create_static_att_list } //-------------------------------------------------------- /** * method : DataImporterClass::erase_dynamic_attributes * description : delete the dynamic attributes if any. * * @param devlist_ptr the device list pointer * @param list of all attributes */ //-------------------------------------------------------- void DataImporterClass::erase_dynamic_attributes(const Tango::DevVarStringArray *devlist_ptr, vector &att_list) { Tango::Util *tg = Tango::Util::instance(); for (unsigned long i=0 ; ilength() ; i++) { Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str()); DataImporter *dev = static_cast (dev_impl); vector &dev_att_list = dev->get_device_attr()->get_attribute_list(); vector::iterator ite_att; for (ite_att=dev_att_list.begin() ; ite_att != dev_att_list.end() ; ++ite_att) { string att_name((*ite_att)->get_name_lower()); if ((att_name == "state") || (att_name == "status")) continue; vector::iterator ite_str = find(defaultAttList.begin(), defaultAttList.end(), att_name); if (ite_str == defaultAttList.end()) { cout2 << att_name << " is a UNWANTED dynamic attribute for device " << (*devlist_ptr)[i] << endl; Tango::Attribute &att = dev->get_device_attr()->get_attr_by_name(att_name.c_str()); dev->remove_attribute(att_list[att.get_attr_idx()], true, false); --ite_att; } } } /*----- PROTECTED REGION ID(DataImporterClass::erase_dynamic_attributes) ENABLED START -----*/ /*----- PROTECTED REGION END -----*/ // DataImporterClass::erase_dynamic_attributes } //-------------------------------------------------------- /** * Method : DataImporterClass::get_attr_by_name() * Description : returns Tango::Attr * object found by name */ //-------------------------------------------------------- Tango::Attr *DataImporterClass::get_attr_object_by_name(vector &att_list, string attname) { vector::iterator it; for (it=att_list.begin() ; itget_name()==attname) return (*it); // Attr does not exist return NULL; } /*----- PROTECTED REGION ID(DataImporterClass::Additional Methods) ENABLED START -----*/ /*----- PROTECTED REGION END -----*/ // DataImporterClass::Additional Methods } // namespace