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(-)
----------------------------------------------------------------------