// Copyright © 2016-2020 Andy Goryachev <[email protected]> package goryachev.fx; import goryachev.common.util.Parsers; import javafx.beans.property.BooleanProperty; import javafx.beans.property.DoubleProperty; import javafx.beans.property.IntegerProperty; import javafx.beans.property.Property; import javafx.beans.property.StringProperty; import javafx.util.StringConverter; /** * Converters. */ public class Converters { protected static StringConverter<Boolean> booleanConverter; protected static StringConverter<Integer> intConverter; protected static StringConverter<Number> doubleNumberConverter; protected static StringConverter<Number> intNumberConverter; protected static StringConverter<String> stringConverter; protected static StringConverter<Object> objectConverter; @SuppressWarnings("unchecked") public static <T> StringConverter<T> get(Property<T> p) { if(p instanceof BooleanProperty) { return (StringConverter<T>)BOOLEAN(); } else if(p instanceof IntegerProperty) { return (StringConverter<T>)INT(); } else if(p instanceof DoubleProperty) { return (StringConverter<T>)NUMBER_DOUBLE(); } else if(p instanceof StringProperty) { return (StringConverter<T>)STRING(); } else { throw new Error("?" + p); } } public static StringConverter<Boolean> BOOLEAN() { if(booleanConverter == null) { booleanConverter = new StringConverter<Boolean>() { public Boolean fromString(String s) { return Parsers.parseBoolean(s); } public String toString(Boolean x) { return Boolean.TRUE.equals(x) ? "true" : "false"; } }; } return booleanConverter; } public static StringConverter<Integer> INT() { if(intConverter == null) { intConverter = new StringConverter<Integer>() { public Integer fromString(String s) { return Parsers.parseInt(s, 0); } public String toString(Integer x) { return String.valueOf(x); } }; } return intConverter; } public static StringConverter<Number> NUMBER_INT() { if(intNumberConverter == null) { intNumberConverter = new StringConverter<Number>() { public Number fromString(String s) { return Parsers.parseInt(s, 0); } public String toString(Number x) { return String.valueOf(x); } }; } return intNumberConverter; } public static StringConverter<Number> NUMBER_DOUBLE() { if(doubleNumberConverter == null) { doubleNumberConverter = new StringConverter<Number>() { public Number fromString(String s) { return Parsers.parseDouble(s, 0.0); } public String toString(Number x) { return String.valueOf(x); } }; } return doubleNumberConverter; } public static StringConverter<String> STRING() { if(stringConverter == null) { stringConverter = new StringConverter<String>() { public String toString(String s) { return s; } public String fromString(String s) { return s; } }; } return stringConverter; } public static StringConverter<Object> OBJECT() { if(objectConverter == null) { objectConverter = new StringConverter<Object>() { public String toString(Object x) { return x == null ? null : x.toString(); } public Object fromString(String s) { return s; } }; } return objectConverter; } }