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

io.github.robertograham.fortnite2.implementation.JsonOptionalResponseHandlerProvider Maven / Gradle / Ivy

There is a newer version: 3.1.0
Show newest version
package io.github.robertograham.fortnite2.implementation;

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.util.EntityUtils;

import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;
import javax.json.bind.adapter.JsonbAdapter;
import java.util.Optional;

enum JsonOptionalResponseHandlerProvider implements OptionalResponseHandlerProvider {

    INSTANCE(
            Token.Adapter.INSTANCE,
            Exchange.Adapter.INSTANCE,
            DefaultAccount.Adapter.INSTANCE,
            RawStatistic.Adapter.INSTANCE,
            Cohort.Adapter.INSTANCE,
            RawLeaderBoard.Adapter.INSTANCE
    );

    private final ResponseHandler> stringOptionalHandler;
    private final Jsonb jsonb;

    JsonOptionalResponseHandlerProvider(JsonbAdapter... jsonbAdapters) {
        stringOptionalHandler = response -> {
            final HttpEntity entity = response.getEntity();
            final Optional entityAsStringOptional = entity == null ?
                    Optional.empty()
                    : Optional.ofNullable(EntityUtils.toString(entity));
            final int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode >= HttpStatus.SC_OK
                    && statusCode < HttpStatus.SC_MULTIPLE_CHOICES)
                return entityAsStringOptional;
            else
                throw new ClientProtocolException(String.format("Unexpected response [%d]: %s", statusCode, entityAsStringOptional.orElse("")));
        };
        jsonb = JsonbBuilder.create(
                new JsonbConfig()
                        .withAdapters(jsonbAdapters)
        );
    }

    @Override
    public ResponseHandler> forString() {
        return stringOptionalHandler;
    }

    @Override
    public  ResponseHandler> forClass(Class clazz) {
        return response ->
                stringOptionalHandler.handleResponse(response)
                        .map(string -> jsonb.fromJson(string, clazz));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy