/*----- PROTECTED REGION ID(MegaCoffee3kClass.h) ENABLED START -----*/
/* clang-format on */
//=============================================================================
//
// file :        MegaCoffee3kClass.h
//
// description : Include for the MegaCoffee3k root class.
//               This class is the singleton class for
//                the MegaCoffee3k device class.
//               It contains all properties and methods which the
//               MegaCoffee3k requires only once e.g. the commands.
//
// project :     Tango MegaCorp Coffee machines 3000 series
//
// This file is part of Tango device class.
//
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
//
//
//
//=============================================================================
//                This file is generated by POGO
//        (Program Obviously used to Generate tango Object)
//=============================================================================


#ifndef MegaCoffee3kClass_H
#define MegaCoffee3kClass_H

#include <tango/tango.h>
#include "MegaCoffee3k.h"

/* clang-format off */
/*----- PROTECTED REGION END -----*/	//	MegaCoffee3kClass.h


namespace MegaCoffee3k_ns
{
/*----- PROTECTED REGION ID(MegaCoffee3kClass::classes for dynamic creation) ENABLED START -----*/
/* clang-format on */

/* clang-format off */
/*----- PROTECTED REGION END -----*/	//	MegaCoffee3kClass::classes for dynamic creation

/**
 *	The MegaCoffee3kClass singleton definition
 */

#ifdef _TG_WINDOWS_
class __declspec(dllexport)  MegaCoffee3kClass : public Tango::DeviceClass
#else
class MegaCoffee3kClass : public Tango::DeviceClass
#endif
{
	/*----- PROTECTED REGION ID(MegaCoffee3kClass::Additional DServer data members) ENABLED START -----*/
	/* clang-format on */
	//	Add your own code
	/* clang-format off */
	/*----- PROTECTED REGION END -----*/	//	MegaCoffee3kClass::Additional DServer data members

	public:
		//	write class properties data members
		Tango::DbData	cl_prop;
		Tango::DbData	cl_def_prop;
		Tango::DbData	dev_def_prop;
		//	Method prototypes
		static MegaCoffee3kClass *init(const char *);
		static MegaCoffee3kClass *instance();
		~MegaCoffee3kClass();
		Tango::DbDatum	get_class_property(std::string &);
		Tango::DbDatum	get_default_device_property(std::string &);
		Tango::DbDatum	get_default_class_property(std::string &);

	protected:
		MegaCoffee3kClass(std::string &);
		static MegaCoffee3kClass *_instance;
		void command_factory();
		void attribute_factory(std::vector<Tango::Attr *> &);
		void pipe_factory();
		void write_class_property();
		void set_default_property();
		void get_class_property();
		std::string get_cvstag();
		std::string get_cvsroot();

	private:
		void device_factory(TANGO_UNUSED(const Tango::DevVarStringArray *));
		void create_static_attribute_list(std::vector<Tango::Attr *> &);
		void erase_dynamic_attributes(const Tango::DevVarStringArray *,std::vector<Tango::Attr *> &);
		std::vector<std::string>	defaultAttList;
		Tango::Attr *get_attr_object_by_name(std::vector<Tango::Attr *> &att_list, std::string attname);
};

}	//	End of namespace

#endif   //	MegaCoffee3k_H
