public Set getConversionExecutors(Class sourceClass) { Set parentExecutors; if (parent != null) { parentExecutors = parent.getConversionExecutors(sourceClass); } else { parentExecutors = Collections.EMPTY_SET; } Map sourceMap = getSourceMap(sourceClass); if (parentExecutors.isEmpty() && sourceMap.isEmpty()) { return Collections.EMPTY_SET; } Set entries = sourceMap.entrySet(); Set conversionExecutors = new HashSet(entries.size() + parentExecutors.size()); for (Iterator it = entries.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); Class targetClass = (Class) entry.getKey(); Converter converter = (Converter) entry.getValue(); conversionExecutors.add(new StaticConversionExecutor(sourceClass, targetClass, converter)); } conversionExecutors.addAll(parentExecutors); return conversionExecutors; }
public Object execute(Object source) throws ConversionExecutionException { if (source != null && !sourceClass.isInstance(source)) { throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), "Source object " + source + " to convert is expected to be an instance of " + getSourceClass()); } try { return converter.convertSourceToTargetClass(source, targetClass); } catch (Exception e) { throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), e); } }
public void testIllegalType() { try { conversionExecutor.execute(new StringBuilder()); fail(); } catch (ConversionExecutionException e) { // expected } } }
public void testConvertNull() { assertNull(conversionExecutor.execute(null)); }
protected void setUp() { StringToDate stringToDate = new StringToDate(); conversionExecutor = new StaticConversionExecutor(String.class, Date.class, stringToDate); }
public Object execute(Object source) throws ConversionExecutionException { if (source != null && !sourceClass.isInstance(source)) { throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), "Source object " + source + " to convert is expected to be an instance of [" + getSourceClass().getName() + "]"); } try { return converter.convertSourceToTargetClass(source, targetClass); } catch (Exception e) { throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), e); } }
public void testTypeConversion() { assertTrue(conversionExecutor.execute("2008-10-10").getClass().equals(Date.class)); }
public ConversionExecutor getConversionExecutor(Class<?> sourceClass, Class<?> targetClass) throws ConversionExecutorNotFoundException { Assert.notNull(sourceClass, "The source class to convert from is required"); Assert.notNull(targetClass, "The target class to convert to is required"); sourceClass = convertToWrapperClassIfNecessary(sourceClass); targetClass = convertToWrapperClassIfNecessary(targetClass); if (targetClass.isAssignableFrom(sourceClass)) { return new StaticConversionExecutor(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass)); } if (delegate.canConvert(sourceClass, targetClass)) { return new StaticConversionExecutor(sourceClass, targetClass, new SpringConvertingConverterAdapter( sourceClass, targetClass, delegate)); } else if (parent != null) { return parent.getConversionExecutor(sourceClass, targetClass); } else { throw new ConversionExecutorNotFoundException(sourceClass, targetClass, "No ConversionExecutor found for converting from sourceClass [" + sourceClass.getName() + "] to target class [" + targetClass.getName() + "]"); } }
public Object execute(Object source) throws ConversionExecutionException { if (source != null && !sourceClass.isInstance(source)) { throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), "Source object " + source + " to convert is expected to be an instance of [" + getSourceClass().getName() + "]"); } try { return converter.convertSourceToTargetClass(source, targetClass); } catch (Exception e) { throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), e); } }
public void testAssignmentCompatibleTypeConversion() { java.sql.Date date = new java.sql.Date(123L); try { assertSame(date, conversionExecutor.execute(date)); fail("Should have failed"); } catch (ConversionExecutionException e) { } }
public ConversionExecutor getConversionExecutor(Class<?> sourceClass, Class<?> targetClass) throws ConversionExecutorNotFoundException { Assert.notNull(sourceClass, "The source class to convert from is required"); Assert.notNull(targetClass, "The target class to convert to is required"); sourceClass = convertToWrapperClassIfNecessary(sourceClass); targetClass = convertToWrapperClassIfNecessary(targetClass); if (targetClass.isAssignableFrom(sourceClass)) { return new StaticConversionExecutor(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass)); } if (delegate.canConvert(sourceClass, targetClass)) { return new StaticConversionExecutor(sourceClass, targetClass, new SpringConvertingConverterAdapter( sourceClass, targetClass, delegate)); } else if (parent != null) { return parent.getConversionExecutor(sourceClass, targetClass); } else { throw new ConversionExecutorNotFoundException(sourceClass, targetClass, "No ConversionExecutor found for converting from sourceClass [" + sourceClass.getName() + "] to target class [" + targetClass.getName() + "]"); } }
public void testOverrideConverter() { Converter customConverter = new StringToBoolean("ja", "nee"); DefaultConversionService service = new DefaultConversionService(); StaticConversionExecutor executor = (StaticConversionExecutor) service.getConversionExecutor(String.class, Boolean.class); try { executor.execute("ja"); fail(); } catch (ConversionExecutionException e) { // expected } service.addConverter(customConverter); executor = (StaticConversionExecutor) service.getConversionExecutor(String.class, Boolean.class); assertTrue(((Boolean) executor.execute("ja"))); }
targetClass = convertToWrapperClassIfNecessary(targetClass); if (targetClass.isAssignableFrom(sourceClass)) { return new StaticConversionExecutor(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass)); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToArray(this)); } else if (Collection.class.isAssignableFrom(targetClass)) { if (!targetClass.isInterface() && Modifier.isAbstract(targetClass.getModifiers())) { + "request an interface or concrete implementation instead"); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToCollection(this)); if (Collection.class.isAssignableFrom(sourceClass)) { Converter collectionToArray = new ReverseConverter(new ArrayToCollection(this)); return new StaticConversionExecutor(sourceClass, targetClass, collectionToArray); } else { return new StaticConversionExecutor(sourceClass, targetClass, new ObjectToArray(this)); if (converter != null) { return new StaticConversionExecutor(sourceClass, targetClass, converter); } else { if (parent != null) {
+ sourceClass.getName() + "] to targetClass [" + targetClass.getName() + "]"); return new StaticConversionExecutor(sourceClass, targetClass, converter); } else if (converter.getTargetClass().isAssignableFrom(sourceClass) && converter instanceof TwoWayConverter) { if (!converter.getSourceClass().isAssignableFrom(targetClass)) { return new StaticConversionExecutor(sourceClass, targetClass, new ReverseConverter(twoWay)); } else { throw new ConversionExecutorNotFoundException(sourceClass, targetClass,
ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, targetComponentType, converter); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToArray(elementConverter)); } else if (converter.getTargetClass().isAssignableFrom(sourceComponentType) && converter instanceof TwoWayConverter) { TwoWayConverter twoWay = (TwoWayConverter) converter; ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, targetComponentType, new ReverseConverter(twoWay)); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToArray(elementConverter)); } else { throw new ConversionExecutorNotFoundException(sourceClass, targetClass, ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, converter.getTargetClass(), converter); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToCollection( elementConverter)); } else if (converter.getTargetClass().isAssignableFrom(sourceComponentType) && converter instanceof TwoWayConverter) { TwoWayConverter twoWay = (TwoWayConverter) converter; ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, converter.getSourceClass(), new ReverseConverter(twoWay)); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToCollection( elementConverter)); } else { ConversionExecutor elementConverter = new StaticConversionExecutor(converter.getSourceClass(), targetComponentType, converter); Converter collectionToArray = new ReverseConverter(new ArrayToCollection(elementConverter)); return new StaticConversionExecutor(sourceClass, targetClass, collectionToArray);
ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, targetComponentType, converter); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToArray(elementConverter)); } else if (converter.getTargetClass().isAssignableFrom(sourceComponentType) && converter instanceof TwoWayConverter) { TwoWayConverter twoWay = (TwoWayConverter) converter; ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, targetComponentType, new ReverseConverter(twoWay)); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToArray(elementConverter)); } else { throw new ConversionExecutorNotFoundException(sourceClass, targetClass, ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, converter.getTargetClass(), converter); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToCollection( elementConverter)); } else if (converter.getTargetClass().isAssignableFrom(sourceComponentType) && converter instanceof TwoWayConverter) { TwoWayConverter twoWay = (TwoWayConverter) converter; ConversionExecutor elementConverter = new StaticConversionExecutor(sourceComponentType, converter.getSourceClass(), new ReverseConverter(twoWay)); return new StaticConversionExecutor(sourceClass, targetClass, new ArrayToCollection( elementConverter)); } else { ConversionExecutor elementConverter = new StaticConversionExecutor(converter.getSourceClass(), targetComponentType, converter); Converter collectionToArray = new ReverseConverter(new ArrayToCollection(elementConverter)); return new StaticConversionExecutor(sourceClass, targetClass, collectionToArray);