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/21 22:11:20 UTC

olingo-odata4 git commit: OLINGO-573: fixing an issue with adding references to collection valued navigation property

Repository: olingo-odata4
Updated Branches:
  refs/heads/master fbdf9aadc -> 44ff6c95c


OLINGO-573: fixing an issue with adding references to collection valued navigation property


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

Branch: refs/heads/master
Commit: 44ff6c95c011048eb93022071403387f65a17dde
Parents: fbdf9aa
Author: Ramesh Reddy <ra...@jboss.org>
Authored: Tue Apr 21 15:10:25 2015 -0500
Committer: Ramesh Reddy <ra...@jboss.org>
Committed: Tue Apr 21 15:10:25 2015 -0500

----------------------------------------------------------------------
 .../org/apache/olingo/server/core/ServiceHandler.java    | 11 ++++++-----
 .../server/core/legacy/ProcessorServiceHandler.java      |  2 +-
 .../apache/olingo/server/core/requests/DataRequest.java  |  7 ++++++-
 .../apache/olingo/server/core/ServiceDispatcherTest.java |  3 +--
 .../org/apache/olingo/server/example/TripPinHandler.java |  6 ++----
 .../apache/olingo/server/example/TripPinServiceTest.java | 10 +++-------
 6 files changed, 19 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/44ff6c95/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 8a9c610..621f0de 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
@@ -194,19 +194,19 @@ public interface ServiceHandler extends Processor {
       throws ODataTranslatedException, ODataApplicationException;
 
   /**
-   * Add references (relationships) to Entity.
+   * Add references (relationships) to Entity. This is always on collection valued navigation property
    * @param request
    * @param entityETag - entity etag to match before add operation, "*" allows all.
-   * @param idReferences - references to add
+   * @param referenceId - references to add
    * @param response - return always should be 204
    * @throws ODataTranslatedException
    * @throws ODataApplicationException
    */
-  void addReference(DataRequest request, String entityETag, List<URI> idReferences, NoContentResponse response)
+  void addReference(DataRequest request, String entityETag, URI referenceId, NoContentResponse response)
       throws ODataTranslatedException, ODataApplicationException;
 
   /**
-   * Update references (relationships) in an Entity
+   * Update references (relationships) in an Entity; This is always against single valued navigation property
    * @param request
    * @param entityETag
    * @param referenceId
@@ -220,7 +220,8 @@ public interface ServiceHandler extends Processor {
   /**
    * Delete references (relationships) in an Entity
    * @param request
-   * @param deleteId
+   * @param deleteId; for collection valued navigation this will be non-null value; for single valued
+   * navigation property, this will be null.
    * @param entityETag
    * @param response - always should be 204
    * @throws ODataTranslatedException

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/44ff6c95/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 fa8f445..3a2c144 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
@@ -389,7 +389,7 @@ public class ProcessorServiceHandler implements ServiceHandler {
   }
 
   @Override
-  public void addReference(DataRequest request, String entityETag, List<URI> idReferences,
+  public void addReference(DataRequest request, String entityETag, URI referenceId,
       NoContentResponse response) throws ODataTranslatedException, ODataApplicationException {
       selectProcessor(ReferenceProcessor.class).createReference(
           request.getODataRequest(), response.getODataResponse(), request.getUriInfo(),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/44ff6c95/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 fd3aa25..b3be91c 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
@@ -80,6 +80,7 @@ import org.apache.olingo.server.core.responses.NoContentResponse;
 import org.apache.olingo.server.core.responses.PrimitiveValueResponse;
 import org.apache.olingo.server.core.responses.PropertyResponse;
 import org.apache.olingo.server.core.responses.StreamResponse;
+import org.apache.olingo.server.core.uri.parser.UriParserSemanticException;
 
 public class DataRequest extends ServiceRequest {
   protected UriResourceEntitySet uriResourceEntitySet;
@@ -423,6 +424,10 @@ public class DataRequest extends ServiceRequest {
       } else if (isDELETE()) {
         // if this against the collection, user need to look at $id param for entity ref #11.4.6.2
         String id = getQueryParameter("$id");
+        if (id == null && isCollection()) {
+          throw new UriParserSemanticException("$id not specified for delete of reference", 
+              UriParserSemanticException.MessageKeys.RESOURCE_NOT_FOUND);
+        }
         if (id == null) {
           handler.deleteReference(DataRequest.this, null, getETag(), new NoContentResponse(
               getServiceMetaData(), response));
@@ -440,7 +445,7 @@ public class DataRequest extends ServiceRequest {
             getServiceMetaData(), response));
       } else if (isPOST()) {
         // this needs to be against collection of references
-        handler.addReference(DataRequest.this, getETag(), getPayload(), new NoContentResponse(
+        handler.addReference(DataRequest.this, getETag(), getPayload().get(0), new NoContentResponse(
             getServiceMetaData(), response));
       }
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/44ff6c95/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java b/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
index 3423250..6156c1b 100644
--- a/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
+++ b/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
@@ -25,7 +25,6 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.net.URI;
 import java.util.Collections;
-import java.util.List;
 
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -409,7 +408,7 @@ public class ServiceDispatcherTest {
           public void validate() throws Exception {
             ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
             ArgumentCaptor<String> arg2 = ArgumentCaptor.forClass(String.class);
-            ArgumentCaptor<List> arg3 = ArgumentCaptor.forClass(List.class);
+            ArgumentCaptor<URI> arg3 = ArgumentCaptor.forClass(URI.class);
             ArgumentCaptor<NoContentResponse> arg4 = ArgumentCaptor
                 .forClass(NoContentResponse.class);
             Mockito.verify(handler).addReference(arg1.capture(), arg2.capture(), arg3.capture(),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/44ff6c95/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 c721325..c180a06 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
@@ -434,18 +434,16 @@ public class TripPinHandler implements ServiceHandler {
   }
 
   @Override
-  public void addReference(DataRequest request, String entityETag, List<URI> references,
+  public void addReference(DataRequest request, String entityETag, URI referenceId,
       NoContentResponse response) throws ODataTranslatedException, ODataApplicationException {
 
     final EntityDetails details = process(request);
 
     try {
-      for (URI reference : references) {
-        DataRequest bindingRequest = request.parseLink(reference);
+        DataRequest bindingRequest = request.parseLink(referenceId);
         Entity linkEntity = this.dataModel.getEntity(bindingRequest.getEntitySet().getName(),
             bindingRequest.getKeyPredicates());
         this.dataModel.addNavigationLink(details.navigationProperty, details.entity, linkEntity);
-      }
     } catch (URISyntaxException e) {
       throw new ODataApplicationException(e.getMessage(), 500, Locale.getDefault(), e);
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/44ff6c95/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 017b072..c64bfb5 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
@@ -344,12 +344,9 @@ public class TripPinServiceTest {
 
     //ADD
     String payload = "{\n" +
-        "  \"@odata.context\": \""+baseURL+"/$metadata#Collection($ref)\",\n" +
-        "  \"value\": [\n" +
-        "    { \"@odata.id\": \"People('russellwhyte')\" },\n" +
-        "    { \"@odata.id\": \"People('scottketchum')\" } \n" +
-        "  ]\n" +
+        "\"@odata.id\": \"/People('scottketchum')\"\n" +
         "}";
+    
     HttpPost postRequest = new HttpPost(baseURL + "/People('kristakemp')/Friends/$ref");
     postRequest.setEntity(new StringEntity(payload, ContentType.APPLICATION_JSON));
     response = httpSend(postRequest, 204);
@@ -360,8 +357,7 @@ public class TripPinServiceTest {
 
     assertTrue(node.get("value").isArray());
     assertEquals("/People('genevievereeves')", ((ArrayNode)node.get("value")).get(0).get("@odata.id").asText());
-    assertEquals("/People('russellwhyte')", ((ArrayNode)node.get("value")).get(1).get("@odata.id").asText());
-    assertEquals("/People('scottketchum')", ((ArrayNode)node.get("value")).get(2).get("@odata.id").asText());
+    assertEquals("/People('scottketchum')", ((ArrayNode)node.get("value")).get(1).get("@odata.id").asText());
   }