Repository: camel Updated Branches: refs/heads/master 2678a1adf -> 0d94bfe0c
CAMEL-7826 Fixed serviceRoot URI Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0d94bfe0 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0d94bfe0 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0d94bfe0 Branch: refs/heads/master Commit: 0d94bfe0c92a93d0a097fc77967385f2afea60a4 Parents: 2678a1a Author: Dhiraj Bokde <[email protected]> Authored: Mon Sep 15 20:30:09 2014 -0700 Committer: Dhiraj Bokde <[email protected]> Committed: Mon Sep 15 20:30:38 2014 -0700 ---------------------------------------------------------------------- .../olingo2/api/impl/Olingo2AppImpl.java | 25 +++++---- .../olingo2/api/Olingo2AppIntegrationTest.java | 56 ++++++++++++++++++-- 2 files changed, 65 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/0d94bfe0/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 327a6c3..ecb7d96 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 @@ -127,10 +127,7 @@ public final class Olingo2AppImpl implements Olingo2App { * @param builder custom HTTP client builder. */ public Olingo2AppImpl(String serviceUri, HttpAsyncClientBuilder builder) { - if (serviceUri == null) { - throw new IllegalArgumentException("serviceUri"); - } - this.serviceUri = serviceUri; + setServiceUri(serviceUri); if (builder == null) { this.client = HttpAsyncClients.createDefault(); @@ -143,7 +140,11 @@ public final class Olingo2AppImpl implements Olingo2App { @Override public void setServiceUri(String serviceUri) { - this.serviceUri = serviceUri; + if (serviceUri == null || serviceUri.isEmpty()) { + throw new IllegalArgumentException("serviceUri"); + } + this.serviceUri = serviceUri.endsWith(SEPARATOR) ? serviceUri.substring(0, serviceUri.length() - 1) + : serviceUri; } @Override @@ -513,9 +514,8 @@ public final class Olingo2AppImpl implements Olingo2App { case URI7A: // $links with 0..1 cardinality property final EdmEntitySet targetLinkEntitySet = uriInfo.getTargetEntitySet(); - final URI rootLinkUri = new URI(targetLinkEntitySet.getName()); EntityProviderWriteProperties linkProperties = - EntityProviderWriteProperties.serviceRoot(rootLinkUri).build(); + EntityProviderWriteProperties.serviceRoot(new URI(serviceUri + SEPARATOR)).build(); @SuppressWarnings("unchecked") final Map<String, Object> linkMap = (Map<String, Object>) content; response = EntityProvider.writeLink(responseContentType, targetLinkEntitySet, linkMap, linkProperties); @@ -524,12 +524,11 @@ public final class Olingo2AppImpl implements Olingo2App { case URI7B: // $links with * cardinality property final EdmEntitySet targetLinksEntitySet = uriInfo.getTargetEntitySet(); - final URI rootLinksUri = new URI(targetLinksEntitySet.getName()); EntityProviderWriteProperties linksProperties = - EntityProviderWriteProperties.serviceRoot(rootLinksUri).build(); + EntityProviderWriteProperties.serviceRoot(new URI(serviceUri + SEPARATOR)).build(); @SuppressWarnings("unchecked") - final Map<String, Object> linksMap = (Map<String, Object>) content; - response = EntityProvider.writeLink(responseContentType, targetLinksEntitySet, linksMap, linksProperties); + final List<Map<String, Object>> linksMap = (List<Map<String, Object>>) content; + response = EntityProvider.writeLinks(responseContentType, targetLinksEntitySet, linksMap, linksProperties); break; case URI1: @@ -538,8 +537,8 @@ public final class Olingo2AppImpl implements Olingo2App { case URI6B: // Entity final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet(); - final URI rootUri = new URI(targetEntitySet.getName()); - EntityProviderWriteProperties properties = EntityProviderWriteProperties.serviceRoot(rootUri).build(); + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(new URI(serviceUri + SEPARATOR)).build(); @SuppressWarnings("unchecked") final Map<String, Object> objectMap = (Map<String, Object>) content; response = EntityProvider.writeEntry(responseContentType, targetEntitySet, objectMap, properties); http://git-wip-us.apache.org/repos/asf/camel/blob/0d94bfe0/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 e8b951b..f67e0b5 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 @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; import org.apache.camel.component.olingo2.api.batch.Olingo2BatchChangeRequest; import org.apache.camel.component.olingo2.api.batch.Olingo2BatchQueryRequest; @@ -100,6 +101,8 @@ public class Olingo2AppIntegrationTest { // private static final ContentType TEST_FORMAT = ContentType.APPLICATION_XML_CS_UTF_8; private static final ContentType TEST_FORMAT = ContentType.APPLICATION_JSON_CS_UTF_8; private static final String INDEX = "/index.jsp"; + private static final Pattern LINK_PATTERN = Pattern.compile("[^(]+\\('([^']+)'\\)"); + private static final String ID_PROPERTY = "Id"; private static Olingo2App olingoApp; private static final String GEN_SAMPLE_DATA = "genSampleData=true"; @@ -108,7 +111,7 @@ public class Olingo2AppIntegrationTest { @BeforeClass public static void beforeClass() throws Exception { - olingoApp = new Olingo2AppImpl(TEST_SERVICE_URL); + olingoApp = new Olingo2AppImpl(TEST_SERVICE_URL + "/"); olingoApp.setContentType(TEST_FORMAT.toString()); LOG.info("Generate sample data "); @@ -243,7 +246,7 @@ public class Olingo2AppIntegrationTest { } @Test - public void testReadLinks() throws Exception { + public void testReadDeleteCreateLinks() throws Exception { final TestOlingo2ResponseHandler<List<String>> linksHandler = new TestOlingo2ResponseHandler<List<String>>(); olingoApp.read(edm, TEST_MANUFACTURER_LINKS_CARS, null, linksHandler); @@ -258,6 +261,53 @@ public class Olingo2AppIntegrationTest { final String link = linkHandler.await(); LOG.info("Read link: {}", link); + +//Deleting relationships through links is not supported in Olingo2 at the time of writing this test +/* + final TestOlingo2ResponseHandler<HttpStatusCodes> statusHandler = + new TestOlingo2ResponseHandler<HttpStatusCodes>(); + + final ArrayList<Map<String, Object>> carKeys = new ArrayList<Map<String, Object>>(); + for (String carLink : links) { + final Matcher matcher = LINK_PATTERN.matcher(carLink); + assertTrue("Link pattern " + carLink, matcher.matches()); + final String carId = matcher.group(1); + + final HashMap<String, Object> keys = new HashMap<String, Object>(); + keys.put(ID_PROPERTY, carId); + carKeys.add(keys); + + // delete manufacturer->car link + statusHandler.reset(); + final String resourcePath = TEST_MANUFACTURER_LINKS_CARS + "('" + carId + "')"; + olingoApp.delete(resourcePath, statusHandler); + + assertEquals("Delete car link " + resourcePath, HttpStatusCodes.OK.getStatusCode(), + statusHandler.await().getStatusCode()); + } + + // add links to all Cars + statusHandler.reset(); + olingoApp.create(edm, TEST_MANUFACTURER_LINKS_CARS, carKeys, statusHandler); + + assertEquals("Links update", HttpStatusCodes.ACCEPTED.getStatusCode(), statusHandler.await().getStatusCode()); + + // delete car->manufacturer link + statusHandler.reset(); + olingoApp.delete(TEST_CAR_LINK_MANUFACTURER, statusHandler); + + assertEquals("Delete manufacturer link " + TEST_CAR_LINK_MANUFACTURER, HttpStatusCodes.OK.getStatusCode(), + statusHandler.await().getStatusCode()); + + // add link to Manufacturer + statusHandler.reset(); + final HashMap<String, Object> manufacturerKey = new HashMap<String, Object>(); + manufacturerKey.put(ID_PROPERTY, "1"); + + olingoApp.create(edm, TEST_CAR_LINK_MANUFACTURER, manufacturerKey, statusHandler); + + assertEquals("Link update", HttpStatusCodes.ACCEPTED.getStatusCode(), statusHandler.await().getStatusCode()); +*/ } @Test @@ -413,7 +463,7 @@ public class Olingo2AppIntegrationTest { private Map<String, Object> getEntityData() { Map<String, Object> data = new HashMap<String, Object>(); - data.put("Id", "123"); + data.put(ID_PROPERTY, "123"); data.put("Name", "MyCarManufacturer"); data.put(FOUNDED_PROPERTY, new Date()); Map<String, Object> address = new HashMap<String, Object>();
