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

io.github.robertograham.fortniteapirestclient.util.ResponseHandlerProvider Maven / Gradle / Ivy

There is a newer version: 5.3.0
Show newest version
package io.github.robertograham.fortniteapirestclient.util;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.util.EntityUtils;

public class ResponseHandlerProvider {

    private final ObjectMapper objectMapper;
    private final ResponseHandler stringResponseHandler;

    ResponseHandlerProvider(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
        this.stringResponseHandler = stringResponseHandler();
    }

    public static ResponseHandlerProviderBuilder builder() {
        return new ResponseHandlerProviderBuilder();
    }

    private ResponseHandler stringResponseHandler() {
        return response -> {
            HttpEntity entity = response.getEntity();

            String body = entity != null ? EntityUtils.toString(entity) : null;

            int status = response.getStatusLine().getStatusCode();

            if (status >= 200 && status < 300)
                return body;
            else
                throw body != null && !body.isEmpty() ?
                        new FortniteApiErrorException(objectMapper.readValue(body, FortniteApiError.class), status)
                        : new ClientProtocolException("Unexpected response status: " + status);

        };
    }

    public  ResponseHandler handlerFor(Class clazz) {
        return response -> objectMapper.readValue(stringResponseHandler.handleResponse(response), clazz);
    }

    public ResponseHandler stringHandler() {
        return stringResponseHandler;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy