You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2016/10/24 20:39:17 UTC

[3/3] olingo-odata2 git commit: [OLINGO-1018] Merge branch 'OLINGO-1018-JPA_API_DefaultProcessor'

[OLINGO-1018] Merge branch 'OLINGO-1018-JPA_API_DefaultProcessor'


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/ed07b2de
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/ed07b2de
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/ed07b2de

Branch: refs/heads/master
Commit: ed07b2deae24f4275bdc138039dcf95ef54084f7
Parents: c1b1a60 0345734
Author: mibo <mi...@apache.org>
Authored: Mon Oct 24 22:27:46 2016 +0200
Committer: mibo <mi...@apache.org>
Committed: Mon Oct 24 22:35:06 2016 +0200

----------------------------------------------------------------------
 .../processor/api/ODataJPADefaultProcessor.java | 301 ++++++++++
 .../processor/api/ODataJPAServiceFactory.java   |  10 +-
 .../core/ODataJPAProcessorDefault.java          | 308 ----------
 .../core/factory/ODataJPAFactoryImpl.java       |   4 +-
 .../core/ODataJPADefaultProcessorTest.java      | 588 +++++++++++++++++++
 .../core/ODataJPAProcessorDefaultTest.java      | 587 ------------------
 .../core/access/data/JPAProcessorImplTest.java  |   4 +-
 .../ref/util/CustomODataJPAProcessor.java       |  57 ++
 .../ref/web/JPAReferenceServiceFactory.java     |   8 +
 9 files changed, 966 insertions(+), 901 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/ed07b2de/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPADefaultProcessor.java
----------------------------------------------------------------------
diff --cc odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPADefaultProcessor.java
index 0000000,e562dc7..848293e
mode 000000,100644..100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPADefaultProcessor.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPADefaultProcessor.java
@@@ -1,0 -1,293 +1,301 @@@
+ /*******************************************************************************
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements. See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership. The ASF licenses this file
+  * to you 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 org.apache.olingo.odata2.jpa.processor.api;
+ 
+ import org.apache.olingo.odata2.api.batch.BatchHandler;
+ import org.apache.olingo.odata2.api.batch.BatchRequestPart;
+ import org.apache.olingo.odata2.api.batch.BatchResponsePart;
+ import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
+ import org.apache.olingo.odata2.api.ep.EntityProvider;
+ import org.apache.olingo.odata2.api.ep.EntityProviderBatchProperties;
+ import org.apache.olingo.odata2.api.exception.ODataException;
+ import org.apache.olingo.odata2.api.processor.ODataRequest;
+ import org.apache.olingo.odata2.api.processor.ODataResponse;
+ import org.apache.olingo.odata2.api.uri.PathInfo;
 -import org.apache.olingo.odata2.api.uri.info.*;
 -
++import org.apache.olingo.odata2.api.uri.info.DeleteUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetEntityCountUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetEntitySetCountUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetEntityLinkUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetEntitySetUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetEntitySetLinksUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetEntityUriInfo;
++import org.apache.olingo.odata2.api.uri.info.GetFunctionImportUriInfo;
++import org.apache.olingo.odata2.api.uri.info.PostUriInfo;
++import org.apache.olingo.odata2.api.uri.info.PutMergePatchUriInfo;
+ import java.io.InputStream;
+ import java.util.ArrayList;
+ import java.util.List;
+ 
+ public abstract class ODataJPADefaultProcessor extends ODataJPAProcessor {
+ 
+   public ODataJPADefaultProcessor(final ODataJPAContext oDataJPAContext) {
+     super(oDataJPAContext);
+   }
+ 
+   @Override
+   public ODataResponse readEntitySet(final GetEntitySetUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       List<Object> jpaEntities = jpaProcessor.process(uriParserResultView);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, jpaEntities, contentType);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse readEntity(final GetEntityUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       Object jpaEntity = jpaProcessor.process(uriParserResultView);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, jpaEntity, contentType);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse countEntitySet(final GetEntitySetCountUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       long jpaEntityCount = jpaProcessor.process(uriParserResultView);
+       oDataResponse = responseBuilder.build(jpaEntityCount);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse existsEntity(final GetEntityCountUriInfo uriInfo, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       long jpaEntityCount = jpaProcessor.process(uriInfo);
+       oDataResponse = responseBuilder.build(jpaEntityCount);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse createEntity(final PostUriInfo uriParserResultView, final InputStream content,
+       final String requestContentType, final String contentType) throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       Object createdJpaEntity = jpaProcessor.process(uriParserResultView, content, requestContentType);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, createdJpaEntity, contentType);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse updateEntity(final PutMergePatchUriInfo uriParserResultView, final InputStream content,
+       final String requestContentType, final boolean merge, final String contentType) throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       Object jpaEntity = jpaProcessor.process(uriParserResultView, content, requestContentType);
+       oDataResponse = responseBuilder.build(uriParserResultView, jpaEntity);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse deleteEntity(final DeleteUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       Object deletedObj = jpaProcessor.process(uriParserResultView, contentType);
+       oDataResponse = responseBuilder.build(uriParserResultView, deletedObj);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse executeFunctionImport(final GetFunctionImportUriInfo uriParserResultView,
+       final String contentType) throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       List<Object> resultEntity = jpaProcessor.process(uriParserResultView);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, resultEntity, contentType);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriParserResultView,
+       final String contentType) throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       List<Object> result = jpaProcessor.process(uriParserResultView);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, result.get(0));
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse readEntityLink(final GetEntityLinkUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       Object jpaEntity = jpaProcessor.process(uriParserResultView);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, jpaEntity, contentType);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse readEntityLinks(final GetEntitySetLinksUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     ODataResponse oDataResponse = null;
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       List<Object> jpaEntity = jpaProcessor.process(uriParserResultView);
+       oDataResponse =
+           responseBuilder.build(uriParserResultView, jpaEntity, contentType);
+     } finally {
+       close();
+     }
+     return oDataResponse;
+   }
+ 
+   @Override
+   public ODataResponse createEntityLink(final PostUriInfo uriParserResultView, final InputStream content,
+       final String requestContentType, final String contentType) throws ODataException {
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       jpaProcessor.process(uriParserResultView, content, requestContentType, contentType);
+       return ODataResponse.newBuilder().build();
+     } finally {
+       close();
+     }
+   }
+ 
+   @Override
+   public ODataResponse updateEntityLink(final PutMergePatchUriInfo uriParserResultView, final InputStream content,
+       final String requestContentType, final String contentType) throws ODataException {
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       jpaProcessor.process(uriParserResultView, content, requestContentType, contentType);
+       return ODataResponse.newBuilder().build();
+     } finally {
+       close();
+     }
+   }
+ 
+   @Override
+   public ODataResponse deleteEntityLink(final DeleteUriInfo uriParserResultView, final String contentType)
+       throws ODataException {
+     try {
+       oDataJPAContext.setODataContext(getContext());
+       jpaProcessor.process(uriParserResultView, contentType);
+       return ODataResponse.newBuilder().build();
+     } finally {
+       close();
+     }
+   }
+ 
+   @Override
+   public ODataResponse executeBatch(final BatchHandler handler, final String contentType, final InputStream content)
+       throws ODataException {
+     try {
+       oDataJPAContext.setODataContext(getContext());
+ 
+       ODataResponse batchResponse;
+       List<BatchResponsePart> batchResponseParts = new ArrayList<BatchResponsePart>();
+       PathInfo pathInfo = getContext().getPathInfo();
+       EntityProviderBatchProperties batchProperties = EntityProviderBatchProperties.init().pathInfo(pathInfo).build();
+       List<BatchRequestPart> batchParts = EntityProvider.parseBatchRequest(contentType, content, batchProperties);
+ 
+       for (BatchRequestPart batchPart : batchParts) {
+         batchResponseParts.add(handler.handleBatchPart(batchPart));
+       }
+       batchResponse = EntityProvider.writeBatchResponse(batchResponseParts);
+       return batchResponse;
+     } finally {
+       close(true);
+     }
+   }
+ 
+   @Override
+   public BatchResponsePart executeChangeSet(final BatchHandler handler, final List<ODataRequest> requests)
+       throws ODataException {
+     List<ODataResponse> responses = new ArrayList<ODataResponse>();
+     try {
+       oDataJPAContext.getODataJPATransaction().begin();
+ 
+       for (ODataRequest request : requests) {
+         oDataJPAContext.setODataContext(getContext());
+         ODataResponse response = handler.handleRequest(request);
+         if (response.getStatus().getStatusCode() >= HttpStatusCodes.BAD_REQUEST.getStatusCode()) {
+           // Rollback
+           oDataJPAContext.getODataJPATransaction().rollback();
+           List<ODataResponse> errorResponses = new ArrayList<ODataResponse>(1);
+           errorResponses.add(response);
+           return BatchResponsePart.responses(errorResponses).changeSet(false).build();
+         }
+         responses.add(response);
+       }
+       oDataJPAContext.getODataJPATransaction().commit();
+ 
+       return BatchResponsePart.responses(responses).changeSet(true).build();
+     } catch (Exception e) {
+ 
+       List<ODataResponse> errorResponses = new ArrayList<ODataResponse>(1);
+       errorResponses.add(ODataResponse.entity(e).status(HttpStatusCodes.INTERNAL_SERVER_ERROR).build());
+       return BatchResponsePart.responses(errorResponses).changeSet(false).build();
+     } finally {
+       close(true);
+     }
+   }
+ }