You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/08/04 16:25:42 UTC

[02/18] olingo-odata4 git commit: OLINGO-738: Adding upsertEntity feature for the server-extension framework

OLINGO-738: Adding upsertEntity feature for the server-extension framework


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

Branch: refs/heads/OLINGO-640
Commit: cb0f7f2d7012d9e0a46024e7e9fe21bc09704c42
Parents: 1ebbbc3
Author: Ramesh Reddy <ra...@jboss.org>
Authored: Thu Jul 23 18:00:50 2015 -0500
Committer: Ramesh Reddy <ra...@jboss.org>
Committed: Thu Jul 23 18:00:50 2015 -0500

----------------------------------------------------------------------
 .../apache/olingo/server/core/ServiceHandler.java    | 15 +++++++++++++++
 .../server/core/legacy/ProcessorServiceHandler.java  |  7 +++++++
 .../olingo/server/core/requests/DataRequest.java     |  2 +-
 .../apache/olingo/server/example/TripPinHandler.java | 12 ++++++++++++
 4 files changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cb0f7f2d/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceHandler.java b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceHandler.java
index a7753ec..a223120 100644
--- a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceHandler.java
+++ b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceHandler.java
@@ -102,6 +102,21 @@ public interface ServiceHandler extends Processor {
       EntityResponse response) throws ODataLibraryException, ODataApplicationException;
 
   /**
+   * Update or create the entity object. If based on passed in entity object's key value,  if 
+   * entity exists update the entity, else create a new entity
+   * @param request
+   * @param entity - Entity to create or update
+   * @param merge - in the case of update, true to do merge operation with current entity, 
+   * false the entity needs to be replaced
+   * @param entityETag - previous entity tag if provided by the user. "*" means allow.
+   * @param response
+   * @throws ODataLibraryException
+   * @throws ODataApplicationException
+   */
+  void upsertEntity(DataRequest request, Entity entity, boolean merge, String entityETag,
+      EntityResponse response) throws ODataLibraryException, ODataApplicationException;
+
+  /**
    * Delete the Entity
    * @param request
    * @param entityETag - entity tag to match, if provided by the user. "*" means allow

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cb0f7f2d/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/legacy/ProcessorServiceHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/legacy/ProcessorServiceHandler.java b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/legacy/ProcessorServiceHandler.java
index acbc8c0..b65f19c 100644
--- a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/legacy/ProcessorServiceHandler.java
+++ b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/legacy/ProcessorServiceHandler.java
@@ -430,4 +430,11 @@ public class ProcessorServiceHandler implements ServiceHandler {
     throw new ODataHandlerException("not implemented",
         ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
   }
+
+  @Override
+  public void upsertEntity(DataRequest request, Entity entity, boolean merge, String entityETag, 
+      EntityResponse response) throws ODataLibraryException, ODataApplicationException {
+    throw new ODataHandlerException("not implemented",
+        ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cb0f7f2d/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/requests/DataRequest.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/requests/DataRequest.java b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/requests/DataRequest.java
index 7f2273c..2966d86 100644
--- a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/requests/DataRequest.java
+++ b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/requests/DataRequest.java
@@ -317,7 +317,7 @@ public class DataRequest extends ServiceRequest {
               getContextURL(odata), false, response, getReturnRepresentation());
           handler.createEntity(DataRequest.this, getEntityFromClient(), entityResponse);
         } else {
-          handler.updateEntity(DataRequest.this, getEntityFromClient(), isPATCH(), getETag(),
+          handler.upsertEntity(DataRequest.this, getEntityFromClient(), isPATCH(), getETag(),
               entityResponse);
         }
       } else if (isPOST()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cb0f7f2d/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
index 6ca0fcd..db06558 100644
--- a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
+++ b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
@@ -544,4 +544,16 @@ public class TripPinHandler implements ServiceHandler {
   public void crossJoin(DataRequest dataRequest, List<String> entitySetNames, ODataResponse response) {
     response.setStatusCode(200);
   }
+
+  @Override
+  public void upsertEntity(DataRequest request, Entity entity, boolean merge, String entityETag, 
+      EntityResponse response) throws ODataLibraryException, ODataApplicationException {
+    EdmEntitySet edmEntitySet = request.getEntitySet();
+    Entity currentEntity = this.dataModel.getEntity(edmEntitySet.getName(), request.getKeyPredicates());
+    if(currentEntity == null) {
+      createEntity(request, entity, response);
+    } else {
+      updateEntity(request, entity, merge, entityETag, response);
+    }
+  }
 }