ParameterDescription.hh 4.52 KB
/*
 * ParameterDescription.hh
 *
 *  Created on: 5 nov 2014
 *      Author: AKKA
 */

#ifndef PARAMETERDESCRIPTION_H_
#define PARAMETERDESCRIPTION_H_

#include <iostream>
#include <string>
#include <vector>

namespace TimeTableCatalog {

/**
 * Catalog definition.
 */
class ParameterDescription {
public:
	enum class ParameterType{
		Unknown = -1,
		Double  = 0,
		Date    = 1,
		String  = 2,
		Integer = 3
	} ;

	ParameterDescription () :
		_id(""),
		_name(""),
		_size("1"),
		_type(ParameterType::Double),
		_unit(""),
		_description(""),
		_ucd(""),
		_utype("")
	{
                            setNull(_type);
	}

	ParameterDescription (
			const std::string &id,
			const std::string &name,
			const std::string &size,
			ParameterType type,
			const std::string &unit,
			const std::string &description,
			const std::string &ucd,
			const std::string &utype
			) :
			_id(id),
			_name(name),
			_size(size),
			_type(type),
			_unit(unit),
			_description(description),
			_ucd(ucd),
			_utype(utype)
	{
                           setNull(_type);
	}

	/**
	 * Parameter id getter
	 */
	const std::string& getId() const {
		return _id;
	}

	/**
	 * Parameter id setter
	 */
	void setId(const std::string& id) {
		_id = id;
	}

	/**
	 * Parameter name getter
	 */
	const std::string& getName() const {
		return _name;
	}

	/**
	 * Parameter name setter
	 */
	void setName(const std::string& name) {
		_name = name;
	}

	/**
	 * Parameter size getter
	 */
	const std::string& getSize() const {
		return _size;
	}

	/**
	 * Parameter size getter
	 */
	int getSizeAsInt();

	/**
	 * Parameter size setter
	 */
	void setSize(const std::string& size) {
		_size = size;
	}

	/**
	 * Parameter type getter
	 */
	ParameterType getType() const {
		return _type;
	}

	/**
	 * Parameter type setter
	 */
	void setType(ParameterType type) {
		_type = type;
	}

	/**
	 * Parameter units getter
	 */
	const std::string& getUnit() const {
		return _unit;
	}

	/**
	 * Parameter units setter
	 */
	void setUnit(const std::string& units) {
		_unit = units;
	}

	/**
	 * Parameter description getter
	 */
	const std::string& getDescription() const {
		return _description;
	}

	/**
	 * Parameter description setter
	 */
	void setDescription(const std::string& description) {
		_description = description;
	}

	/**
	 * Parameter ucd getter
	 */
	const std::string& getUcd() const {
		return _ucd;
	}

	/**
	 * Parameter ucd setter
	 */
	void setUcd(const std::string& ucd) {
		_ucd = ucd;
	}

	/**
	 * Parameter utype getter
	 */
	const std::string& getUtype() const {
		return _utype;
	}
        
        	/**
	 * Parameter utype getter
	 */
	const std::string& getNull() const {
		return _null;
	}

	/**
	 * Parameter utype setter
	 */
	void setUtype(const std::string& utype) {
		_utype = utype;
	}
        
                    void setNull(const std::string& null){
                                _null = null;
                    }
                    
                    void setNull(ParameterType type){
                        switch (type){
                            case ParameterType::Double:
                            case ParameterType::Integer:
                                _null = "0";
                                break;
                            case ParameterType::Unknown:
                            case ParameterType::String:
                                _null = "None";
                                        break;
                            case ParameterType::Date:
                                _null = "0001-01-01T00:00:00:00.000Z";
                                break; 
                            default:
                                _null = "0";
                        }
                    }
        

private:

	/**
	 * Parameter (expected) unique id
	 */
	std::string	_id;

	/**
	 * Parameter name
	 */
	std::string	_name;

	/**
	 * Parameter size ("1"=scalar, "N"=N values array, "NxM"=N x M matrix)
	 */
	std::string	_size;

	/**
	 * Parameter type ("1"=scalar, "2"=vector, "NxM"=N x M matrix)
	 */
	ParameterType	_type;

	/**
	 * Parameter units
	 */
	std::string	_unit;

	/**
	 * Parameter description
	 */
	std::string	_description;

	/**
	 * Parameter unified content descriptor
	 */
	std::string	_ucd;

	/**
	 * Parameter utype (VOTable definition)
	 */
	std::string	_utype;
        
                    /**
                     *  param field null => 0, None etc
                    */
                    std::string _null;

};

typedef std::vector<ParameterDescription> ParameterDescriptionList;

} /* namespace TimeTableCatalog */
#endif /* PARAMETERDESCRIPTION_H_ */