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