A UI converter can be contributed by a Java Servoy client plugin.
To do this, the plugin must implement interface IUIConverterProvider to produce IUIConverter instances in the getUIConverters() method, see api docs.
An IUIConverter converter has 3 methods:
This is an example of a plugin that delivers a converter from joda time (which has support for time persiods) to java-util-date (which is supported by Servoy UI elements) time.
private static final IUIConverter[] UI_CONVERTERS = new IUIConverter[] { JodaToDateConverter.INSTANCE }; public IUIConverter[] getUIConverters() { return UI_CONVERTERS; } static class NrToJodaConverter implements ITypedColumnConverter { static final NrToJodaConverter INSTANCE = new NrToJodaConverter(); public Object convertToObject(Map<String, String> props, int column_type, Object dbvalue) throws Exception { if (dbvalue == null) { return null; } return new DateTime(Utils.getAsLong(dbvalue)); } public Object convertFromObject(Map<String, String> props, int column_type, Object obj) throws Exception { if (obj instanceof DateTime) { return Long.valueOf(((DateTime)obj).getMillis()); } return obj; // or throw an exception } public Map<String, String> getDefaultProperties() { return null; } public int[] getSupportedColumnTypes() { return new int[] { IColumnTypes.INTEGER }; } public String getName() { return getClass().getSimpleName(); } public int getToObjectType(Map<String, String> props) { // Servoy does not understand joda time natively. return IColumnTypes.MEDIA; } } static class JodaToDateConverter implements IUIConverter { static final JodaToDateConverter INSTANCE = new JodaToDateConverter(); public Object convertFromObject(Map<String, String> props, int input_type, Object converted) throws Exception { if (converted instanceof Date) { return new DateTime(((Date)converted).getTime()); } return converted; // or return null or throw an exception } public Object convertToObject(Map<String, String> props, int input_type, Object input) throws Exception { if (input instanceof DateTime) { return new Date(((DateTime)input).getMillis()); } return input; // or return null or throw an exception } public Map<String, String> getDefaultProperties() { return null; } public int[] getSupportedDataproviderTypes() { // Servoy does not understand joda time natively, therefore the dataprovider type will be MEDIA. return new int[] { IColumnTypes.MEDIA }; } public String getName() { return getClass().getSimpleName(); } public int getToObjectType(Map<String, String> props) { return IColumnTypes.DATETIME; } }