using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ModelData.BusinessModel.Tools
{
/// \addtogroup Entities
/// @{
/// \class InstantTime
///
/// \brief Сущность точного года
/// Используется в качестве минимальной временной единицы согласно онтологической модели.
/// \warning Кажется тут я накосячил с тем, что нельзя присвоить год вручную.
/// \todo Сделать set value, где вызывается Init(int?).
/// \author Denis
/// \date 31.03.2019
public class InstantTime
{
/// \brief Скрытое поле, содержащее год
private int? year;
/// \property public int? Year
///
/// \brief Получить значение года
///
/// \returns The year.
public int? Year
{
get { return year; }
}
/// \fn public InstantTime()
///
/// \brief Стандартный конструктор
/// Год принимает значение null. Требуется присвоить значение
/// \author Denis
/// \date 31.03.2019
public InstantTime() { }
/// \fn public InstantTime(int? year)
///
/// \brief Конструктор на основе целочисленного года
/// Вызов метода Init(int?)
/// \author Denis
/// \date 31.03.2019
///
/// \param year The year.
public InstantTime(int? year)
{
Init(year);
}
/// \fn public InstantTime(string year)
///
/// \brief Конструктор на основе строкового года
/// Вызов метода Init(string)
/// \author Denis
/// \date 31.03.2019
///
/// \param year The year.
public InstantTime(string year)
{
if (year == null)
{
this.year = null;
return;
}
Init(year);
}
/// \fn private void Init(int? year)
///
/// \brief Присваивает значение закрытому полю
/// Если переданное значение = null, значение поля становится null
/// Иначе проверяется значение: год не может быть меньше 2000 до н.э. и больше текущего года.
/// Если проверка не пройдена, году устанавливается значение текущего года.
/// \author Denis
/// \date 31.03.2019
///
/// \param year The year.
private void Init(int? year)
{
if (year.HasValue)
this.year = (year > -2000 && year < (DateTime.Now.Year + 1)) ? (year) : (DateTime.Now.Year);
else
this.year = null;
}
/// \fn private void Init(string year)
///
/// \brief Присваивает значение закрытому полю
/// Преобразует строковое значение в целочисленное и вызывает метод Init(int?)
/// \author Denis
/// \date 31.03.2019
///
/// \param year The year.
private void Init(string year)
{
this.Init(int.Parse(year));
}
/// \fn public override string ToString()
///
/// \brief Возвращает строку, представляющую текущий объект.
/// Будучи базовой сущностью (не унаследованной от BaseOntologyEntity) требует преобразования в строку.
/// \author Denis
/// \date 31.03.2019
///
/// \returns Строка, представляющая текущий объект.
public override string ToString()
{
return Year.ToString();
}
}
/// @}
}