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

cz.geek.fio.FioExtractor Maven / Gradle / Ivy

The newest version!
package cz.geek.fio;

import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.client.ResponseExtractor;

import java.io.IOException;

import static org.apache.commons.lang3.Validate.notNull;

class FioExtractor implements ResponseExtractor {

    private final Class targetClass;
    private final Class sourceClass;
    private final HttpMessageConverter converter;
    private final FioConversionService conversionService;

    public FioExtractor(final Class targetClass, final Class sourceClass,
                        final HttpMessageConverter converter, final FioConversionService conversionService) {
        this.targetClass = notNull(targetClass);
        this.sourceClass = notNull(sourceClass);
        this.converter = notNull(converter);
        this.conversionService = notNull(conversionService);
        conversionService.validate(sourceClass, targetClass);
    }

    @Override
    public T extractData(final ClientHttpResponse response) throws IOException {
        final Object source = converter.read(sourceClass, response);
        return conversionService.convert(source, targetClass);
    }

    public static FioExtractor statementExtractor(
            final HttpMessageConverter jaxb2Converter, final FioConversionService conversionService) {
        return new FioExtractor<>(FioAccountStatement.class, AccountStatement.class, jaxb2Converter, conversionService);
    }
}