[OLINGO-365] Adding checks for enhanced composable invoker
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/34f08256 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/34f08256 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/34f08256 Branch: refs/heads/master Commit: 34f0825604a76a8803a357bd9c9ccaf88657d264 Parents: a13a0d8 Author: Francesco Chicchiriccò <--global> Authored: Mon Aug 4 13:09:47 2014 +0200 Committer: Francesco Chicchiriccò <--global> Committed: Mon Aug 4 13:09:47 2014 +0200 ---------------------------------------------------------------------- .../java/org/apache/olingo/fit/V4Services.java | 67 ++++++++++++++------ .../fit/proxy/v4/APIBasicDesignTestITCase.java | 22 ++++++- 2 files changed, 68 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/34f08256/fit/src/main/java/org/apache/olingo/fit/V4Services.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Services.java b/fit/src/main/java/org/apache/olingo/fit/V4Services.java index 5b59ddc..4f751aa 100644 --- a/fit/src/main/java/org/apache/olingo/fit/V4Services.java +++ b/fit/src/main/java/org/apache/olingo/fit/V4Services.java @@ -112,19 +112,6 @@ public class V4Services extends AbstractServices { super(ODataServiceVersion.V40, metadata); } - @POST - @Path("/GetAllProducts()/Discount") - public Response discount() { - try { - final String basePath = "Products" + File.separatorChar + "feed"; - - final InputStream feed = FSManager.instance(version).readFile(basePath, Accept.JSON_FULLMETA); - return xml.createResponse(null, feed, Commons.getETag(basePath, version), Accept.JSON_FULLMETA); - } catch (Exception e) { - return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(version), e); - } - } - @GET @Path("/redirect/{name}({id})") public Response conformanceRedirect( @@ -386,7 +373,7 @@ public class V4Services extends AbstractServices { return StringUtils.isBlank(filter) && StringUtils.isBlank(search) ? NumberUtils.isNumber(type) ? super.getEntityInternal( - uriInfo.getRequestUri().toASCIIString(), accept, "People", type, format, null, null) + uriInfo.getRequestUri().toASCIIString(), accept, "People", type, format, null, null) : super.getEntitySet(accept, "People", type) : super.getEntitySet(uriInfo, accept, "People", top, skip, format, count, filter, orderby, skiptoken); } @@ -767,7 +754,7 @@ public class V4Services extends AbstractServices { return utils.getValue().createResponse( FSManager.instance(version).readFile(Constants.get(version, ConstantKey.REF) - + File.separatorChar + filename, utils.getKey()), + + File.separatorChar + filename, utils.getKey()), null, utils.getKey()); } catch (Exception e) { @@ -807,7 +794,7 @@ public class V4Services extends AbstractServices { final Response response = getEntityInternal(uriInfo.getRequestUri().toASCIIString(), - accept, entitySetName, entityId, accept, StringUtils.EMPTY, StringUtils.EMPTY); + accept, entitySetName, entityId, accept, StringUtils.EMPTY, StringUtils.EMPTY); return response.getStatus() >= 400 ? super.postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, changes) : super.patchEntity(uriInfo, accept, contentType, prefer, ifMatch, entitySetName, entityId, changes); @@ -1033,7 +1020,7 @@ public class V4Services extends AbstractServices { // 1. Fetch the contained entity to be removed final InputStream entry = FSManager.instance(version). readFile(containedPath(entityId, containedEntitySetName). - append('(').append(containedEntityId).append(')').toString(), Accept.ATOM); + append('(').append(containedEntityId).append(')').toString(), Accept.ATOM); final ResWrap<Entity> container = atomDeserializer.toEntity(entry); // 2. Remove the contained entity @@ -1161,6 +1148,37 @@ public class V4Services extends AbstractServices { } @GET + @Path("/GetPerson2({param:.*})/Emails") + public Response functionGetPerson2Emails( + @Context final UriInfo uriInfo, + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) { + + return getPath(accept, "Customers", "1", "Emails", format); + } + + @GET + @Path("/GetPerson2({param:.*})/HomeAddress") + public Response functionGetPerson2HomeAddress( + @Context final UriInfo uriInfo, + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) { + + return getPath(accept, "Customers", "1", "HomeAddress", format); + } + + @GET + @Path("/GetPerson2({param:.*})/Parent") + public Response functionGetPerson2Parent( + @Context final UriInfo uriInfo, + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) { + + return getEntityInternal( + uriInfo.getRequestUri().toASCIIString(), accept, "Customers", "2", format, null, null); + } + + @GET @Path("/GetPerson({param:.*})") public Response functionGetPerson( @Context final UriInfo uriInfo, @@ -1284,6 +1302,19 @@ public class V4Services extends AbstractServices { } @POST + @Path("/GetAllProducts()/Discount") + public Response actionBoundDiscount() { + try { + final String basePath = "Products" + File.separatorChar + "feed"; + + final InputStream feed = FSManager.instance(version).readFile(basePath, Accept.JSON_FULLMETA); + return xml.createResponse(null, feed, Commons.getETag(basePath, version), Accept.JSON_FULLMETA); + } catch (Exception e) { + return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(version), e); + } + } + + @POST @Path("/ResetBossAddress()") public Response actionResetBossAddress( @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept, @@ -1307,7 +1338,7 @@ public class V4Services extends AbstractServices { final ResWrap<Property> result = new ResWrap<Property>( URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) - + "Microsoft.Test.OData.Services.ODataWCFService.Address"), + + "Microsoft.Test.OData.Services.ODataWCFService.Address"), null, entity.getProperty("address")); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/34f08256/fit/src/test/java/org/apache/olingo/fit/proxy/v4/APIBasicDesignTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/APIBasicDesignTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/APIBasicDesignTestITCase.java index ce537de..7d592c6 100644 --- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/APIBasicDesignTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/APIBasicDesignTestITCase.java @@ -550,10 +550,26 @@ public class APIBasicDesignTestITCase extends AbstractTestITCase { expand("ProductDetail"). orderBy("Name").skip(3).top(5).execute(); + // Complex/Entity final PersonComposableInvoker invoker2 = container.operations().getPerson2("London"); - // Complex/Entity (available only select and expand: after query option composition is not available anymore) - invoker2.select("Name"). // after the first query option no composition is possible - expand("Order").execute(); + // a. whole entity + final Person person = invoker2.select("Name").expand("Order").execute(); + assertNotNull(person); + assertEquals(1, person.getPersonID(), 0); + + // b. primitive collection property + final PrimitiveCollection<String> emails = invoker2.getEmails().execute(); + assertNotNull(emails); + assertFalse(emails.isEmpty()); + + // c. complex property + final Address homeAddress = invoker2.getHomeAddress().load(); + assertNotNull(homeAddress); + + // d. navigation property + final Person parent = invoker2.getParent().load(); + assertNotNull(parent); + assertEquals(2, parent.getPersonID(), 0); } }
