diff --git a/Makefile b/Makefile index 8bef81e8b3df7a536ad344e3378d26b847f5dab7..b284cad716cce1487c61bbee05dfd0d12ce5e1f1 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,8 @@ EXEC_NAME=dataImporter-srv INST_NAME=test DEBUG_LEV=-v3 INSTALL_DIR=/usr/local/bin +VERSION := `git describe --tags` +TAR_NAME := `basename $(PWD)` #================================================================================ INC_DIR=/usr/local/omniORB/include \ /usr/local/zeromq/include/zmq \ @@ -29,7 +31,7 @@ LDFLAGS=-Wall -lomniORB4 -lomniDynamic4 -lCOS4 -lomnithread -ltango -llog4tango -lboost_filesystem -lboost_date_time -lprotobuf -lssl -lcrypto -lpthread INC_PARM=$(foreach d, $(INC_DIR), -I$d) LIB_PARM=$(foreach d, $(LIB_DIR), -L$d) -PROTOC :=/usr/local/protobuf-2.5.0/bin/protoc +PROTOC :=/usr/local/protobuf/bin/protoc #================================================================================ SRC_DIR=./src OBJ_DIR=./obj @@ -91,6 +93,10 @@ deepclean: install: -cp $(EXECUTABLE) $(INSTALL_DIR) +.PHONY: tar +tar: + -tar -czvf $(TAR_NAME)_$(VERSION).tar.gz --transform="s|^.|$(TAR_NAME)_$(VERSION)/|" $(PROTO_DIR) $(SRC_DIR) ./Makefile + .PHONY: echo echo: @echo EXECUTABLE: diff --git a/src/Configuration.h b/src/Configuration.h index 0ba9b20e32c4cbb8a990bfc64d0b50f3b88867f8..2e4145537e1bfb719452e2450b8a8fb5acff62c6 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -21,6 +21,7 @@ private: Configuration(std::string certificateFile, std::string storagePath, 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, @@ -32,6 +33,7 @@ private: m_certificateFile (certificateFile), m_storagePath(storagePath), m_remoteHost(remoteHost), m_remotePort(remotePort), m_remoteUsername(remoteUsername), m_remotePassword(remotePassword), + m_remoteSchema(remoteSchema), m_remoteTable(remoteTable), m_databaseHost(databaseHost), m_databasePort(databasePort), m_databaseUsername(databaseUsername), m_databasePassword(databasePassword), m_databaseSchema(databaseSchema), @@ -62,6 +64,7 @@ public: static Configuration::SP create(std::string certificateFile, std::string storagePath, 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, @@ -72,7 +75,7 @@ public: std::string auxDatabaseFailedTable, std::string whereCondition) { Configuration::SP c_sp(new Configuration(certificateFile, storagePath, - remoteHost, remotePort, remoteUsername, remotePassword, databaseHost, + remoteHost, remotePort, remoteUsername, remotePassword, remoteSchema, remoteTable, databaseHost, databasePort, databaseUsername, databasePassword, databaseSchema, databaseTable, refreshTime, timeout, recoveryTime, auxDatabaseHost, auxDatabasePort, auxDatabaseUsername, auxDatabasePassword, @@ -91,6 +94,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; } @@ -131,6 +136,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/DataImporter.cpp b/src/DataImporter.cpp index 4955f0d9a5fec986aba538643edc4c20949ee206..d2c4e510257c4c4ecd79a87b6e22afb4ca4021ff 100644 --- a/src/DataImporter.cpp +++ b/src/DataImporter.cpp @@ -220,6 +220,8 @@ void DataImporter::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")); @@ -319,6 +321,28 @@ void DataImporter::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; @@ -559,6 +583,14 @@ void DataImporter::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(databaseHost.empty()) throw(invalid_argument("DatabaseHost property is empty or not defined")); @@ -608,7 +640,7 @@ void DataImporter::get_device_property() throw(invalid_argument("AuxDatabaseFailedTable property is empty or not defined")); m_configuration_sp = Configuration::create(certificateFile, storagePath, - remoteHost, remotePort, remoteUsername, remotePassword, databaseHost, + remoteHost, remotePort, remoteUsername, remotePassword, remoteSchema, remoteTable, databaseHost, databasePort, databaseUsername, databasePassword, databaseSchema, databaseTable, refreshTime, timeout, recoveryTime, auxDatabaseHost, auxDatabasePort, auxDatabaseUsername, auxDatabasePassword, diff --git a/src/DataImporter.h b/src/DataImporter.h index 0e81f614410aa0d9dc4de6e7feb8182c45830dcd..91984f34f4a71c7c56be53dc358adc35479f31cc 100644 --- a/src/DataImporter.h +++ b/src/DataImporter.h @@ -107,6 +107,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/DataImporter.xmi b/src/DataImporter.xmi index 8866ef05e18bb8df618540e402407b01bb9ad36f..e95bad7bbc31d5f61ff2b0a95e0d449588ccafaa 100644 --- a/src/DataImporter.xmi +++ b/src/DataImporter.xmi @@ -65,6 +65,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/DataImporterClass.cpp b/src/DataImporterClass.cpp index c4536aa6f35e31d46cb744d16024ee7d8e416f4a..560c5fa3bc72c621e8477b5515101de0704decc0 100644 --- a/src/DataImporterClass.cpp +++ b/src/DataImporterClass.cpp @@ -684,6 +684,19 @@ void DataImporterClass::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 = "DatabaseSchema"; @@ -697,6 +710,19 @@ void DataImporterClass::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 = "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 7dd11789fe6b4dc0a7f0bbed6ac6f56d00158052..24fc65cab4ccf23bc397bb9e527dc6bc002d9c14 100644 --- a/src/ProtocolManager.cpp +++ b/src/ProtocolManager.cpp @@ -382,8 +382,8 @@ RequestSP ProtocolManager::fillRequest(DBManager::FileRowset::const_iterator it) request_sp->set_username(m_configuration_sp->getDatabaseUsername()); request_sp->set_password(m_configuration_sp->getDatabasePassword()); - request_sp->set_schema(m_configuration_sp->getDatabaseSchema()); - request_sp->set_table(m_configuration_sp->getDatabaseTable()); + request_sp->set_schema(m_configuration_sp->getRemoteSchema()); + request_sp->set_table(m_configuration_sp->getRemoteTable()); if(!it->get<2>()) throw std::runtime_error("Empty file version found");