diff --git a/src/Configuration.h b/src/Configuration.h index 98bf4d6f0baff18aba0ed0cfa6a1cf0c9bf626d8..f54a8b23a14e0690e16c5f15c49465041f8b6658 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -21,13 +21,15 @@ private: Configuration(std::string certificateFile, std::string remoteHost, unsigned int remotePort, std::string remoteUsername, std::string remotePassword, + std::string remoteSchema, std::string remoteTable, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, std::string databaseSchema, std::string databaseTable, unsigned int refreshTime, unsigned int timeout) : m_certificateFile (certificateFile), m_remoteHost(remoteHost), m_remotePort(remotePort), m_remoteUsername(remoteUsername), - m_remotePassword(remotePassword), m_databaseHost(databaseHost), + m_remotePassword(remotePassword), m_remoteSchema(remoteSchema), + m_remoteTable(remoteTable), m_databaseHost(databaseHost), m_databasePort(databasePort), m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), m_databaseSchema(databaseSchema), m_databaseTable(databaseTable), m_refreshTime(refreshTime), @@ -50,13 +52,14 @@ public: static Configuration::SP create(std::string certificateFile, std::string remoteHost, unsigned int remotePort, std::string remoteUsername, std::string remotePassword, + std::string remoteSchema, std::string remoteTable, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, std::string databaseSchema, std::string databaseTable, unsigned int refreshTime, unsigned int timeout) { Configuration::SP c_sp(new Configuration(certificateFile, remoteHost, - remotePort, remoteUsername, remotePassword, databaseHost, + remotePort, remoteUsername, remotePassword, remoteSchema, remoteTable, databaseHost, databasePort, databaseUsername, databasePassword, databaseSchema, databaseTable, refreshTime, timeout), Configuration::Deleter()); @@ -72,6 +75,8 @@ public: unsigned int getRemotePort() const { return m_remotePort; } std::string getRemoteUsername() const { return m_remoteUsername; } std::string getRemotePassword() const { return m_remotePassword; } + std::string getRemoteSchema() const { return m_remoteSchema; } + std::string getRemoteTable() const { return m_remoteTable; } std::string getDatabaseHost() const { return m_databaseHost; } unsigned int getDatabasePort() const { return m_databasePort; } std::string getDatabaseUsername() const { return m_databaseUsername; } @@ -100,6 +105,12 @@ private: //Metadata exporter remote password const std::string m_remotePassword; + //Metadata remote database schema + const std::string m_remoteSchema; + + //Metadata remote database table + const std::string m_remoteTable; + //Metadata local database host const std::string m_databaseHost; diff --git a/src/MetadataImporter.cpp b/src/MetadataImporter.cpp index 51af1f0b0cb4fcde2822b5e84d152786cd41c07f..9d815659c20fc0e2fad021725ab56f5afd691a43 100644 --- a/src/MetadataImporter.cpp +++ b/src/MetadataImporter.cpp @@ -214,6 +214,8 @@ void MetadataImporter::get_device_property() dev_prop.push_back(Tango::DbDatum("RemotePort")); dev_prop.push_back(Tango::DbDatum("RemoteUsername")); dev_prop.push_back(Tango::DbDatum("RemotePassword")); + dev_prop.push_back(Tango::DbDatum("RemoteSchema")); + dev_prop.push_back(Tango::DbDatum("RemoteTable")); dev_prop.push_back(Tango::DbDatum("EnableSSL")); dev_prop.push_back(Tango::DbDatum("DatabaseHost")); dev_prop.push_back(Tango::DbDatum("DatabasePort")); @@ -293,6 +295,28 @@ void MetadataImporter::get_device_property() // And try to extract RemotePassword value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> remotePassword; + // Try to initialize RemoteSchema from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> remoteSchema; + else { + // Try to initialize RemoteSchema from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> remoteSchema; + } + // And try to extract RemoteSchema value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> remoteSchema; + + // Try to initialize RemoteTable from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> remoteTable; + else { + // Try to initialize RemoteTable from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> remoteTable; + } + // And try to extract RemoteTable value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> remoteTable; + // Try to initialize EnableSSL from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> enableSSL; @@ -421,6 +445,14 @@ void MetadataImporter::get_device_property() if(remotePassword.empty()) throw(invalid_argument("RemotePassword property is empty or not defined")); + // If remoteSchema is not set, use databaseSchema + if(remoteSchema.empty()) + remoteSchema=databaseSchema; + + // If remoteTable is not set, use databaseTable + if(remoteTable.empty()) + remoteTable=databaseTable; + if(enableSSL) { if(certificateFile.empty()) @@ -454,9 +486,9 @@ void MetadataImporter::get_device_property() throw(invalid_argument("Timeout property out of range or not defined")); m_configuration_sp = Configuration::create(certificateFile, - remoteHost, remotePort, remoteUsername, remotePassword, databaseHost, - databasePort, databaseUsername, databasePassword, databaseSchema, - databaseTable, refreshTime, timeout); + remoteHost, remotePort, remoteUsername, remotePassword, remoteSchema, remoteTable, databaseHost, + databasePort, databaseUsername, databasePassword, databaseSchema, + databaseTable, refreshTime, timeout); } catch(invalid_argument& ex) { diff --git a/src/MetadataImporter.h b/src/MetadataImporter.h index 591cadd7197e87b325897d6c43ad7dea963133ca..698b56847cf866852fa3d66883fd0455bd8b1ed4 100644 --- a/src/MetadataImporter.h +++ b/src/MetadataImporter.h @@ -100,6 +100,10 @@ public: string remoteUsername; // RemotePassword: Metadata exporter remote password string remotePassword; + // RemoteSchema: Metadata remote database schema + string remoteSchema; + // RemoteTable: Metadata remote database table + string remoteTable; // EnableSSL: Enable or disable SSL connections Tango::DevBoolean enableSSL; // DatabaseHost: Metadata local database host diff --git a/src/MetadataImporter.xmi b/src/MetadataImporter.xmi index 0705401d651e1291b68e4f7e7a3df1fc773d125a..e039d3e68e73c2e2ea1889157702201229459301 100644 --- a/src/MetadataImporter.xmi +++ b/src/MetadataImporter.xmi @@ -29,6 +29,14 @@ <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </deviceProperties> + <deviceProperties name="RemoteSchema" description="Metadata remote database schema"> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> + <deviceProperties name="RemoteTable" description="Metadata remote database table"> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> <deviceProperties name="EnableSSL" description="Enable or disable SSL connections"> <type xsi:type="pogoDsl:BooleanType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> diff --git a/src/MetadataImporterClass.cpp b/src/MetadataImporterClass.cpp index 1af697032539b3cc7a17fffa181922a4ae460f99..2a6106f60224916fa14f59d870ed50bd4ae28866 100644 --- a/src/MetadataImporterClass.cpp +++ b/src/MetadataImporterClass.cpp @@ -477,6 +477,32 @@ void MetadataImporterClass::set_default_property() 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 = "RemoteSchema"; + prop_desc = "Metadata remote 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 = "RemoteTable"; + prop_desc = "Metadata remote 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 = "DatabaseTable"; diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp index 41dd047c42e60aa60d0aaa753beeb74c7a27fca1..1885d1d4b687950225a02cf77f799cb330df05bb 100644 --- a/src/ProtocolManager.cpp +++ b/src/ProtocolManager.cpp @@ -177,13 +177,15 @@ RequestSP ProtocolManager::createValidation() throw(std::runtime_error) std::string schema = m_configuration_sp->getDatabaseSchema(); std::string table = m_configuration_sp->getDatabaseTable(); + std::string rschema = m_configuration_sp->getRemoteSchema(); + std::string rtable = m_configuration_sp->getRemoteTable(); - INFO_STREAM << "ProtocolManager::createValidation() Send schema " + INFO_STREAM << "ProtocolManager::createValidation() Send local schema " << schema << " table " << table << " to " << m_remoteEndpoint << endl; Request::Validation* validation = request_sp->mutable_validation(); - validation->set_schema(schema); - validation->set_table(table); + validation->set_schema(rschema); + validation->set_table(rtable); DBManager::InformationList informationList = m_dBManager_sp->retrieveInformation(schema, table); @@ -234,6 +236,8 @@ RequestSP ProtocolManager::createMetadata() std::string schema = m_configuration_sp->getDatabaseSchema(); std::string table = m_configuration_sp->getDatabaseTable(); + std::string rschema = m_configuration_sp->getRemoteSchema(); + std::string rtable = m_configuration_sp->getRemoteTable(); std::tm tmTimestamp = m_dBManager_sp->retrieveLastTimestamp(schema, table); @@ -241,7 +245,7 @@ RequestSP ProtocolManager::createMetadata() boost::posix_time::ptime_from_tm(tmTimestamp); INFO_STREAM << "ProtocolManager::createMetadata() Send schema " - << schema << " table " << table << " timestamp " + << rschema << " table " << rtable << " timestamp " << boost::posix_time::to_simple_string(ptTimestamp) << " to " << m_remoteEndpoint << endl; @@ -318,10 +322,12 @@ void ProtocolManager::processMetadata(ResponseSP response_sp) { std::string schema = m_configuration_sp->getDatabaseSchema(); std::string table = m_configuration_sp->getDatabaseTable(); + std::string rschema = m_configuration_sp->getRemoteSchema(); + std::string rtable = m_configuration_sp->getRemoteTable(); INFO_STREAM << "ProtocolManager::processMetadata() State ACCEPTED " - << "status " << metadata.status() << " schema " << schema - << " table " << table << " from " << m_remoteEndpoint << endl; + << "status " << metadata.status() << " schema " << rschema + << " table " << rtable << " from " << m_remoteEndpoint << endl; if(metadata.rows_size() != 0) {