Let us consider the implementation of a custom GeoCoordinateDatatype
, intended for the attributes storing geographical coordinates.
First, we need to create a class in the global module:
public class GeoCoordinateDatatype extends DoubleDatatype { public static final String NAME = "geocoordinate"; // the format is the same for all locales but may differ in decimal points 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 are not defined for locales, so formatting is made according to datatypes.xml file 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 are not defined for locales, so parsing is made according to datatypes.xml file NumberFormat format = new DecimalFormat(FORMAT, formatStrings.getFormatSymbols()); return parse(value, format).doubleValue(); } }
Next, we create datatypes.xml
file in the root of the global module src
directory in the application project and copy contents from /com/haulmont/chile/core/datatypes/datatypes.xml
file located in global module of cuba base project. Then add registration of the new type to it:
<datatypes> <datatype class="com.sample.sales.entity.GeoCoordinateDatatype" format="#0.000000" decimalSeparator="." groupingSeparator=""/> ...
Finally we specify new datatype for the required attributes:
@MetaProperty(datatype = GeoCoordinateDatatype.NAME) @Column(name = "LATITUDE") private Double latitude;
After the above listed operations are completed, latitude
attribute will be displayed in the desired format throughout the application.