1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.form.field.converter;
35
36 import java.math.BigDecimal;
37 import java.text.NumberFormat;
38 import java.util.Locale;
39
40 import com.vaadin.v7.data.util.converter.Converter;
41 import com.vaadin.v7.data.util.converter.DefaultConverterFactory;
42 import com.vaadin.v7.data.util.converter.StringToBigDecimalConverter;
43 import com.vaadin.v7.data.util.converter.StringToDoubleConverter;
44 import com.vaadin.v7.data.util.converter.StringToFloatConverter;
45
46
47
48
49 public class NonRoundingConverterFactory extends DefaultConverterFactory {
50 @Override
51 protected Converter<String, ?> createStringConverter(Class<?> sourceType) {
52
53 if (Double.class.isAssignableFrom(sourceType)) {
54 return new StringToDoubleConverter() {
55 @Override
56 protected NumberFormat getFormat(Locale locale) {
57 return amendMaximumFractionDigits(super.getFormat(locale));
58 }
59 };
60
61 } else if (Float.class.isAssignableFrom(sourceType)) {
62 return new StringToFloatConverter() {
63 @Override
64 protected NumberFormat getFormat(Locale locale) {
65 return amendMaximumFractionDigits(super.getFormat(locale));
66 }
67 };
68
69 } else if (BigDecimal.class.isAssignableFrom(sourceType)) {
70 return new StringToBigDecimalConverter() {
71 @Override
72 protected NumberFormat getFormat(Locale locale) {
73 return amendMaximumFractionDigits(super.getFormat(locale));
74 }
75 };
76 }
77
78 return super.createStringConverter(sourceType);
79 }
80
81 private NumberFormat amendMaximumFractionDigits(NumberFormat format) {
82
83 format.setMaximumFractionDigits(Integer.MAX_VALUE);
84 return format;
85 }
86 }