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

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

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

import java.util.Optional;

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

public abstract class EntityRequest {

    private final Class cls;
    protected final ContextPath contextPath;
    private final Optional value;
    private final boolean isMediaEntityOrHasStreamProperty;

    public EntityRequest(Class cls, ContextPath contextPath, Optional value, boolean isMediaEntityOrHasStreamProperty) {
        this.cls = cls;
        this.contextPath = contextPath;
        this.value = value;
        this.isMediaEntityOrHasStreamProperty = isMediaEntityOrHasStreamProperty;
    }

    T get(EntityRequestOptions options) {
        if (value.isPresent()) {
            String json = Serializer.INSTANCE.serialize(value.get());
            Class subClass = RequestHelper.getSubClass(contextPath, contextPath.context().schemas(),
                    cls, json);
            return Serializer.INSTANCE.deserialize(json, subClass, contextPath, false);
        } else {
            return RequestHelper.get(contextPath, cls, options);
        }
    }

    void delete(EntityRequestOptions options) {
        RequestHelper.delete(contextPath, options);
    }

    T patch(EntityRequestOptions options, T entity) {
        return RequestHelper.patch(entity, contextPath, options);
    }

    T put(EntityRequestOptions options, T entity) {
        return RequestHelper.put(entity, contextPath, options);
    }

    public T get() {
        return builder().get();
    }

    public void delete() {
        builder().delete();
    }

    public T patch(T entity) {
        return builder().patch(entity);
    }

    public T put(T entity) {
        return builder().put(entity);
    }

    public EntityRequestOptionsBuilder requestHeader(String key, String value) {
        return builder().requestHeader(key, value);
    }

    public EntityRequestOptionsBuilder query(String name, String value) {
        return builder().query(name, value);
    }
    
    public EntityRequestOptionsBuilder select(String clause) {
        return builder().select(clause);
    }

    public EntityRequestOptionsBuilder expand(String clause) {
        return builder().expand(clause);
    }

    public EntityRequestOptionsBuilder metadataFull() {
        return builder().metadataFull();
    }

    public EntityRequestOptionsBuilder metadataMinimal() {
        return builder().metadataMinimal();
    }

    public EntityRequestOptionsBuilder metadataNone() {
        return builder().metadataNone();
    }
    
    private EntityRequestOptionsBuilder builder() {
        return new EntityRequestOptionsBuilder(this, isMediaEntityOrHasStreamProperty);
    }

}