using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tools;
namespace ModelData.BusinessModel.MainEntities
{
/// \addtogroup Entities
/// @{
/// \class MapPoint
///
/// \brief Описывает точку на карте
/// Класс описывает точку на карте и включает лишь необходимые для этого сведения, том числе и фильтруемую информацию.
/// \author Denis
/// \date 31.03.2019
public class MapPoint : BaseAndInterface.BaseOntologyEntity, IComparable<MapPoint>
{
/// \property public string Position
///
/// \brief Строковое представление координат
/// Установлен атрибут IndexAttrib со значением 2
/// \returns The position.
[IndexAttrib(2)] public string Position { set; get; }
/// \property public string Population
///
/// \brief Строковое значение количества населения
/// Значение обязательно >= 0 - это гарантируется SPARQL запросом.
/// В качестве значения выбирается наибольшее среди всех измененных поселений за выбранный промежуток.
/// Установлен атрибут IndexAttrib со значением 3.
/// \returns The population.
[IndexAttrib(3)] public int Population { set; get; }
/// \property public List<string> Type
///
/// \brief Список типов, к которым относится поселение
/// Заполняется из всех измененных поселений за выбранный промежуток.
/// Количество от 0 и больше.
/// Установлен атрибут IndexAttrib со значением 4.
/// \returns The type.
[IndexAttrib(4)] public List<string> Type { set; get; }
/// \property public List<string> Region
///
/// \brief Список регионов, в составе которых находится поселение
/// Заполняется из всех измененных поселений за выбранный промежуток.
/// Количество от 0 и больше.
/// Установлен атрибут IndexAttrib со значением 5.
/// \returns The region.
[IndexAttrib(5)] public List<string> Region { set; get; }
/// \fn public MapPoint()
///
/// \brief Конструктор
/// Создает экземпляры двух используемых списков
/// \author Denis
/// \date 31.03.2019
public MapPoint()
{
Type = new List<string>();
Region = new List<string>();
}
/// \fn public override Dictionary<string, string> Serialize()
///
/// \brief Метод записи данных о сущности в Dictionary.
///
/// \author Denis
/// \date 31.03.2019
///
/// \returns A Dictionary<string,string>
public override Dictionary<string, string> Serialize()
{
return new Dictionary<string, string>()
{
["URL"] = this.URL ?? "",
["Название"] = this.Title ?? "",
["Координаты"] = this.Position ?? "",
["Количество населения"] = this.Population.ToString(),
["Тип поселения"] = Concat(this.Type),
["В составе региона"] = Concat(this.Region)
};
}
/// \fn public int CompareTo(MapPoint p)
///
/// \brief Функция сравнения двух объектов
/// Реализует интерфейс IComparable<MapPoint> для сравнения двух объектов и выполнения сортировки массива объектов.
/// \warning Сортировка выполняется по убыванию!
/// \author Denis
/// \date 03.05.2019
///
public int CompareTo(MapPoint p)
{
return (-1) * this.Population.CompareTo(p.Population);
}
}
/// @}
}