package org.odata4j.consumer; import java.util.ArrayList; import java.util.List; import org.odata4j.core.OEntityId; import org.odata4j.core.OEntityIds; import org.odata4j.core.OEntityKey; import org.odata4j.core.OEntityRequest; import org.odata4j.edm.EdmDataServices; import org.odata4j.format.SingleLink; import org.odata4j.format.SingleLinks; import org.odata4j.internal.EntitySegment; /** * Shared consumer request implementation for operations dealing with a single response entity. */ public abstract class AbstractConsumerEntityRequest<T> implements OEntityRequest<T> { private final ODataClient client; private final EdmDataServices metadata; private final String serviceRootUri; private final List<EntitySegment> segments = new ArrayList<EntitySegment>(); public AbstractConsumerEntityRequest(ODataClient client, String serviceRootUri, EdmDataServices metadata, String entitySetName, OEntityKey key) { this.client = client; this.serviceRootUri = serviceRootUri; this.metadata = metadata; segments.add(new EntitySegment(entitySetName, key)); } protected ODataClient getClient() { return client; } protected EdmDataServices getMetadata() { return metadata; } protected List<EntitySegment> getSegments() { return segments; } protected String getServiceRootUri() { return serviceRootUri; } @Override public OEntityRequest<T> nav(String navProperty, OEntityKey key) { segments.add(new EntitySegment(navProperty, key)); return this; } @Override public OEntityRequest<T> nav(String navProperty) { segments.add(new EntitySegment(navProperty, null)); return this; } protected SingleLink toSingleLink(OEntityId entity) { String uri = getServiceRootUri(); if (!uri.endsWith("/")) uri += "/"; uri += OEntityIds.toKeyString(entity); return SingleLinks.create(uri); } }