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

com.github.davidmoten.odata.client.CustomRequest Maven / Gradle / Ivy

package com.github.davidmoten.odata.client;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import org.apache.http.client.utils.URLEncodedUtils;

import com.github.davidmoten.odata.client.internal.RequestHelper;

public final class CustomRequest {

    private final Context context;

    public CustomRequest(Context context) {
        this.context = context;
    }

    public String getString(String url, RequestHeader... headers) {
        return context.service().getStringUtf8(url, Arrays.asList(headers));
    }

    public InputStream getStream(String url, RequestHeader... headers) {
        return context.service().getStream(url, Arrays.asList(headers));
    }

    public  T get(String url, Class responseCls, SchemaInfo responseSchemaInfo,
            RequestHeader... headers) {
        UrlInfo info = getInfo(context, url, headers);
        return RequestHelper.get(info.contextPath, responseCls, info, responseSchemaInfo);
    }

    public  void post(String url, Class contentClass, T content,
            SchemaInfo schemaInfo, RequestHeader... headers) {
        UrlInfo info = getInfo(context, url, headers);
        RequestHelper.post(content, info.contextPath, contentClass, info, schemaInfo);
    }

    public  T post(String url, Object content, Class responseClass,
            SchemaInfo responseSchemaInfo, RequestHeader... headers) {
        UrlInfo info = getInfo(context, url, headers);
        return RequestHelper.postAny(context, info.contextPath, responseClass, info,
                responseSchemaInfo);
    }

    public void postJson(String url, String contentJson, RequestHeader... headers) {
        UrlInfo info = getInfo(context, url, headers);
        context.service().post(url, info.requestHeaders, contentJson);
    }

    public String postJsonReturnsJson(String url, String contentJson, RequestHeader... headers) {
        UrlInfo info = getInfo(context, url, headers);
        HttpResponse response = context.service().post(url, info.requestHeaders, contentJson);
        RequestHelper.checkResponseCode(info.contextPath, response, 200, 299);
        return response.getText();
    }

    private static UrlInfo getInfo(Context context, String url, RequestHeader[] requestHeaders) {
        final String urlPath;
        final String urlQuery;
        int i = url.indexOf('?');
        if (i == -1) {
            urlPath = url;
            urlQuery = "";
        } else {
            urlPath = url.substring(0, i);
            urlQuery = url.substring(i, url.length());
        }
        Path path = new Path(urlPath, context.service().getBasePath().style());
        ContextPath contextPath = new ContextPath(context, path);
        Map queries = URLEncodedUtils //
                .parse(urlQuery, StandardCharsets.UTF_8) //
                .stream() //
                .peek(x -> System.out.println("pair=" + x)) //
                .collect(Collectors.toMap(pair -> pair.getName(), pair -> pair.getValue()));
        return new UrlInfo(contextPath, queries, Arrays.asList(requestHeaders));
    }

    private static final class UrlInfo implements RequestOptions {
        final ContextPath contextPath;
        final List requestHeaders;
        final Map queries;

        UrlInfo(ContextPath contextPath, Map queries,
                List requestHeaders) {
            this.contextPath = contextPath;
            this.queries = queries;
            this.requestHeaders = requestHeaders;
        }

        @Override
        public List getRequestHeaders() {
            return requestHeaders;
        }

        @Override
        public Map getQueries() {
            return queries;
        }

        @Override
        public Optional getUrlOverride() {
            return Optional.empty();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy