
com.github.davidmoten.odata.client.CustomRequest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of odata-client-runtime Show documentation
Show all versions of odata-client-runtime Show documentation
OData client runtime for use with generated code
The newest version!
package com.github.davidmoten.odata.client;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
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.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import com.github.davidmoten.odata.client.internal.RequestHelper;
public final class CustomRequest {
private final Context context;
private final boolean relativeUrls;
public CustomRequest(Context context, boolean relativeUrls) {
this.context = context;
this.relativeUrls = relativeUrls;
}
private String toAbsoluteUrl(String url) {
if (relativeUrls) {
if (url.startsWith("https://")) {
return url;
} else {
String base = context.service().getBasePath().toUrl();
String a;
if (base.endsWith("/")) {
a = base;
} else {
a = base + "/";
}
String b;
if (url.startsWith("/")) {
b = url.substring(1);
} else {
b = url;
}
return a + b;
}
} else {
return url;
}
}
public CustomRequest withRelativeUrls() {
return new CustomRequest(context, true);
}
public CustomRequest withRelativeUrls(boolean value) {
return new CustomRequest(context, value);
}
public String getString(String url, RequestOptions options, RequestHeader... headers) {
return context.service().getStringUtf8(toAbsoluteUrl(url), Arrays.asList(headers), options);
}
public InputStream getStream(String url, RequestOptions options, RequestHeader... headers) {
return context.service().getStream(toAbsoluteUrl(url), Arrays.asList(headers), options);
}
public T get(String url, Class responseCls, HttpRequestOptions options,
RequestHeader... headers) {
UrlInfo info = getInfo(context, toAbsoluteUrl(url), headers, options);
return RequestHelper.get(info.contextPath, responseCls, info);
}
public void post(String url, Class contentClass, T content,
HttpRequestOptions options, RequestHeader... headers) {
UrlInfo info = getInfo(context, toAbsoluteUrl(url), headers, options);
RequestHelper.post(content, info.contextPath, contentClass, info);
}
public Optional submit(String url, Object content, Class responseClass,
HttpRequestOptions options, RequestHeader... headers) {
UrlInfo info = getInfo(context, toAbsoluteUrl(url), headers, options);
return RequestHelper.postAny(content, info.contextPath, responseClass, info);
}
public Optional submit(HttpMethod method, String url, Object content, Class responseClass,
HttpRequestOptions options, RequestHeader... headers) {
UrlInfo info = getInfo(context, toAbsoluteUrl(url), headers, options);
return RequestHelper.submitAny(method, content, info.contextPath, responseClass, info);
}
public Optional post(String url, Object content, Class responseClass,
HttpRequestOptions options, RequestHeader... headers) {
return submit(HttpMethod.POST, url, content, responseClass, options, headers);
}
public Optional put(String url, Object content, Class responseClass,
HttpRequestOptions options, RequestHeader... headers) {
return submit(HttpMethod.PUT, url, content, responseClass, options, headers);
}
public Optional patch(String url, Object content, Class responseClass,
HttpRequestOptions options, RequestHeader... headers) {
return submit(HttpMethod.PATCH, url, content, responseClass, options, headers);
}
public void postString(String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
submitString(HttpMethod.POST, url, content, options, headers);
}
public String postStringReturnsString(String url, String content, RequestOptions options,
RequestHeader... headers) {
return submitStringReturnsString(HttpMethod.POST, url, content, options, headers);
}
public void patchString(String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
submitString(HttpMethod.PATCH, url, content, options, headers);
}
public String patchStringReturnsString(String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
return submitStringReturnsString(HttpMethod.PATCH, url, content, options, headers);
}
public void putString(String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
submitString(HttpMethod.PUT, url, content, options, headers);
}
public String putStringReturnsString(String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
return submitStringReturnsString(HttpMethod.PUT, url, content, options, headers);
}
public void submitString(HttpMethod method, String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
String absoluteUrl = toAbsoluteUrl(url);
UrlInfo info = getInfo(context, absoluteUrl, headers, options);
context.service().submit(method, absoluteUrl, info.requestHeaders, content, options);
}
public String submitInputStreamReturnsString(HttpMethod method, String url, InputStream content, int length, HttpRequestOptions options,
RequestHeader... headers) {
String absoluteUrl = toAbsoluteUrl(url);
UrlInfo info = getInfo(context, absoluteUrl, headers, options);
HttpResponse response = context.service().submit(method, absoluteUrl, info.requestHeaders, content, length,
options);
RequestHelper.checkResponseCodeOk(info.contextPath, response);
return response.getText();
}
public String submitBytesReturnsString(HttpMethod method, String url, byte[] content, HttpRequestOptions options,
RequestHeader... headers) {
try (InputStream in = new ByteArrayInputStream(content)) {
return submitInputStreamReturnsString(method, url, in, content.length, options, headers);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
public String submitStringReturnsString(HttpMethod method, String url, String content, HttpRequestOptions options,
RequestHeader... headers) {
return submitBytesReturnsString(method, url, content.getBytes(StandardCharsets.UTF_8), options, headers);
}
private static UrlInfo getInfo(Context context, String url, RequestHeader[] requestHeaders,
HttpRequestOptions options) {
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);
}
Path path = new Path(urlPath, context.service().getBasePath().style());
ContextPath contextPath = new ContextPath(context, path);
Map queries = URLEncodedUtils //
.parse(urlQuery, StandardCharsets.UTF_8) //
.stream() //
.collect(Collectors.toMap(NameValuePair::getName, NameValuePair::getValue));
return new UrlInfo(contextPath, queries, Arrays.asList(requestHeaders), options);
}
private static final class UrlInfo implements RequestOptions {
final ContextPath contextPath;
final List requestHeaders;
final Map queries;
final HttpRequestOptions options;
UrlInfo(ContextPath contextPath, Map queries,
List requestHeaders, HttpRequestOptions options) {
this.contextPath = contextPath;
this.queries = queries;
this.requestHeaders = requestHeaders;
this.options = options;
}
@Override
public List getRequestHeaders() {
return requestHeaders;
}
@Override
public Map getQueries() {
return queries;
}
@Override
public Optional getUrlOverride() {
return Optional.empty();
}
@Override
public Optional requestConnectTimeoutMs() {
return options.requestConnectTimeoutMs();
}
@Override
public Optional requestReadTimeoutMs() {
return options.requestReadTimeoutMs();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy