Commit e8c33c7a authored by Marco De Marco's avatar Marco De Marco
Browse files

Ignore columns list added, to be tested

parent c0786b1d
Loading
Loading
Loading
Loading
+25 −12
Original line number Diff line number Diff line
@@ -33,15 +33,16 @@ protected:
        unsigned int localPort, unsigned int workerNumber,
        std::string databaseHost, unsigned int databasePort,
        std::string databaseUsername, std::string databasePassword,
        unsigned int databaseConnectionNumber, ExportedTablesMap exportedTablesMap,
        AuthorisedUsersMap authorisedUsersMap) :
        unsigned int databaseConnectionNumber, std::vector<std::string>& ignoreColumns,
        ExportedTablesMap& exportedTablesMap, AuthorisedUsersMap& authorisedUsersMap) :
        m_certificateFile(certificateFile), m_privateKeyFile(privateKeyFile),
        m_dHTempFile(dHTempFile), m_localHost(localHost),
        m_localPort(localPort), m_workerNumber(workerNumber),
        m_databaseHost(databaseHost), m_databasePort(databasePort),
        m_databaseUsername(databaseUsername), m_databasePassword(databasePassword),
        m_databaseConnectionNumber(databaseConnectionNumber),
        m_exportedTablesMap(exportedTablesMap), m_authorisedUsersMap(authorisedUsersMap) {}
        m_ignoreColumnList(ignoreColumns),m_exportedTablesMap(exportedTablesMap),
        m_authorisedUsersMap(authorisedUsersMap) {}

	virtual ~Configuration() {}

@@ -58,17 +59,18 @@ public:
//	[Public] Create class method
//------------------------------------------------------------------------------
	static Configuration::SP create(std::string certificateFile,
        std::string privateKeyFile, std::string dHTempFile,
        std::string localHost, unsigned int localPort,
        unsigned int workerNumber, std::string databaseHost,
        std::string privateKeyFile, std::string dHTempFile, std::string localHost,
        unsigned int localPort, unsigned int workerNumber, std::string databaseHost,
        unsigned int databasePort, std::string databaseUsername,
        std::string databasePassword, unsigned int databaseConnectionNumber,
        ExportedTablesMap exportedTablesMap, AuthorisedUsersMap authorisedUsersMap)
        std::vector<std::string>& ignoreColumns, ExportedTablesMap& exportedTablesMap,
        AuthorisedUsersMap& authorisedUsersMap)
	{
		Configuration::SP c_sp(new Configuration(certificateFile, privateKeyFile,
            dHTempFile, localHost, localPort, workerNumber, databaseHost,
            databasePort, databaseUsername, databasePassword, databaseConnectionNumber,
            exportedTablesMap, authorisedUsersMap), Configuration::Deleter());
            databasePort, databaseUsername, databasePassword,
            databaseConnectionNumber, ignoreColumns, exportedTablesMap,
            authorisedUsersMap), Configuration::Deleter());

		return c_sp;
	}
@@ -87,9 +89,6 @@ public:
	std::string getDatabaseUsername() const { return m_databaseUsername; }
	std::string getDatabasePassword() const { return m_databasePassword; }
    unsigned int getDatabaseConnectionNumber() const { return m_databaseConnectionNumber; }
    ExportedTablesMap& getExportedTablesMap() const { return m_exportedTablesMap; }
    AuthorisedUsersMap& getAuthorisedUsersMap() const { return m_authorisedUsersMap; }


//------------------------------------------------------------------------------
//	[Public] Utilities methods
@@ -122,6 +121,17 @@ public:
        return false;
    }

    bool isColumnIgnored(const std::string columnName)
    {
        std::vector<std::string>::const_iterator it;

        for(it=m_ignoreColumnList.begin(); it!=m_ignoreColumnList.end(); ++it)
            if(it->compare(columnName)==0)
                return true;

        return false;
    }

protected:
//------------------------------------------------------------------------------
//	[Private] class variables
@@ -159,6 +169,9 @@ protected:
    //Metadata database connections number
    const unsigned int m_databaseConnectionNumber;

    //Metadata ignored columns vector
    const std::vector<std::string> m_ignoreColumnList;

    //Exported tables multi map [schema table]
	ExportedTablesMap m_exportedTablesMap;

+44 −6
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ void MetadataExporter::init_device()
            //Start device if auto start enabled
            if(autoStart)
            {
                INFO_STREAM << "FitsImporter::init_device() auto start enabled " << endl;
                INFO_STREAM << "MetadataExporter::init_device() auto start enabled " << endl;
                on();
            }
        }
@@ -220,6 +220,7 @@ void MetadataExporter::get_device_property()
	dev_prop.push_back(Tango::DbDatum("ExportedTables"));
	dev_prop.push_back(Tango::DbDatum("AuthorisedUsers"));
	dev_prop.push_back(Tango::DbDatum("AutoStart"));
	dev_prop.push_back(Tango::DbDatum("IgnoreColumns"));

	//	is there at least one property to be read ?
	if (dev_prop.size()>0)
@@ -399,6 +400,17 @@ void MetadataExporter::get_device_property()
		//	And try to extract AutoStart value from database
		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  autoStart;

		//	Try to initialize IgnoreColumns from class property
		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
		if (cl_prop.is_empty()==false)	cl_prop  >>  ignoreColumns;
		else {
			//	Try to initialize IgnoreColumns from default device value
			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
			if (def_prop.is_empty()==false)	def_prop  >>  ignoreColumns;
		}
		//	And try to extract IgnoreColumns value from database
		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  ignoreColumns;

	}

	/*----- PROTECTED REGION ID(MetadataExporter::get_device_property_after) ENABLED START -----*/
@@ -457,10 +469,36 @@ void MetadataExporter::get_device_property()

        importAuthorisedUsers(authorisedUsers, authorisedUsersMap);

        m_configuration_sp = Configuration::create(certificateFile,
            privateKeyFile, dHTempFile, localHost, localPort, workerNumber,
            databaseHost, databasePort, databaseUsername, databasePassword,
            databaseConnectionNumber, exportedTablesMap, authorisedUsersMap);
        for(std::vector<std::string>::size_type i=0; i<ignoreColumns.size(); ++i)
        {
            std::string ignoreColumn = ignoreColumns.at(i);

            if(ignoreColumn.empty())
            {
                stringstream event_list_error;
                event_list_error << "IgnoreColumns property has an empty element"
                    << " at \"" << i << "\" position" << endl;
                throw(invalid_argument(event_list_error.str()));
            }

            if(ignoreColumn.compare("id")==0 ||
                ignoreColumn.compare("storage_path")==0 ||
                ignoreColumn.compare("file_path")==0 ||
                ignoreColumn.compare("file_version")==0 ||
                ignoreColumn.compare("file_name")==0 ||
                ignoreColumn.compare("update_time")==0)
            {
                stringstream event_list_error;
                event_list_error << "IgnoreColumns property has an invalid element"
                    << " at \"" << i << "\" position" << endl;
                throw(invalid_argument(event_list_error.str()));
            }
        }

        m_configuration_sp = Configuration::create(certificateFile, privateKeyFile,
            dHTempFile, localHost, localPort, workerNumber, databaseHost,
            databasePort, databaseUsername, databasePassword, databaseConnectionNumber,
            ignoreColumns, exportedTablesMap, authorisedUsersMap);
    }
    catch(invalid_argument& ex)
    {
@@ -481,7 +519,7 @@ void MetadataExporter::get_device_property()
//--------------------------------------------------------
void MetadataExporter::always_executed_hook()
{
	DEBUG_STREAM << "MetadataExporter::always_executed_hook()  " << device_name << endl;
	INFO_STREAM << "MetadataExporter::always_executed_hook()  " << device_name << endl;
	/*----- PROTECTED REGION ID(MetadataExporter::always_executed_hook) ENABLED START -----*/

    if(get_state() != Tango::FAULT)
+4 −0
Original line number Diff line number Diff line
@@ -123,6 +123,10 @@ public:
	vector<string>	authorisedUsers;
	//	AutoStart:	Exec On command after init if state is not fault
	Tango::DevBoolean	autoStart;
	//	IgnoreColumns:	Array of metadata columns that will not be exported.
	//  Mandatory column are:
	//  [id, storage_path, file_path, file_version, file_name, update_time]
	vector<string>	ignoreColumns;


//	Constructors and destructors
+4 −0
Original line number Diff line number Diff line
@@ -89,6 +89,10 @@
      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
      <DefaultPropValue>false</DefaultPropValue>
    </deviceProperties>
    <deviceProperties name="IgnoreColumns" description="Array of metadata columns that will not be exported.&#xA;Mandatory column are:&#xA;[id, storage_path, file_path, file_version, file_name, update_time]">
      <type xsi:type="pogoDsl:StringVectorType"/>
      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
    </deviceProperties>
    <commands name="State" description="This command gets the device state (stored in its device_state data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
      <argin description="none">
        <type xsi:type="pogoDsl:VoidType"/>
+13 −0
Original line number Diff line number Diff line
@@ -620,6 +620,19 @@ void MetadataExporterClass::set_default_property()
	}
	else
		add_wiz_dev_prop(prop_name, prop_desc);
	prop_name = "IgnoreColumns";
	prop_desc = "Array of metadata columns that will not be exported.\nMandatory column are:\n[id, storage_path, file_path, file_version, file_name, update_time]";
	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);
}

//--------------------------------------------------------
Loading