public boolean isParallelizable() { for (Converter<?,?> converter : components) if (!converter.isParallelizable()) return false; return true; }
@Override public boolean isThreadSafe() { return realConverter.isParallelizable(); }
@Override public boolean isParallelizable() { return realConverter.isParallelizable(); }
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 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; }
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"); } }
public <S, T> Converter<S, T> createConverter(Class<S> sourceType, Class<T> targetType) { // check preconditions if (targetType == null) throw new ConversionException("targetType must be specified"); // check if we already know how to do this conversion ConversionTypes conversionTypes = new ConversionTypes(sourceType, targetType); Converter result = converterPrototypes.get(conversionTypes); if (result != null) return cloneIfSupported(result); // we need to investigate... result = searchAppropriateConverter(sourceType, targetType); // ...and cache the result for future requests if (result != null && result.isParallelizable()) converterPrototypes.put(conversionTypes, result); // inject context if appropriate injectContext(result); // done return result; }