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

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

The newest version!
package com.github.davidmoten.odata.client;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;

import com.github.davidmoten.guavamini.Preconditions;
import com.github.davidmoten.odata.client.internal.TypedObject;

abstract class ActionFunctionRequestBase> {

	protected final ContextPath contextPath;
	protected final Map parameters;
	protected final List requestHeaders = new ArrayList<>();
	protected final Map queries = new HashMap<>();
	private Optional connectTimeoutMs = Optional.empty();
	private Optional readTimeoutMs = Optional.empty();

	ActionFunctionRequestBase(Map parameters, ContextPath contextPath) {
		this.parameters = parameters;
		this.contextPath = contextPath;
	}

	@SuppressWarnings("unchecked")
	public T requestHeader(RequestHeader requestHeader) {
		requestHeaders.add(requestHeader);
		return (T) this;
	}

	@SuppressWarnings("unchecked")
	public T query(String key, String value) {
		Preconditions.checkNotNull(key);
		Preconditions.checkNotNull(value);
		queries.put(key, value);
		return (T) this;
	}

	public T select(String clause) {
		return query("$select", clause);
	}

	public T expand(String clause) {
		return query("$expand", clause);
	}

	public T filter(String clause) {
		return query("$filter", clause);
	}

	public T search(String clause) {
		return query("$search", clause);
	}

	public T orderBy(String clause) {
		return query("$orderby", clause);
	}

	public T skip(long skip) {
		return query("$skip", String.valueOf(skip));
	}

	public T top(long top) {
		return query("$top", String.valueOf(top));
	}

	@SuppressWarnings("unchecked")
	public T connectTimeout(long duration, TimeUnit unit) {
		this.connectTimeoutMs = Optional.of(unit.toMillis(duration));
		return (T) this;
	}

	@SuppressWarnings("unchecked")
	public T readTimeout(long duration, TimeUnit unit) {
		this.readTimeoutMs = Optional.of(unit.toMillis(duration));
		//noinspection unchecked
		return (T) this;
	}

	public T useCaches() {
		// TODO support useCaches
		throw new UnsupportedOperationException();
	}

	public T metadataNone() {
		return requestHeader(RequestHeader.acceptJsonWithMetadata("none"));
	}

	public T metadataMinimal() {
		return requestHeader(RequestHeader.acceptJsonWithMetadata("minimal"));
	}

	public T metadataFull() {
		return requestHeader(RequestHeader.acceptJsonWithMetadata("full"));
	}

	protected RequestOptions options() {
		return new RequestOptions() {
			
			@Override
			public List getRequestHeaders() {
				return requestHeaders;
			}

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

			@Override
			public Optional requestConnectTimeoutMs() {
				return connectTimeoutMs;
			}

			@Override
			public Optional requestReadTimeoutMs() {
				return readTimeoutMs;
			}

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

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy