package org.odata4j.core;
import org.odata4j.exceptions.ODataProducerException;
/**
* A consumer-side modification-request builder, used for operations such as MERGE and UPDATE. Call {@link #execute()} to issue the request.
*
* @param <T> the entity representation as a java type
*/
public interface OModifyRequest<T> extends OBatchSupport {
/**
* Sets properties on the new entity.
*
* @param props the properties
* @return the modification-request builder
*/
OModifyRequest<T> properties(OProperty<?>... props);
/**
* Sets properties on the new entity.
*
* @param props the properties
* @return the modification-request builder
*/
OModifyRequest<T> properties(Iterable<OProperty<?>> props);
/**
* Defines an explicit link to another related entity.
*
* @param navProperty the entity's relationship navigation property
* @param target the link target entity
* @return the modification-request builder
*/
OModifyRequest<T> link(String navProperty, OEntity target);
/**
* Defines an explicit link to another related entity.
*
* @param navProperty the entity's relationship navigation property
* @param targetKey the key of the link target entity
* @return the modification-request builder
*/
OModifyRequest<T> link(String navProperty, OEntityKey targetKey);
/**
* Sends the modification request to the OData service.
*
* @throws ODataProducerException error from the producer
*/
void execute() throws ODataProducerException;
/**
* Selects a new modification entity by navigating to a referenced entity in a child collection.
*
* @param navProperty the child collection
* @param key the referenced entity's key
* @return the modification-request builder
*/
OModifyRequest<T> nav(String navProperty, OEntityKey key);
/**
* Overrides the If-Match precondition.
*
* <p>The If-Match header will default to the entity-tag of the entity used to start the builder sequence.</p>
*
* @param precondition <code>null</code>, an entity-tag, or <code>*</code>
* @return the modification-request builder
*/
OModifyRequest<T> ifMatch(String precondition);
}