4.2.2.3. Datatype
Интерфейс Datatype описывает тип данных, допустимый для атрибута сущности, не являющегося ассоциацией. Каждый экземпляр реализации Datatype соответствует одному классу Java, для работы с которым он предназначен.
Все экземпляры зарегистрированы в репозитории - классе Datatypes, который выполняет загрузку и инициализацию классов реализации Datatype следующим образом:
-  
в корне
CLASSPATHищется файлdatatypes.xml, и если он найден, репозиторийDatatypesинициализируется из него -  
в противном случае инициализация
Datatypesпроизводится из файла/com/haulmont/chile/core/datatypes/datatypes.xml. 
Экземпляр Datatype может быть получен двумя способами:
-  
для атрибута сущности из соответствующего ему мета-свойства типа
DATATYPE, вызовомgetRange().asDatatype() -  
статическим методом
Datatypes.get(), передавая в него имя реализацииDatatypeили класс Java, для которого он создан. 
Datatype сопоставляется атрибуту сущности на старте системы по следующим правилам:
-  
Если для поля или метода задана аннотация
@MetaPropertyс непустым значениемdatatype, то атрибуту сопоставляется экземплярDatatypeс данным именем.Например, при следующем объявлении атрибута сущности он получит нестандартный тип
GeoCoordinateDatatype(см. пример ниже):@MetaProperty(datatype = GeoCoordinateDatatype.NAME) @Column(name = "LATITUDE") private Double latitude; -  
как правило, явное указание отсутствует, и атрибуту сопоставляется экземпляр
Datatype, возвращаемый репозиториемDatatypes.get(Class), при передаче в него типа поля или метода.Например, в данном случае атрибут
latitudeполучит стандартный типDoubleDatatype, зарегистрированный в базовом/com/haulmont/chile/core/datatypes/datatypes.xml:@Column(name = "LATITUDE") private Double latitude; 
Основные методы интерфейса Datatype:
-  
getName()- возвращает уникальное имя данной реализации -  
format()- преобразовывает переданное значение в строку -  
parse()- преобразовывает строку в значение нужного типа 
Datatype определяет два набора методов для форматирования/парсинга: с учетом локали и без учета локали. Преобразование с учетом локали используется повсеместно в пользовательском интерфейсе, преобразование без учета локали используется в системных механизмах, например, для сериализации в REST API.
Форматы для преобразований без учета локали задаются в вышеупомянутом файле datatypes.xml.
Форматы для преобразований с учетом локали задаются в главном пакете локализованных сообщений, в строках со следующими ключами:
-  
numberDecimalSeparator- задает символ разделителя целой и дробной части для числовых типов -  
numberGroupingSeparator- задает символ разделителя групп разрядов для числовых типов -  
integerFormat- формат для типовIntegerиLong -  
doubleFormat- формат для типаDouble -  
decimalFormat- формат для типаBigDecimal -  
dateTimeFormat- формат для типаjava.util.Date -  
dateFormat- формат для типаjava.sql.Date -  
timeFormat- формат для типаjava.sql.Time -  
trueString- строка, соответствующаяBoolean.TRUE -  
falseString- строка, соответствующаяBoolean.FALSE 
Все перечисленные форматы по умолчанию заданы в главном пакете локализованных сообщений базового проекта CUBA, и могут быть переопределены в аналогичных файлах проекта приложения.