/******************************************************************************* * Copyright 2013 SAP AG * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.sap.core.odata.processor.api.jpa.access; import java.io.InputStream; import java.util.List; import java.util.Map; import com.sap.core.odata.api.uri.info.DeleteUriInfo; import com.sap.core.odata.api.uri.info.GetEntityCountUriInfo; import com.sap.core.odata.api.uri.info.GetEntityLinkUriInfo; import com.sap.core.odata.api.uri.info.GetEntitySetCountUriInfo; import com.sap.core.odata.api.uri.info.GetEntitySetLinksUriInfo; import com.sap.core.odata.api.uri.info.GetEntitySetUriInfo; import com.sap.core.odata.api.uri.info.GetEntityUriInfo; import com.sap.core.odata.api.uri.info.GetFunctionImportUriInfo; import com.sap.core.odata.api.uri.info.PostUriInfo; import com.sap.core.odata.api.uri.info.PutMergePatchUriInfo; import com.sap.core.odata.processor.api.jpa.exception.ODataJPAModelException; import com.sap.core.odata.processor.api.jpa.exception.ODataJPARuntimeException; /** * The interface provides methods for processing OData Requests for Create, Read, Update, Delete operations. * Pass the OData request or parsed OData request (Map of properties) as request. * A JPA entity is returned as a response. * * @author SAP AG */ public interface JPAProcessor { /** * Processes OData request for querying an Entity Set. The method returns * list of Objects of type representing JPA Entity Types. * * @param <T> * Template parameter representing Java Persistence Entity Type. * <p> * <b>Note:-</b> Default parameter is Object. * </p> * * @param requestView * is an OData request for querying an entity set * <p> * @return list of objects representing JPA entity types **/ public <T> List<T> process(GetEntitySetUriInfo requestView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for reading an Entity. The method returns an * Object of type representing JPA Entity Type. * * @param <T> * Template parameter representing Java Persistence Entity Type. * <p> * <b>Note:-</b> Default parameter is Object. * </p> * * @param requestView * OData request for reading an entity * * <p> * @return object representing JPA entity type **/ public <T> Object process(GetEntityUriInfo requestView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for fetching Entity count. The method returns JPA Entity count * * @param requestView * OData request for counting an entity set * @return long value representing count of JPA entity set * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public long process(GetEntitySetCountUriInfo requestView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for fetching Entity count. The method returns count of target entity. * This is specific to situation where cardinality is 1:1 * * @param resultsView * OData request for counting target entity. * @return long value representing count of JPA entity * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public long process(GetEntityCountUriInfo resultsView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for executing custom operations. The method * returns a List of Object. The list contains one entry if the the custom * operations return type has multiplicity of ONE. * * @param requestView * OData request for executing function import * @return result of executing function import * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public List<Object> process(GetFunctionImportUriInfo requestView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for executing $links OData command for N:1 relation. * The method returns an Object of type representing OData entity. * * @param uriParserResultView * OData request for Entity Link URI * @return an object representing JPA entity * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public Object process(GetEntityLinkUriInfo uriParserResultView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for executing $links OData command for N:1 relation. * The method returns an Object of type representing OData entity. * * @param uriParserResultView * OData request for Entity Set Link URI * @return a list of object representing JPA entities * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public <T> List<T> process(GetEntitySetLinksUriInfo uriParserResultView) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for creating Entity. The method returns an Object * which is created. A Null reference implies object was not created. * * @param createView * @param content * @param requestContentType * @param contentType * @return Created Object * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public <T> List<T> process(PostUriInfo createView, InputStream content, String requestContentType) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for creating Entity. The method expects a parsed OData request which is a Map of properties. * The method returns an Object that is created. A Null reference implies object was not created. * * @param createView * @param content * @param requestContentType * @param contentType * @return Created Object * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public <T> List<T> process(PostUriInfo createView, Map<String, Object> content) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for updating Entity. The method returns an Object * which is updated. A Null reference implies object was not created. * * @param deleteuriInfo * @param contentType * @return Deleted Object * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public <T> Object process(PutMergePatchUriInfo updateView, InputStream content, String requestContentType) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for updating Entity. The method returns an Object * which is updated. A Null reference implies object was not created. * * @param deleteuriInfo * @param contentType * @return Deleted Object * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public <T> Object process(PutMergePatchUriInfo updateView, Map<String, Object> content) throws ODataJPAModelException, ODataJPARuntimeException; /** * Processes OData request for deleting Entity. The method returns an Object * which is deleted. A Null reference implies object was not created. * * @param deleteuriInfo * @param contentType * @return Deleted Object * * @throws ODataJPAModelException * @throws ODataJPARuntimeException */ public Object process(DeleteUriInfo deleteuriInfo, String contentType) throws ODataJPAModelException, ODataJPARuntimeException; /** * Process OData request for creating Links. The OData request should contain * $links OData command. * * @param uriParserResultView * OData request for creating Links * @param content * @param requestContentType * @param contentType * * @throws ODataJPARuntimeException * @throws ODataJPAModelException */ public void process(PostUriInfo uriParserResultView, InputStream content, String requestContentType, String contentType) throws ODataJPARuntimeException, ODataJPAModelException; /** * Process OData request for updating Links. The OData request should contain * $links OData command. * * @param uriParserResultView * OData request for updating Links * @param content * @param requestContentType * @param contentType * * @throws ODataJPARuntimeException * @throws ODataJPAModelException */ public void process(PutMergePatchUriInfo uriParserResultView, InputStream content, String requestContentType, String contentType) throws ODataJPARuntimeException, ODataJPAModelException; }