You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2015/04/27 18:19:56 UTC

[1/2] olingo-odata4 git commit: OLINGO-573: validating to make sure key predicates are supplied for update, delete entity requests

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 87fa79ad9 -> d2b5449f7


OLINGO-573: validating to make sure key predicates are supplied for update, delete entity requests


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

Branch: refs/heads/master
Commit: b78343bd09e6b73bd6777c4ae90971dd109a6fcb
Parents: 0d015cb
Author: Ramesh Reddy <ra...@jboss.org>
Authored: Mon Apr 27 11:16:34 2015 -0500
Committer: Ramesh Reddy <ra...@jboss.org>
Committed: Mon Apr 27 11:16:34 2015 -0500

----------------------------------------------------------------------
 .../server/core/requests/DataRequest.java       |  5 +++
 .../olingo/server/example/TripPinDataModel.java | 42 ++++++++++++++++++++
 .../olingo/server/example/TripPinHandler.java   | 20 +++++++++-
 .../server/example/TripPinServiceTest.java      | 27 +++++++++++++
 4 files changed, 92 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b78343bd/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 b3be91c..98daf7a 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
@@ -273,6 +273,11 @@ public class DataRequest extends ServiceRequest {
         return false;
       }
       
+      // in update, delete entity cases, predicate must be there
+      if ((isPATCH() || isPUT() || isDELETE()) 
+          && (getKeyPredicates() == null || getKeyPredicates().isEmpty())) {
+        return false;
+      }
       return true;
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b78343bd/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinDataModel.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinDataModel.java b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinDataModel.java
index 78bd012..290f38d 100644
--- a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinDataModel.java
+++ b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinDataModel.java
@@ -630,6 +630,48 @@ public class TripPinDataModel {
     return copy;
   }
 
+  public boolean updateEntity(EdmEntitySet edmEntitySet, String eTag, String key, Object keyValue, 
+      boolean merge, Entity changes, String baseURL) throws ODataApplicationException {
+    boolean updated = false;
+
+    if (merge) {
+      EntityCollection set = getEntitySet(edmEntitySet.getName());
+      Iterator<Entity> it = set.getEntities().iterator();
+      while (it.hasNext()) {
+        Entity entity = it.next();
+        if (entity.getProperty(key).getValue().equals(keyValue) && eTag.equals("*")
+            || eTag.equals(entity.getETag())) {
+          
+          for (Property p :changes.getProperties()) {
+            for (Property p1: entity.getProperties()) {
+              if (p.getName().equals(p1.getName())) {
+                p1.setValue(p1.getValueType(), p.getValue());
+                updated = true;
+                break;
+              }
+            }
+          }
+          break;
+        }
+      }
+    } else {
+      // this is delete, then insert      
+      EntityCollection set = getEntitySet(edmEntitySet.getName());
+      Iterator<Entity> it = set.getEntities().iterator();
+      while (it.hasNext()) {
+        Entity entity = it.next();
+        if (entity.getProperty(key).getValue().equals(keyValue) && eTag.equals("*")
+            || eTag.equals(entity.getETag())) {
+          Property p = entity.getProperty(key);
+          changes.addProperty(p);
+          createEntity(edmEntitySet, changes, baseURL);
+          updated = true;
+        }
+      }
+    }
+    return updated;
+  }
+  
   public boolean deleteEntity(String entitySetName, String eTag, String key, Object keyValue) {
     EntityCollection set = getEntitySet(entitySetName);
     Iterator<Entity> it = set.getEntities().iterator();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b78343bd/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 c180a06..df2b645 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
@@ -273,9 +273,25 @@ public class TripPinHandler implements ServiceHandler {
   }
 
   @Override
-  public void updateEntity(DataRequest request, Entity entity, boolean merge, String entityETag,
+  public void updateEntity(DataRequest request, Entity entity, boolean merge, String eTag,
       EntityResponse response) throws ODataTranslatedException, ODataApplicationException {
-    response.writeServerError(true);
+    EdmEntitySet edmEntitySet = request.getEntitySet();
+    
+    Entity currentEntity = this.dataModel.getEntity(edmEntitySet.getName(), request.getKeyPredicates());
+    if (currentEntity == null) {
+      response.writeNotFound(true);
+      return;
+    }
+    String key = edmEntitySet.getEntityType().getKeyPredicateNames().get(0);
+    String baseURL = request.getODataRequest().getRawBaseUri();
+    boolean updated = this.dataModel.updateEntity(edmEntitySet, eTag, key, currentEntity
+        .getProperty(key).getValue(), merge, entity, baseURL);
+
+    if (updated) {
+      response.writeUpdatedEntity();
+    } else {
+      response.writeNotModified();
+    }
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b78343bd/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinServiceTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinServiceTest.java b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinServiceTest.java
index c64bfb5..9476f09 100644
--- a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinServiceTest.java
+++ b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinServiceTest.java
@@ -34,6 +34,7 @@ import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPatch;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.entity.ByteArrayEntity;
@@ -418,6 +419,32 @@ public class TripPinServiceTest {
     EntityUtils.consumeQuietly(response.getEntity());
   }
 
+  @Test
+  public void testUpdateEntity() throws Exception {
+    String payload = "{" + 
+        "  \"Emails\":[" + 
+        "     \"Krista@example.com\"," +
+        "     \"Krista@gmail.com\"" +        
+        "         ]" + 
+        "}";
+    HttpPatch updateRequest = new HttpPatch(baseURL+"/People('kristakemp')");
+    updateRequest.setEntity(new StringEntity(payload, ContentType.APPLICATION_JSON));
+    httpSend(updateRequest, 204);
+    
+    HttpResponse response = httpGET(baseURL + "/People('kristakemp')", 200);
+    JsonNode node = getJSONNode(response);
+    assertEquals("$metadata#People/$entity", node.get("@odata.context").asText());
+    assertEquals("Krista@example.com", node.get("Emails").get(0).asText());
+    assertEquals("Krista@gmail.com", node.get("Emails").get(1).asText());
+  }  
+  
+  @Test
+  public void testDeleteEntity() throws Exception{
+    // fail because no key predicates supplied
+    HttpDelete deleteRequest = new HttpDelete(baseURL+"/People");
+    HttpResponse response = httpSend(deleteRequest, 405);
+    EntityUtils.consumeQuietly(response.getEntity());
+  }
 
   @Test
   public void testCreateEntityWithLinkToRelatedEntities() throws Exception {


[2/2] olingo-odata4 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4

Posted by ra...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4


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

Branch: refs/heads/master
Commit: d2b5449f79b12eb0e6053e47d88fbb0751f616e8
Parents: b78343b 87fa79a
Author: Ramesh Reddy <ra...@jboss.org>
Authored: Mon Apr 27 11:16:46 2015 -0500
Committer: Ramesh Reddy <ra...@jboss.org>
Committed: Mon Apr 27 11:16:46 2015 -0500

----------------------------------------------------------------------
 .../fit/tecsvc/client/ActionImportITCase.java   | 296 +++++++++++++++++++
 .../olingo/client/api/uri/SegmentType.java      |   2 +
 .../olingo/client/api/uri/URIBuilder.java       |   8 +
 .../olingo/client/core/uri/URIBuilderImpl.java  |  11 +-
 .../client/core/uri/v4/URIBuilderTest.java      |   4 +-
 .../apache/olingo/commons/api/data/Entity.java  |   1 +
 .../json/ODataJsonDeserializer.java             |  16 +
 .../olingo/server/tecsvc/data/ActionData.java   | 122 +++++---
 .../olingo/server/tecsvc/data/DataCreator.java  |  14 +-
 .../olingo/server/tecsvc/data/DataProvider.java |  20 ++
 .../server/tecsvc/data/EntityActionResult.java  |  43 +++
 .../processor/TechnicalEntityProcessor.java     | 117 ++++++--
 .../TechnicalPrimitiveComplexProcessor.java     |  76 +++--
 .../tecsvc/processor/TechnicalProcessor.java    |  15 +
 ...ataJsonDeserializerActionParametersTest.java |  16 +
 15 files changed, 651 insertions(+), 110 deletions(-)
----------------------------------------------------------------------