Рассмотрим реализацию нестандартного типа GeoCoordinateDatatype, предназначенного для атрибутов, хранящих географические координаты.
Создаем класс в модуле global:
public class GeoCoordinateDatatype extends DoubleDatatype {
public static final String NAME = "geocoordinate";
// формат общий для всех локалей, отличаться могут только символы десятичной точки
public static final String FORMAT = "#0.000000";
public GeoCoordinateDatatype(Element element) {
super(element);
}
@Override
public String getName() {
return NAME;
}
@Override
public String format(Double value, Locale locale) {
if (value == null)
return "";
FormatStrings formatStrings = Datatypes.getFormatStrings(locale);
if (formatStrings == null)
return format(value); // FormatStrings для локали не определены, форматируем по данным datatypes.xml
NumberFormat format = new DecimalFormat(FORMAT, formatStrings.getFormatSymbols());
return format.format(value);
}
@Override
public Double parse(String value, Locale locale) throws ParseException {
if (StringUtils.isBlank(value))
return null;
FormatStrings formatStrings = Datatypes.getFormatStrings(locale);
if (formatStrings == null)
return parse(value); // FormatStrings для локали не определены, парсим по данным datatypes.xml
NumberFormat format = new DecimalFormat(FORMAT, formatStrings.getFormatSymbols());
return parse(value, format).doubleValue();
}
}Создаем файл datatypes.xml в корне каталога src модуля global проекта приложения и копируем в него все из файла /com/haulmont/chile/core/datatypes/datatypes.xml, расположенного в модуле global базового проекта cuba. Затем добавляем в него регистрацию нового типа:
<datatypes>
<datatype class="com.sample.sales.entity.GeoCoordinateDatatype"
format="#0.000000" decimalSeparator="." groupingSeparator=""/>
...Указываем новый тип данных для требуемых атрибутов:
@MetaProperty(datatype = GeoCoordinateDatatype.NAME) @Column(name = "LATITUDE") private Double latitude;
После выполнения перечисленных действий атрибут latitude везде в приложении будет отображаться в нужном формате.

