All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cz.jalasoft.lifeconfig.converterprovider.ViaStringConverter Maven / Gradle / Ivy

package cz.jalasoft.lifeconfig.converterprovider;

import cz.jalasoft.lifeconfig.converter.Converter;
import cz.jalasoft.lifeconfig.converter.ConverterException;
import cz.jalasoft.lifeconfig.converter.ConverterRepository;
import cz.jalasoft.lifeconfig.converter.StringyfyingConverterDecorator;

import java.lang.reflect.Method;
import java.util.Optional;

/**
 * This provider solves slight impedance mismatches
 * between source and target types by two steps conversion.
 * At first, property value is converted to string via its
 * toString() method. Then a converter from string is used
 * to try to convert the string representation to the target
 * type.
 *
 * @author Honza Lastovicka ([email protected])
 * @since 2016-09-19.
 */
public final class ViaStringConverter implements ConverterProvider {

    private final ConverterProvider decorated;
    private final ConverterRepository converterRepository;

    public ViaStringConverter(ConverterProvider decorated, ConverterRepository converterRepository) {
        this.decorated = decorated;
        this.converterRepository = converterRepository;
    }

    @Override
    public Converter converter(Object sourceValue, Method method) throws ConverterNotFoundException {
        Class targetType = method.getReturnType();

        Optional maybeConverter = converterRepository.fromStringTo(targetType);
        if (!maybeConverter.isPresent()) {
            return decorated.converter(sourceValue, method);
        }

        Converter converter = maybeConverter.get();
        return new StringyfyingConverterDecorator(converter);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy