/*----- PROTECTED REGION ID(SupervisedIDClass.cpp) ENABLED START -----*/
//=============================================================================
//
// file :        SupervisedIDClass.cpp
//
// description : C++ source for the SupervisedIDClass. A singleton
//               class derived from DeviceClass. It implements the
//               command list and all properties and methods required
//               by the �name� once per process.
//
// project :     Supervised ID: common interface for supervised insertion devices.
//
// $Author: claudio $
//
// $Revision: 1.2 $
// $Date: 2014-04-14 14:51:54 $
//
// SVN only:
// $HeadURL:  $
//
// CVS only:
// $Source: /home/cvsadm/cvsroot/AbstractClasses7/SupervisedID/SupervisedIDClass.cpp,v $
// $Log: SupervisedIDClass.cpp,v $
// Revision 1.2  2014-04-14 14:51:54  claudio
// for 8.1.2.c and pogo-8
//
// Revision 1.1.1.1  2012-03-05 14:01:56  claudio
// frist import
//
//
//=============================================================================
//                This file is generated by POGO
//        (Program Obviously used to Generate tango Object)
//=============================================================================


#include <SupervisedIDClass.h>

/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass.cpp

//-------------------------------------------------------------------
/**
 *	Create SupervisedIDClass singleton and
 *	return it in a C function for Python usage
 */
//-------------------------------------------------------------------
extern "C" {
#ifdef _TG_WINDOWS_

__declspec(dllexport)

#endif

	Tango::DeviceClass *_create_SupervisedID_class(const char *name) {
		return SupervisedID_ns::SupervisedIDClass::init(name);
	}
}

namespace SupervisedID_ns
{
//===================================================================
//	Initialize pointer for singleton pattern
//===================================================================
SupervisedIDClass *SupervisedIDClass::_instance = NULL;

//--------------------------------------------------------
/**
 * method : 		SupervisedIDClass::SupervisedIDClass(string &s)
 * description : 	constructor for the SupervisedIDClass
 *
 * @param s	The class name
 */
//--------------------------------------------------------
SupervisedIDClass::SupervisedIDClass(string &s):Tango::DeviceClass(s)
{
	cout2 << "Entering SupervisedIDClass constructor" << endl;
	set_default_property();
	write_class_property();

	/*----- PROTECTED REGION ID(SupervisedIDClass::constructor) ENABLED START -----*/

	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::constructor

	cout2 << "Leaving SupervisedIDClass constructor" << endl;
}

//--------------------------------------------------------
/**
 * method : 		SupervisedIDClass::~SupervisedIDClass()
 * description : 	destructor for the SupervisedIDClass
 */
//--------------------------------------------------------
SupervisedIDClass::~SupervisedIDClass()
{
	/*----- PROTECTED REGION ID(SupervisedIDClass::destructor) ENABLED START -----*/

	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::destructor

	_instance = NULL;
}


//--------------------------------------------------------
/**
 * method : 		SupervisedIDClass::init
 * description : 	Create the object if not already done.
 *                  Otherwise, just return a pointer to the object
 *
 * @param	name	The class name
 */
//--------------------------------------------------------
SupervisedIDClass *SupervisedIDClass::init(const char *name)
{
	if (_instance == NULL)
	{
		try
		{
			string s(name);
			_instance = new SupervisedIDClass(s);
		}
		catch (bad_alloc &)
		{
			throw;
		}
	}
	return _instance;
}

//--------------------------------------------------------
/**
 * method : 		SupervisedIDClass::instance
 * description : 	Check if object already created,
 *                  and return a pointer to the object
 */
//--------------------------------------------------------
SupervisedIDClass *SupervisedIDClass::instance()
{
	if (_instance == NULL)
	{
		cerr << "Class is not initialised !!" << endl;
		exit(-1);
	}
	return _instance;
}



//===================================================================
//	Command execution method calls
//===================================================================

//===================================================================
//	Properties management
//===================================================================
//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::get_class_property()
 *	Description : Get the class property for specified name.
 */
//--------------------------------------------------------
Tango::DbDatum SupervisedIDClass::get_class_property(string &prop_name)
{
	for (unsigned int i=0 ; i<cl_prop.size() ; i++)
		if (cl_prop[i].name == prop_name)
			return cl_prop[i];
	//	if not found, returns  an empty DbDatum
	return Tango::DbDatum(prop_name);
}

//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::get_default_device_property()
 *	Description : Return the default value for device property.
 */
//--------------------------------------------------------
Tango::DbDatum SupervisedIDClass::get_default_device_property(string &prop_name)
{
	for (unsigned int i=0 ; i<dev_def_prop.size() ; i++)
		if (dev_def_prop[i].name == prop_name)
			return dev_def_prop[i];
	//	if not found, return  an empty DbDatum
	return Tango::DbDatum(prop_name);
}

//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::get_default_class_property()
 *	Description : Return the default value for class property.
 */
//--------------------------------------------------------
Tango::DbDatum SupervisedIDClass::get_default_class_property(string &prop_name)
{
	for (unsigned int i=0 ; i<cl_def_prop.size() ; i++)
		if (cl_def_prop[i].name == prop_name)
			return cl_def_prop[i];
	//	if not found, return  an empty DbDatum
	return Tango::DbDatum(prop_name);
}


//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::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 SupervisedIDClass::set_default_property()
{
	string	prop_name;
	string	prop_desc;
	string	prop_def;
	vector<string>	vect_data;

	//	Set Default Class Properties

	//	Set Default device Properties
	prop_name = "HostPrivileges";
	prop_desc = "list of host:privileges\nhost:2   host is privileged can read and write and change limits and change permission\nhost:1  host is authorized can read and write when permitted\nhost:0 host can only read";
	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      : SupervisedIDClass::write_class_property()
 *	Description : Set class description fields as property in database
 */
//--------------------------------------------------------
void SupervisedIDClass::write_class_property()
{
}

//===================================================================
//	Factory methods
//===================================================================

//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::device_factory()
 *	Description : Create the device object(s)
 *                and store them in the device list
 */
//--------------------------------------------------------
void SupervisedIDClass::device_factory(const Tango::DevVarStringArray *devlist_ptr)
{
//	This class is not concrete and cannot implement devices
}
//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::attribute_factory()
 *	Description : Create the attribute object(s)
 *                and store them in the attribute list
 */
//--------------------------------------------------------
void SupervisedIDClass::attribute_factory(vector<Tango::Attr *> &att_list)
{
	/*----- PROTECTED REGION ID(SupervisedIDClass::attribute_factory_before) ENABLED START -----*/

	//	Add your own code

	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::attribute_factory_before




	/*----- PROTECTED REGION ID(SupervisedIDClass::attribute_factory_after) ENABLED START -----*/
	
	//	Add your own code
	
	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::attribute_factory_after
}
//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::pipe_factory()
 *	Description : Create the pipe object(s)
 *                and store them in the pipe list
 */
//--------------------------------------------------------
void SupervisedIDClass::pipe_factory()
{
	/*----- PROTECTED REGION ID(SupervisedIDClass::pipe_factory_before) ENABLED START -----*/
	
	//	Add your own code
	
	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::pipe_factory_before
	/*----- PROTECTED REGION ID(SupervisedIDClass::pipe_factory_after) ENABLED START -----*/
	
	//	Add your own code
	
	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::pipe_factory_after
}
//--------------------------------------------------------
/**
 *	Method      : SupervisedIDClass::command_factory()
 *	Description : Create the command object(s)
 *                and store them in the command list
 */
//--------------------------------------------------------
void SupervisedIDClass::command_factory()
{
	/*----- PROTECTED REGION ID(SupervisedIDClass::command_factory_before) ENABLED START -----*/

	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::command_factory_before


	/*----- PROTECTED REGION ID(SupervisedIDClass::command_factory_after) ENABLED START -----*/

	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::command_factory_after
}


/*----- PROTECTED REGION ID(SupervisedIDClass::Additional Methods) ENABLED START -----*/

	/*----- PROTECTED REGION END -----*/	//	SupervisedIDClass::Additional Methods
} //	namespace