@Override public T convert(S sourceValue) throws ConversionException { return (sourceValue != null ? realConverter.convert(sourceValue) : nullResult); }
@Override public Class<T> getType() { return converter.getTargetType(); }
public ConversionTypes(Converter<?,?> converter) { this(converter.getSourceType(), converter.getTargetType()); }
public static <SS, TT> Converter<SS, TT> cloneIfSupported(Converter<SS, TT> prototype) { Converter<SS, TT> result; if (prototype.isParallelizable()) result = BeanUtil.clone(prototype); else if (prototype.isThreadSafe()) result = prototype; else result = new SynchronizedConverterProxy(prototype); return result; }
public boolean isParallelizable() { for (Converter<?,?> converter : components) if (!converter.isParallelizable()) return false; return true; }
@Override public Class<S> getSourceType() { return (components.length > 0 ? components[0].getSourceType() : Object.class); }
public boolean isThreadSafe() { for (Converter<?,?> converter : components) if (!converter.isThreadSafe()) return false; return true; }
@Override public boolean isParallelizable() { return realConverter.isParallelizable(); }
@Override public Class<S> getSourceType() { return realConverter.getSourceType(); }
@Override public T convert(Object source) throws ConversionException { Object tmp = source; for (Converter converter : components) { tmp = converter.convert(tmp); } return (T) tmp; }
@Override public Class<T> getTargetType() { return realConverter.getTargetType(); }
@Override public boolean isThreadSafe() { return realConverter.isParallelizable(); }
@Override public Object convert(Object sourceValue) throws ConversionException { // I might iterate through mixed sets of strings and numbers (e.g. from an XLS file)... if (sourceValue instanceof String) //...so I only apply script evaluation on strings return realConverter.convert((String) sourceValue); else return sourceValue; }
@Override public Class<T> getTargetType() { return realConverter.getTargetType(); }
public void registerConverterClass(Class<? extends Converter> converterClass) { Converter converter = BeanUtil.newInstance(converterClass); ConversionTypes types = new ConversionTypes(converter); configuredConverterClasses.put(types, converterClass); if (converter.isParallelizable()) converterPrototypes.put(types, converter); }
public Object convert(Object sourceValue) throws ConversionException { // I might iterate through mixed sets of strings and numbers (e.g. from an XLS file)... if (sourceValue instanceof String) //...so I only apply script evaluation on strings return realConverter.convert((String) sourceValue); else return sourceValue; }
@Override public Class<T> getType() { return converter.getTargetType(); }
private void checkParallelizable(Converter<?, ?> converter) { if (converter.isParallelizable()) { Assert.isTrue(converter instanceof Cloneable, "Parallelizable converters must implement " + Cloneable.class); Assert.isTrue(BeanUtil.findMethod(converterClass, "clone", (Class[]) null) != null, "Parallelizable converters must have a public clone() method"); } }
@Override public T convert(S sourceValue) throws ConversionException { synchronized(realConverter) { return realConverter.convert(sourceValue); } }
@Override public Class<T> getTargetType() { return (components.length > 0 ? components[components.length - 1].getTargetType() : Object.class); }