GetClbInfoByIndexCreator.hh 5.82 KB
/*
 * GetClbInfoByIndexCreator.hh
 *
 *  Created on: Sep 24, 2015
 *      Author: AKKA
 */

#ifndef GetClbInfoByIndexCREATOR_HH_
#define GetClbInfoByIndexCREATOR_HH_

#include "DicError.hh"
#include "AMDA_exception.hh"

#include "ParamData.hh"
#include "VisitorOfParamData.hh"
#include "GetClbInfoByIndex.hh"

namespace AMDA {
namespace GetClbInfoByIndex {

/**
 * @class GetClbInfoByIndexCreator
 * @brief Creator of the Operation GetClbInfoByIndex parameterized with ParamData input type.
 * @details Implement the interface VisitorOfParamData.
 */
class GetClbInfoByIndexCreator : public VisitorOfParamData {
public:
	/**
	 * @brief Constructor.
	 */
	GetClbInfoByIndexCreator(Process& pProcess, ParamData& paramInput)
		: _process(pProcess), _paramData(paramInput), _operation(NULL) {

		_paramData.accept(*this);
	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataScalaireShort *)
	 */
	void visit(ParamDataScalaireShort *) {_operation = new GetClbInfoByIndex<ParamDataScalaireShort>( _process, dynamic_cast<ParamDataScalaireShort &>(_paramData));}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataScalaireFloat *)
	 */
	void visit(ParamDataScalaireFloat *) {_operation = new GetClbInfoByIndex<ParamDataScalaireFloat>( _process, dynamic_cast<ParamDataScalaireFloat &>(_paramData));}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataScalaireDouble *)
	 */
	void visit(ParamDataScalaireDouble *) {_operation = new GetClbInfoByIndex<ParamDataScalaireDouble>(  _process,dynamic_cast<ParamDataScalaireDouble &>(_paramData));}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataScalaireLongDouble *)
	 */
	void visit(ParamDataScalaireLongDouble *) {_operation = new GetClbInfoByIndex<ParamDataScalaireLongDouble>( _process, dynamic_cast<ParamDataScalaireLongDouble &>(_paramData));}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataScalaireInt *)
	 */
	void visit(ParamDataScalaireInt *) {_operation = new GetClbInfoByIndex<ParamDataScalaireInt>( _process, dynamic_cast<ParamDataScalaireInt &>(_paramData));}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataLogicalData *)
	 */
	void visit(ParamDataLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported")); }

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab1DShort *)
	 */
	void visit(ParamDataTab1DShort *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported")); }

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab1DFloat *)
	 */
	void visit(ParamDataTab1DFloat *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported")); }

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab1DDouble *)
	 */
	void visit(ParamDataTab1DDouble *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported")); }

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab1DLongDouble *)
	 */
	void visit(ParamDataTab1DLongDouble *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported")); }

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab1DInt *)
	 */
	void visit(ParamDataTab1DInt *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported")); }

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab1DLogicalData *)
	 */
	void visit(ParamDataTab1DLogicalData *) {	BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("GetClbInfoCreator operation not supported"));	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab2DShort *)
	 */
	void visit(ParamDataTab2DShort *) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("ParamDataTab2DShort data not supported"));
	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab2DFloat *)
	 */
	void visit(ParamDataTab2DFloat *) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("ParamDataTab2DFloat data not supported"));
	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab2DDouble *)
	 */
	void visit(ParamDataTab2DDouble *) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("ParamDataTab2DDouble data not supported"));
	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab2DLongDouble *)
	 */
	void visit(ParamDataTab2DLongDouble *) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("ParamDataTab2DLongDouble data not supported"));
	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab2DInt *)
	 */
	void visit(ParamDataTab2DInt *) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("ParamDataTab2DInt data not supported"));
	}

	/**
	 * @overload VisitorOfParamData::visit(ParamDataTab2DLogicalData *)
	 */
	void visit(ParamDataTab2DLogicalData *) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("ParamDataTab2DLogicalData data not supported"));
	}

	/**
	 * @brief get the GetClbInfoByIndex parameterized operation.
	 */
	Operation * getOperation() const {	return _operation;	}

private:
	/**
	 * @brief a reference on the process of Calibration
	 */
	Process   &_process;

	/**
	 * @brief the input paramData
	 */
	ParamData &_paramData;

	/**
	 * @brief the operation which is created
	 */
	Operation *_operation;
};

} /* namespace GetClbInfoByIndex */
} /* namespace AMDA */
#endif /* GetClbInfoByIndexCREATOR_HH_ */