// NOLINTBEGIN(*)

/*----- PROTECTED REGION ID(FwdTestClass.h) ENABLED START -----*/
/* clang-format on */
// SPDX-FileCopyrightText: 2014 Copyright contributors to the cppTango project
// SPDX-License-Identifier: LGPL-3.0-or-later
//=============================================================================
//
// file :        FwdTestClass.h
//
// description : Include for the FwdTest root class.
//               This class is the singleton class for
//                the FwdTest device class.
//               It contains all properties and methods which the
//               FwdTest requires only once e.g. the commands.
//
// project :
//
// This file is part of Tango device class.
//
//
//=============================================================================
//                This file is generated by POGO
//        (Program Obviously used to Generate tango Object)
//=============================================================================

#ifndef TANGO_TEST_DEVICE_SERVER_FORWARD_FWDTESTCLASS_H
  #define TANGO_TEST_DEVICE_SERVER_FORWARD_FWDTESTCLASS_H

  #include "FwdTest.h"

  #include <tango/common/defines.h>
  #include <tango/tango.h>

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


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

class FwdAttrScaSh : public Tango::FwdAttr
{
  public:
    FwdAttrScaSh(const std::string &_n) :
        FwdAttr(_n)
    {
    }

    ~FwdAttrScaSh() { }
};

class FwdAttrScaStr : public Tango::FwdAttr
{
  public:
    FwdAttrScaStr(const std::string &_n) :
        FwdAttr(_n)
    {
    }

    ~FwdAttrScaStr() { }
};

class FwdAttrSpecDb : public Tango::FwdAttr
{
  public:
    FwdAttrSpecDb(const std::string &_n) :
        FwdAttr(_n)
    {
    }

    ~FwdAttrSpecDb() { }
};

class FwdAttrImaStr : public Tango::FwdAttr
{
  public:
    FwdAttrImaStr(const std::string &_n) :
        FwdAttr(_n)
    {
    }

    ~FwdAttrImaStr() { }
};

class FwdAttrScaSta : public Tango::FwdAttr
{
  public:
    FwdAttrScaSta(const std::string &_n) :
        FwdAttr(_n)
    {
    }

    ~FwdAttrScaSta() { }
};

class FwdAttrImaStrRead : public Tango::FwdAttr
{
  public:
    FwdAttrImaStrRead(const std::string &_n) :
        FwdAttr(_n)
    {
    }

    ~FwdAttrImaStrRead() { }
};

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

/**
 *	The FwdTestClass singleton definition
 */

#ifdef _TG_WINDOWS_
class __declspec(dllexport)  FwdTestClass : public Tango::DeviceClass
#else
class FwdTestClass : public Tango::DeviceClass
#endif
{
	/*----- PROTECTED REGION ID(FwdTestClass::Additional DServer data members) ENABLED START -----*/
    /* clang-format on */
    //	Add your own code
    /* clang-format off */
	/*----- PROTECTED REGION END -----*/	//	FwdTestClass::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 FwdTestClass *init(const char *);
		static FwdTestClass *instance();
		~FwdTestClass();
		Tango::DbDatum	get_class_property(std::string &);
		Tango::DbDatum	get_default_device_property(std::string &);
		Tango::DbDatum	get_default_class_property(std::string &);

	protected:
		FwdTestClass(std::string &);
		static FwdTestClass *_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   //	FwdTest_H

 // NOLINTEND(*)
