Skip to content
DataImporterClass.cpp 37.7 KiB
Newer Older
Marco De Marco's avatar
Marco De Marco committed
			string	strtag = strloc.substr(start, end-start-1);
Marco De Marco's avatar
Marco De Marco committed
			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<string> 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 -----*/
Marco De Marco's avatar
Marco De Marco committed
	//	Add your own code
Marco De Marco's avatar
Marco De Marco committed
	/*----- PROTECTED REGION END -----*/	//	DataImporterClass::device_factory_before

	//	Create devices and add it into the device list
	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
	{
		cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
		device_list.push_back(new DataImporter(this, (*devlist_ptr)[i]));							 
Marco De Marco's avatar
Marco De Marco committed
	}

	//	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<DataImporter *>(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 -----*/
Marco De Marco's avatar
Marco De Marco committed
	//	Add your own code
Marco De Marco's avatar
Marco De Marco committed
	/*----- 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<Tango::Attr *> &att_list)
{
	/*----- PROTECTED REGION ID(DataImporterClass::attribute_factory_before) ENABLED START -----*/
Marco De Marco's avatar
Marco De Marco committed
	//	Add your own code
Marco De Marco's avatar
Marco De Marco committed
	/*----- PROTECTED REGION END -----*/	//	DataImporterClass::attribute_factory_before
	//	Attribute : RegularFileCounter
	RegularFileCounterAttrib	*regularfilecounter = new RegularFileCounterAttrib();
	Tango::UserDefaultAttrProp	regularfilecounter_prop;
	//	description	not set for RegularFileCounter
	//	label	not set for RegularFileCounter
	//	unit	not set for RegularFileCounter
	//	standard_unit	not set for RegularFileCounter
	//	display_unit	not set for RegularFileCounter
	//	format	not set for RegularFileCounter
	//	max_value	not set for RegularFileCounter
	//	min_value	not set for RegularFileCounter
	//	max_alarm	not set for RegularFileCounter
	//	min_alarm	not set for RegularFileCounter
	//	max_warning	not set for RegularFileCounter
	//	min_warning	not set for RegularFileCounter
	//	delta_t	not set for RegularFileCounter
	//	delta_val	not set for RegularFileCounter
	
	regularfilecounter->set_default_properties(regularfilecounter_prop);
	//	Not Polled
	regularfilecounter->set_disp_level(Tango::OPERATOR);
	//	Not Memorized
	att_list.push_back(regularfilecounter);

	//	Attribute : FailedFileCounter
	FailedFileCounterAttrib	*failedfilecounter = new FailedFileCounterAttrib();
	Tango::UserDefaultAttrProp	failedfilecounter_prop;
	//	description	not set for FailedFileCounter
	//	label	not set for FailedFileCounter
	//	unit	not set for FailedFileCounter
	//	standard_unit	not set for FailedFileCounter
	//	display_unit	not set for FailedFileCounter
	//	format	not set for FailedFileCounter
	//	max_value	not set for FailedFileCounter
	//	min_value	not set for FailedFileCounter
	//	max_alarm	not set for FailedFileCounter
	//	min_alarm	not set for FailedFileCounter
	//	max_warning	not set for FailedFileCounter
	//	min_warning	not set for FailedFileCounter
	//	delta_t	not set for FailedFileCounter
	//	delta_val	not set for FailedFileCounter
	
	failedfilecounter->set_default_properties(failedfilecounter_prop);
	//	Not Polled
	failedfilecounter->set_disp_level(Tango::OPERATOR);
	//	Not Memorized
	att_list.push_back(failedfilecounter);

Marco De Marco's avatar
Marco De Marco committed
	//	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 -----*/
Marco De Marco's avatar
Marco De Marco committed
	//	Add your own code
Marco De Marco's avatar
Marco De Marco committed
	/*----- 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 -----*/
Marco De Marco's avatar
Marco De Marco committed
	//	Add your own code
Marco De Marco's avatar
Marco De Marco committed
	/*----- 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);

	//	Command ResetCounter
	ResetCounterClass	*pResetCounterCmd =
		new ResetCounterClass("ResetCounter",
			Tango::DEV_VOID, Tango::DEV_VOID,
			"",
			"",
			Tango::OPERATOR);
	command_list.push_back(pResetCounterCmd);

Marco De Marco's avatar
Marco De Marco committed
	/*----- PROTECTED REGION ID(DataImporterClass::command_factory_after) ENABLED START -----*/
Marco De Marco's avatar
Marco De Marco committed
	//	Add your own code
Marco De Marco's avatar
Marco De Marco committed
	/*----- 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 
Marco De Marco's avatar
Marco De Marco committed
 */
//--------------------------------------------------------
void DataImporterClass::create_static_attribute_list(vector<Tango::Attr *> &att_list)
{
	for (unsigned long i=0 ; i<att_list.size() ; i++)
	{
		string att_name(att_list[i]->get_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 -----*/
Marco De Marco's avatar
Marco De Marco committed
	/*----- 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<Tango::Attr *> &att_list)
{
	Tango::Util *tg = Tango::Util::instance();

	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
Marco De Marco's avatar
Marco De Marco committed
		Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str());
		DataImporter *dev = static_cast<DataImporter *> (dev_impl);
Marco De Marco's avatar
Marco De Marco committed
		vector<Tango::Attribute *> &dev_att_list = dev->get_device_attr()->get_attribute_list();
		vector<Tango::Attribute *>::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<string>::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 -----*/
Marco De Marco's avatar
Marco De Marco committed
	/*----- 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<Tango::Attr *> &att_list, string attname)
{
	vector<Tango::Attr *>::iterator it;
	for (it=att_list.begin() ; it<att_list.end() ; it++)
		if ((*it)->get_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