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

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

package com.github.davidmoten.odata.client;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import com.github.davidmoten.guavamini.Preconditions;

public final class EntityRequestOptionsBuilder {

    private final EntityRequest request;
    private final List requestHeaders = new ArrayList<>();
    private Optional select = Optional.empty();
    private Optional expand = Optional.empty();
    private boolean useCaches = false;
    private String metadata = "minimal";

    EntityRequestOptionsBuilder(EntityRequest request) {
        this.request = request;
    }

    public EntityRequestOptionsBuilder requestHeader(String key, String value) {
        requestHeaders.add(new RequestHeader(key, value));
        return this;
    }

    public EntityRequestOptionsBuilder select(String clause) {
        Preconditions.checkNotNull(clause);
        this.select = Optional.of(clause);
        return this;
    }

    public EntityRequestOptionsBuilder expand(String clause) {
        Preconditions.checkNotNull(clause);
        this.expand = Optional.of(clause);
        return this;
    }

    public EntityRequestOptionsBuilder useCaches(boolean value) {
        // TODO implement useCaches
        this.useCaches = value;
        return this;
    }

    public EntityRequestOptionsBuilder ifMatch(String eTag) {
        return requestHeader("If-Match", eTag);
    }

    public EntityRequestOptionsBuilder useCaches() {
        return useCaches(true);
    }

    public EntityRequestOptionsBuilder metadataNone() {
        this.metadata = "none";
        return this;
    }

    public EntityRequestOptionsBuilder metadataMinimal() {
        this.metadata = "minimal";
        return this;
    }

    public EntityRequestOptionsBuilder metadataFull() {
        this.metadata = "full";
        return this;
    }

    public T get() {
        return request.get(build());
    }

    public T patch(T entity) {
        return request.patch(build(), entity);
    }

    public T put(T entity) {
        return request.put(build(), entity);
    }

    public void delete() {
        request.delete(build());
    }

    private EntityRequestOptions build() {
        requestHeaders.add(RequestHeader.acceptJsonWithMetadata(metadata));
        return new EntityRequestOptions(requestHeaders, select, expand, useCaches);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy