You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dh...@apache.org on 2014/09/11 22:52:39 UTC

[2/2] git commit: CAMEL-7806 Fixed Olingo2 API and component to support entity container names, also added tests with container names and batch content id reference with property suffix

CAMEL-7806 Fixed Olingo2 API and component to support entity container names, also added tests with container names and batch content id reference with property suffix


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/56615ec3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/56615ec3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/56615ec3

Branch: refs/heads/master
Commit: 56615ec332f51899eb6fc17e47dae4c67c6a887f
Parents: 6984401
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Sep 11 13:52:28 2014 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Sep 11 13:52:28 2014 -0700

----------------------------------------------------------------------
 .../api/batch/Olingo2BatchChangeRequest.java    | 10 +++++++
 .../api/batch/Olingo2BatchQueryRequest.java     |  4 +++
 .../olingo2/api/impl/Olingo2AppImpl.java        | 23 +++++++++++++--
 .../olingo2/api/Olingo2AppIntegrationTest.java  |  3 +-
 .../olingo2/Olingo2AppIntegrationTest.java      | 31 +++++++++++++-------
 5 files changed, 57 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/56615ec3/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchChangeRequest.java
----------------------------------------------------------------------
diff --git a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchChangeRequest.java b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchChangeRequest.java
index d2d06ad..a032cb5 100644
--- a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchChangeRequest.java
+++ b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchChangeRequest.java
@@ -88,6 +88,16 @@ public class Olingo2BatchChangeRequest extends Olingo2BatchRequest {
         }
 
         public Olingo2BatchChangeRequest build() {
+            // avoid later NPEs
+            if (request.resourcePath == null) {
+                throw new IllegalArgumentException("Null resourcePath");
+            }
+            if (request.operation == null) {
+                throw new IllegalArgumentException("Null operation");
+            }
+            if (request.operation != Operation.DELETE && request.body == null) {
+                throw new IllegalArgumentException("Null body");
+            }
             return request;
         }
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/56615ec3/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchQueryRequest.java
----------------------------------------------------------------------
diff --git a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchQueryRequest.java b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchQueryRequest.java
index cac47ff..5ae3ead 100644
--- a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchQueryRequest.java
+++ b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/batch/Olingo2BatchQueryRequest.java
@@ -50,6 +50,10 @@ public class Olingo2BatchQueryRequest extends Olingo2BatchRequest {
         private Olingo2BatchQueryRequest request = new Olingo2BatchQueryRequest();
 
         public Olingo2BatchQueryRequest build() {
+            // avoid later NPEs
+            if (request.resourcePath == null) {
+                throw new IllegalArgumentException("Null resourcePath");
+            }
             return request;
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/56615ec3/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
----------------------------------------------------------------------
diff --git a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
index 0b3705e..327a6c3 100644
--- a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
+++ b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
@@ -69,6 +69,7 @@ import org.apache.olingo.odata2.api.client.batch.BatchSingleResponse;
 import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.commons.ODataHttpHeaders;
 import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmEntityContainer;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmProperty;
@@ -696,7 +697,25 @@ public final class Olingo2AppImpl implements Olingo2App {
         }
 
         // create a dummy entity location by adding a dummy key predicate
-        final EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet(referencedEntity.toString());
+        // look for a Container name if available
+        String referencedEntityName = referencedEntity.toString();
+        final int containerSeparator = referencedEntityName.lastIndexOf('.');
+        final EdmEntityContainer entityContainer;
+        if (containerSeparator != -1) {
+            final String containerName = referencedEntityName.substring(0, containerSeparator);
+            referencedEntityName = referencedEntityName.substring(containerSeparator + 1);
+            entityContainer = edm.getEntityContainer(containerName);
+            if (entityContainer == null) {
+                throw new IllegalArgumentException("EDM does not have entity container " + containerName);
+            }
+        } else {
+            entityContainer = edm.getDefaultEntityContainer();
+            if (entityContainer == null) {
+                throw new IllegalArgumentException("EDM does not have a default entity container"
+                    + ", use a fully qualified entity set name");
+            }
+        }
+        final EdmEntitySet entitySet = entityContainer.getEntitySet(referencedEntityName);
         final List<EdmProperty> keyProperties = entitySet.getEntityType().getKeyProperties();
 
         if (keyProperties.size() == 1) {
@@ -710,7 +729,7 @@ public final class Olingo2AppImpl implements Olingo2App {
             referencedEntity.append(')');
         }
 
-        return pathSeparator == -1 ? referencedEntity.toString()
+        return pathSeparator == -1 ? referencedEntityName
             : referencedEntity.append(entityReference.substring(pathSeparator)).toString();
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/56615ec3/components/camel-olingo2/camel-olingo2-api/src/test/java/org/apache/camel/component/olingo2/api/Olingo2AppIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-olingo2/camel-olingo2-api/src/test/java/org/apache/camel/component/olingo2/api/Olingo2AppIntegrationTest.java b/components/camel-olingo2/camel-olingo2-api/src/test/java/org/apache/camel/component/olingo2/api/Olingo2AppIntegrationTest.java
index aa41056..e8b951b 100644
--- a/components/camel-olingo2/camel-olingo2-api/src/test/java/org/apache/camel/component/olingo2/api/Olingo2AppIntegrationTest.java
+++ b/components/camel-olingo2/camel-olingo2-api/src/test/java/org/apache/camel/component/olingo2/api/Olingo2AppIntegrationTest.java
@@ -73,12 +73,13 @@ public class Olingo2AppIntegrationTest {
     private static final long TIMEOUT = 10;
 
     private static final String MANUFACTURERS = "Manufacturers";
+    private static final String FQN_MANUFACTURERS = "DefaultContainer.Manufacturers";
     private static final String ADDRESS = "Address";
     private static final String CARS = "Cars";
 
     private static final String TEST_KEY = "'1'";
     private static final String TEST_CREATE_KEY = "'123'";
-    private static final String TEST_MANUFACTURER = MANUFACTURERS + "(" + TEST_KEY + ")";
+    private static final String TEST_MANUFACTURER = FQN_MANUFACTURERS + "(" + TEST_KEY + ")";
     private static final String TEST_CREATE_MANUFACTURER = MANUFACTURERS + "(" + TEST_CREATE_KEY + ")";
 
     private static final String TEST_RESOURCE_CONTENT_ID = "1";

http://git-wip-us.apache.org/repos/asf/camel/blob/56615ec3/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppIntegrationTest.java b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppIntegrationTest.java
index aa96533..2b67d44 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppIntegrationTest.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppIntegrationTest.java
@@ -61,7 +61,8 @@ public class Olingo2AppIntegrationTest extends AbstractOlingo2TestSupport {
     private static final String TEST_RESOURCE_CONTENT_ID = "1";
     private static final String ADDRESS = "Address";
     private static final String TEST_RESOURCE = "$1";
-    private static final String TEST_CREATE_MANUFACTURER = "Manufacturers('123')";
+    private static final String TEST_RESOURCE_ADDRESS = TEST_RESOURCE + "/Address";
+    private static final String TEST_CREATE_MANUFACTURER = "DefaultContainer.Manufacturers('123')";
 
     @Test
     public void testRead() throws Exception {
@@ -160,26 +161,29 @@ public class Olingo2AppIntegrationTest extends AbstractOlingo2TestSupport {
         batchParts.add(Olingo2BatchChangeRequest.resourcePath(MANUFACTURERS).
             contentId(TEST_RESOURCE_CONTENT_ID).operation(Operation.CREATE).body(data).build());
 
-        // 6. update
-        final Map<String, Object> updateData = new HashMap<String, Object>(data);
+        // 6. update address in created entry
         @SuppressWarnings("unchecked")
+        final Map<String, Object> updateData = new HashMap<String, Object>(data);
         Map<String, Object> address = (Map<String, Object>) updateData.get(ADDRESS);
-        updateData.put("Name", "MyCarManufacturer Renamed");
         address.put("Street", "Main Street");
+        batchParts.add(
+            Olingo2BatchChangeRequest.resourcePath(TEST_RESOURCE_ADDRESS).operation(Operation.UPDATE).body(address).build());
 
+        // 7. update
+        updateData.put("Name", "MyCarManufacturer Renamed");
         batchParts.add(Olingo2BatchChangeRequest.resourcePath(TEST_RESOURCE).operation(Operation.UPDATE)
             .body(updateData).build());
 
-        // 7. delete
+        // 8. delete
         batchParts.add(Olingo2BatchChangeRequest.resourcePath(TEST_RESOURCE).operation(Operation.DELETE).build());
 
-        // 8. read to verify delete
+        // 9. read to verify delete
         batchParts.add(Olingo2BatchQueryRequest.resourcePath(TEST_CREATE_MANUFACTURER).build());
 
         // execute batch request
         final List<Olingo2BatchResponse> responseParts = requestBody("direct://BATCH", batchParts);
         assertNotNull("Batch response", responseParts);
-        assertEquals("Batch responses expected", 8, responseParts.size());
+        assertEquals("Batch responses expected", 9, responseParts.size());
 
         final Edm edm = (Edm) responseParts.get(0).getBody();
         assertNotNull(edm);
@@ -203,13 +207,18 @@ public class Olingo2AppIntegrationTest extends AbstractOlingo2TestSupport {
 
         int statusCode = responseParts.get(5).getStatusCode();
         assertEquals(HttpStatusCodes.NO_CONTENT.getStatusCode(), statusCode);
+        LOG.info("Update address status: {}", statusCode);
+
         statusCode = responseParts.get(6).getStatusCode();
-        LOG.info("Update status: {}", statusCode);
+        assertEquals(HttpStatusCodes.NO_CONTENT.getStatusCode(), statusCode);
+        LOG.info("Update entry status: {}", statusCode);
+
+        statusCode = responseParts.get(7).getStatusCode();
         assertEquals(HttpStatusCodes.NO_CONTENT.getStatusCode(), statusCode);
         LOG.info("Delete status: {}", statusCode);
 
-        assertEquals(HttpStatusCodes.NOT_FOUND.getStatusCode(), responseParts.get(7).getStatusCode());
-        final Exception exception = (Exception) responseParts.get(7).getBody();
+        assertEquals(HttpStatusCodes.NOT_FOUND.getStatusCode(), responseParts.get(8).getStatusCode());
+        final Exception exception = (Exception) responseParts.get(8).getBody();
         assertNotNull(exception);
         LOG.info("Read deleted entry exception: {}", exception);
     }
@@ -226,7 +235,7 @@ public class Olingo2AppIntegrationTest extends AbstractOlingo2TestSupport {
                     .to("olingo2://read/Manufacturers?$orderBy=Name%20asc");
 
                 from("direct://READENTRY")
-                    .to("olingo2://read/Manufacturers");
+                    .to("olingo2://read/DefaultContainer.Manufacturers");
 
                 // test route for create
                 from("direct://CREATE")