/* @VaadinApache2LicenseForJavaFiles@ */ package com.vaadin.data.util.converter; import java.text.NumberFormat; import java.text.ParsePosition; import java.util.Locale; /** * A converter that converts from {@link String} to {@link Integer} and back. * Uses the given locale and a {@link NumberFormat} instance for formatting and * parsing. *

* Override and overwrite {@link #getFormat(Locale)} to use a different format. *

* * @author Vaadin Ltd * @version * @VERSION@ * @since 7.0 */ public class StringToIntegerConverter implements Converter { /** * Returns the format used by * {@link #convertToPresentation(Integer, Locale)} and * {@link #convertToModel(String, Locale)}. * * @param locale * The locale to use * @return A NumberFormat instance */ protected NumberFormat getFormat(Locale locale) { if (locale == null) { locale = Locale.getDefault(); } return NumberFormat.getIntegerInstance(locale); } @Override public Integer convertToModel(String value, Locale locale) throws ConversionException { if (value == null) { return null; } // Remove leading and trailing white space value = value.trim(); // Parse and detect errors. If the full string was not used, it is // an error. ParsePosition parsePosition = new ParsePosition(0); Number parsedValue = getFormat(locale).parse(value, parsePosition); if (parsePosition.getIndex() != value.length()) { throw new ConversionException("Could not convert '" + value + "' to " + getModelType().getName()); } if (parsedValue == null) { // Convert "" to null return null; } return parsedValue.intValue(); } @Override public String convertToPresentation(Integer value, Locale locale) throws ConversionException { if (value == null) { return null; } return getFormat(locale).format(value); } @Override public Class getModelType() { return Integer.class; } @Override public Class getPresentationType() { return String.class; } }