Repository: olingo-odata4 Updated Branches: refs/heads/master 7c77b17c6 -> 04baf388e
[OLINGO-658] Modification operations should return the changed data Change-Id: I62b6db1c062618cd3c27b093d40b9456cd415f77 Signed-off-by: Christian Amend <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/04baf388 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/04baf388 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/04baf388 Branch: refs/heads/master Commit: 04baf388ecd1419fd3b0fdfc0e562542e1e2d742 Parents: 7c77b17 Author: Klaus Straubinger <[email protected]> Authored: Tue May 12 11:05:10 2015 +0200 Committer: Christian Amend <[email protected]> Committed: Tue May 12 13:57:51 2015 +0200 ---------------------------------------------------------------------- .../olingo/fit/tecsvc/client/BasicITCase.java | 87 ++++-------- .../fit/tecsvc/client/BatchClientITCase.java | 4 +- .../olingo/fit/tecsvc/client/BindingITCase.java | 2 +- .../fit/tecsvc/client/FunctionImportITCase.java | 74 ++++++---- .../olingo/fit/tecsvc/client/MediaITCase.java | 2 +- .../olingo/server/tecsvc/data/FunctionData.java | 4 +- .../processor/TechnicalEntityProcessor.java | 138 ++++++++++--------- .../tecsvc/processor/TechnicalProcessor.java | 11 +- 8 files changed, 158 insertions(+), 164 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java index c6c2efe..39d73b1 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java @@ -239,15 +239,10 @@ public class BasicITCase extends AbstractBaseTestITCase { final ODataEntityUpdateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityUpdateRequest( uri, UpdateType.PATCH, patchEntity); final ODataEntityUpdateResponse<ClientEntity> response = request.execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); // Check that the patched properties have changed and the other properties not. - // This check has to be in the same session in order to access the same data provider. - ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory().getEntityRequest(uri); - entityRequest.addCustomHeader(HttpHeader.COOKIE, response.getHeader(HttpHeader.SET_COOKIE).iterator().next()); - final ODataRetrieveResponse<ClientEntity> entityResponse = entityRequest.execute(); - assertEquals(HttpStatusCode.OK.getStatusCode(), entityResponse.getStatusCode()); - final ClientEntity entity = entityResponse.getBody(); + final ClientEntity entity = response.getBody(); assertNotNull(entity); final ClientProperty property1 = entity.getProperty("PropertyString"); assertNotNull(property1); @@ -276,15 +271,10 @@ public class BasicITCase extends AbstractBaseTestITCase { final ODataEntityUpdateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityUpdateRequest( uri, UpdateType.REPLACE, newEntity); final ODataEntityUpdateResponse<ClientEntity> response = request.execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); // Check that the updated properties have changed and that other properties have their default values. - // This check has to be in the same session in order to access the same data provider. - ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory().getEntityRequest(uri); - entityRequest.addCustomHeader(HttpHeader.COOKIE, response.getHeader(HttpHeader.SET_COOKIE).iterator().next()); - final ODataRetrieveResponse<ClientEntity> entityResponse = entityRequest.execute(); - assertEquals(HttpStatusCode.OK.getStatusCode(), entityResponse.getStatusCode()); - final ClientEntity entity = entityResponse.getBody(); + final ClientEntity entity = response.getBody(); assertNotNull(entity); final ClientProperty property1 = entity.getProperty("PropertyInt64"); assertNotNull(property1); @@ -309,15 +299,10 @@ public class BasicITCase extends AbstractBaseTestITCase { final ODataEntityUpdateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityUpdateRequest( uri, UpdateType.PATCH, patchEntity); final ODataEntityUpdateResponse<ClientEntity> response = request.execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); // Check that the patched properties have changed and the other properties not. - // This check has to be in the same session in order to access the same data provider. - ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory().getEntityRequest(uri); - entityRequest.addCustomHeader(HttpHeader.COOKIE, response.getHeader(HttpHeader.SET_COOKIE).iterator().next()); - final ODataRetrieveResponse<ClientEntity> entityResponse = entityRequest.execute(); - assertEquals(HttpStatusCode.OK.getStatusCode(), entityResponse.getStatusCode()); - final ClientEntity entity = entityResponse.getBody(); + final ClientEntity entity = response.getBody(); assertNotNull(entity); final ClientComplexValue complex = entity.getProperty("PropertyComp").getComplexValue() .get("PropertyComp").getComplexValue(); @@ -353,15 +338,10 @@ public class BasicITCase extends AbstractBaseTestITCase { final ODataEntityUpdateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityUpdateRequest( uri, UpdateType.REPLACE, newEntity); final ODataEntityUpdateResponse<ClientEntity> response = request.execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); // Check that the complex-property hierarchy is still there and that all primitive values are now null. - // This check has to be in the same session in order to access the same data provider. - ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory().getEntityRequest(uri); - entityRequest.addCustomHeader(HttpHeader.COOKIE, response.getHeader(HttpHeader.SET_COOKIE).iterator().next()); - final ODataRetrieveResponse<ClientEntity> entityResponse = entityRequest.execute(); - assertEquals(HttpStatusCode.OK.getStatusCode(), entityResponse.getStatusCode()); - final ClientEntity entity = entityResponse.getBody(); + final ClientEntity entity = response.getBody(); assertNotNull(entity); final ClientComplexValue complex = entity.getProperty("PropertyCompCompNav").getComplexValue() .get("PropertyCompNav").getComplexValue(); @@ -492,25 +472,14 @@ public class BasicITCase extends AbstractBaseTestITCase { .build(); final ODataEntityUpdateResponse<ClientEntity> response = getClient().getCUDRequestFactory() - .getEntityUpdateRequest(uri, - UpdateType.PATCH, - entity) + .getEntityUpdateRequest(uri, UpdateType.PATCH, entity) .execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); - final String cookie = response.getHeader(HttpHeader.SET_COOKIE).iterator().next(); - - // Check if entity has changed - final ODataEntityRequest<ClientEntity> entityRequest = - getClient().getRetrieveRequestFactory().getEntityRequest(uri); - entityRequest.addCustomHeader(HttpHeader.COOKIE, cookie); - final ODataRetrieveResponse<ClientEntity> entityResponse = entityRequest.execute(); - - assertEquals(HttpStatusCode.OK.getStatusCode(), entityResponse.getStatusCode()); - assertNotNull(entityResponse.getBody().getProperty("CollPropertyComp")); - assertEquals(2, entityResponse.getBody().getProperty("CollPropertyComp").getCollectionValue().size()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); + assertNotNull(response.getBody().getProperty("CollPropertyComp")); + assertEquals(2, response.getBody().getProperty("CollPropertyComp").getCollectionValue().size()); - final Iterator<ClientValue> collectionIterator = entityResponse.getBody() + final Iterator<ClientValue> collectionIterator = response.getBody() .getProperty("CollPropertyComp") .getCollectionValue() .iterator(); @@ -632,7 +601,7 @@ public class BasicITCase extends AbstractBaseTestITCase { } @Test - public void testComplexPropertyWithNotNullablePrimitiveValue() { + public void complexPropertyWithNotNullablePrimitiveValue() { final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI); final ClientObjectFactory of = client.getObjectFactory(); @@ -649,7 +618,7 @@ public class BasicITCase extends AbstractBaseTestITCase { } @Test - public void testUpsert() throws EdmPrimitiveTypeException { + public void upsert() throws EdmPrimitiveTypeException { final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI); final ClientObjectFactory of = client.getObjectFactory(); @@ -681,7 +650,7 @@ public class BasicITCase extends AbstractBaseTestITCase { } @Test - public void testUpdatePropertyWithNull() { + public void updatePropertyWithNull() { final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI); final ClientObjectFactory of = client.getObjectFactory(); @@ -698,21 +667,13 @@ public class BasicITCase extends AbstractBaseTestITCase { .getEntityUpdateRequest(targetURI, UpdateType.PATCH, entity) .execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), updateResponse.getStatusCode()); - final String cookie = updateResponse.getHeader(HttpHeader.SET_COOKIE).iterator().next(); - - final ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory() - .getEntityRequest(targetURI); - entityRequest.addCustomHeader(HttpHeader.COOKIE, cookie); - final ODataRetrieveResponse<ClientEntity> entityResponse = entityRequest.execute(); - assertEquals(HttpStatusCode.OK.getStatusCode(), entityResponse.getStatusCode()); - - assertTrue(entityResponse.getBody().getProperty("PropertyString").hasNullValue()); - assertEquals(34, entityResponse.getBody().getProperty("PropertyDecimal").getPrimitiveValue().toValue()); + assertEquals(HttpStatusCode.OK.getStatusCode(), updateResponse.getStatusCode()); + assertTrue(updateResponse.getBody().getProperty("PropertyString").hasNullValue()); + assertEquals(34, updateResponse.getBody().getProperty("PropertyDecimal").getPrimitiveValue().toValue()); } @Test(expected = ODataClientErrorException.class) - public void testUpdatePropertyWithNullNotAllowed() { + public void updatePropertyWithNullNotAllowed() { final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI); final ClientObjectFactory of = client.getObjectFactory(); @@ -729,7 +690,7 @@ public class BasicITCase extends AbstractBaseTestITCase { } @Test - public void testUpdateMerge() { + public void updateMerge() { final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI); final ClientObjectFactory of = client.getObjectFactory(); @@ -753,7 +714,7 @@ public class BasicITCase extends AbstractBaseTestITCase { .getEntityUpdateRequest(targetURI, UpdateType.PATCH, entity) .execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); final String cookie = response.getHeader(HttpHeader.SET_COOKIE).iterator().next(); final ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory() @@ -823,7 +784,7 @@ public class BasicITCase extends AbstractBaseTestITCase { } @Test - public void testUpdateReplace() { + public void updateReplace() { final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI); final ClientObjectFactory of = client.getObjectFactory(); @@ -853,7 +814,7 @@ public class BasicITCase extends AbstractBaseTestITCase { .getEntityUpdateRequest(targetURI, UpdateType.REPLACE, entity) .execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); final String cookie = response.getHeader(HttpHeader.SET_COOKIE).iterator().next(); final ODataEntityRequest<ClientEntity> entityRequest = client.getRetrieveRequestFactory() http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java index 4cf68ee..63c9a7f 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java @@ -424,7 +424,7 @@ public class BatchClientITCase extends AbstractTestITCase { final ODataEntityCreateResponse<ClientEntity> createResponse = ((ODataEntityCreateResponse<ClientEntity>) res); res = chgitem.next(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), res.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), res.getStatusCode()); assertTrue(res instanceof ODataEntityUpdateResponse); final ODataEntitySetRequest<ClientEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest( @@ -561,7 +561,7 @@ public class BatchClientITCase extends AbstractTestITCase { // Update assertTrue(item.hasNext()); final ODataResponse response2 = item.next(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response2.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response2.getStatusCode()); assertTrue(response2 instanceof ODataEntityUpdateResponse); // Upsert http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BindingITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BindingITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BindingITCase.java index 8b8b432..48c4a00 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BindingITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BindingITCase.java @@ -288,7 +288,7 @@ public class BindingITCase extends AbstractBaseTestITCase { ODataEntityUpdateResponse<ClientEntity> updateResponse = client.getCUDRequestFactory().getEntityUpdateRequest(entityURI, UpdateType.PATCH, entity).execute(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), updateResponse.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), updateResponse.getStatusCode()); final ODataEntityRequest<ClientEntity> getRequest = client.getRetrieveRequestFactory().getEntityRequest( http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/FunctionImportITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/FunctionImportITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/FunctionImportITCase.java index a81a1df..5632bda 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/FunctionImportITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/FunctionImportITCase.java @@ -50,8 +50,27 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void entity() throws Exception { final ODataInvokeRequest<ClientEntity> request = getClient().getInvokeRequestFactory() - .getFunctionInvokeRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTESTwoKeyNav").build(), ClientEntity.class); + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTESTwoKeyNav").build(), + ClientEntity.class); + assertNotNull(request); + + final ODataInvokeResponse<ClientEntity> response = request.execute(); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); + + final ClientEntity entity = response.getBody(); + assertNotNull(entity); + final ClientProperty property = entity.getProperty("PropertyInt16"); + assertNotNull(property); + assertEquals(1, property.getPrimitiveValue().toValue()); + } + + @Test + public void entityWithoutEntitySet() throws Exception { + final ODataInvokeRequest<ClientEntity> request = getClient().getInvokeRequestFactory() + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTETKeyNav").build(), + ClientEntity.class); assertNotNull(request); final ODataInvokeResponse<ClientEntity> response = request.execute(); @@ -67,8 +86,10 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void entityCollection() { final ODataInvokeRequest<ClientEntitySet> request = getClient().getInvokeRequestFactory() - .getFunctionInvokeRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCollESTwoKeyNavParam").build(), ClientEntitySet.class, + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI) + .appendOperationCallSegment("FICRTCollESTwoKeyNavParam").build(), + ClientEntitySet.class, Collections.<String, ClientValue> singletonMap("ParameterInt16", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(2))); assertNotNull(request); @@ -93,10 +114,11 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { public void entityCollectionWithAppendedKey() { // .../odata.svc/FICRTCollESMedia()(1) final ODataInvokeRequest<ClientEntity> request = getClient().getInvokeRequestFactory() - .getFunctionInvokeRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCollESMedia") - .appendKeySegment(getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1)) - .build(), ClientEntity.class); + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTCollESMedia") + .appendKeySegment(getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1)) + .build(), + ClientEntity.class); assertNotNull(request); final ODataInvokeResponse<ClientEntity> response = request.execute(); @@ -114,11 +136,12 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { public void entityCollectionWithAppendedKeyAndProperty() { // .../odata.svc/FICRTCollESMedia()(2)/PropertyInt16 final ODataInvokeRequest<ClientProperty> request = getClient().getInvokeRequestFactory() - .getFunctionInvokeRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCollESMedia") - .appendKeySegment(getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(2)) - .appendPropertySegment("PropertyInt16") - .build(), ClientProperty.class); + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTCollESMedia") + .appendKeySegment(getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(2)) + .appendPropertySegment("PropertyInt16") + .build(), + ClientProperty.class); assertNotNull(request); final ODataInvokeResponse<ClientProperty> response = request.execute(); @@ -133,8 +156,8 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void countEntityCollection() throws Exception { final ODataRawRequest request = getClient().getRetrieveRequestFactory() - .getRawRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCollESMedia").count().build()); + .getRawRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTCollESMedia") + .count().build()); final ODataRawResponse response = request.execute(); assertEquals("4", IOUtils.toString(response.getRawResponse())); } @@ -142,8 +165,9 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void complexWithPath() throws Exception { final ODataInvokeRequest<ClientProperty> request = getClient().getInvokeRequestFactory() - .getFunctionInvokeRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCTTwoPrim").appendPropertySegment("PropertyInt16").build(), + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTCTTwoPrim") + .appendPropertySegment("PropertyInt16").build(), ClientProperty.class); assertNotNull(request); @@ -158,8 +182,9 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void primitiveCollection() throws Exception { final ODataInvokeRequest<ClientProperty> request = getClient().getInvokeRequestFactory() - .getFunctionInvokeRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCollString").build(), ClientProperty.class); + .getFunctionInvokeRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTCollString").build(), + ClientProperty.class); assertNotNull(request); final ODataInvokeResponse<ClientProperty> response = request.execute(); @@ -178,8 +203,9 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void primitiveValue() throws Exception { final ODataValueRequest request = getClient().getRetrieveRequestFactory() - .getPropertyValueRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTString").appendValueSegment().build()); + .getPropertyValueRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTString") + .appendValueSegment().build()); final ODataRetrieveResponse<ClientPrimitiveValue> response = request.execute(); assertEquals("UFCRTString string value", response.getBody().toValue()); } @@ -187,9 +213,9 @@ public class FunctionImportITCase extends AbstractBaseTestITCase { @Test public void primitiveValueWithPath() throws Exception { final ODataValueRequest request = getClient().getRetrieveRequestFactory() - .getPropertyValueRequest(getClient().newURIBuilder(TecSvcConst.BASE_URI) - .appendOperationCallSegment("FICRTCTTwoPrim") - .appendPropertySegment("PropertyString").appendValueSegment().build()); + .getPropertyValueRequest( + getClient().newURIBuilder(TecSvcConst.BASE_URI).appendOperationCallSegment("FICRTCTTwoPrim") + .appendPropertySegment("PropertyString").appendValueSegment().build()); final ODataRetrieveResponse<ClientPrimitiveValue> response = request.execute(); assertEquals("UFCRTCTTwoPrim string value", response.getBody().toValue()); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/MediaITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/MediaITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/MediaITCase.java index 9380ab4..92336fd 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/MediaITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/MediaITCase.java @@ -103,7 +103,7 @@ public final class MediaITCase extends AbstractBaseTestITCase { assertNotNull(request); final ODataMediaEntityUpdateResponse<ClientEntity> response = request.payloadManager().getResponse(); - assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode()); + assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); // Check that the media stream has changed. // This check has to be in the same session in order to access the same data provider. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java index 7e126a0..517c7df 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java @@ -55,7 +55,9 @@ public class FunctionData { protected static Entity entityFunction(final String name, final List<UriParameter> parameters, final Map<String, EntityCollection> data) throws DataProviderException { final List<Entity> esTwoKeyNav = data.get("ESTwoKeyNav").getEntities(); - if (name.equals("UFCRTETTwoKeyNav")) { + if (name.equals("UFCRTETKeyNav")) { + return data.get("ESKeyNav").getEntities().get(0); + } else if (name.equals("UFCRTETTwoKeyNav")) { return esTwoKeyNav.get(0); } else if (name.equals("UFCRTETTwoKeyNavParam")) { final int index = parameters.isEmpty() ? 0 : Short.valueOf(parameters.get(0).getText()); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java index 9eb9800..ac70879 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java @@ -157,23 +157,23 @@ public class TechnicalEntityProcessor extends TechnicalProcessor EntityCollection collection = dataProvider.processActionEntityCollection(action.getName(), deserializerResult.getActionParameters()); - if (collection == null) { - // Collection Propertys must never be null - throw new ODataApplicationException("The action could no be executed", 500, Locale.ROOT); - } else if (collection.getEntities().contains(null) && !action.getReturnType().isNullable()) { - // Not nullable return type but array contains a null value - throw new ODataApplicationException("The action could no be executed", 500, Locale.ROOT); + // Collections must never be null. + // Not nullable return types must not contain a null value. + if (collection == null + || collection.getEntities().contains(null) && !action.getReturnType().isNullable()) { + throw new ODataApplicationException("The action could not be executed.", + HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT); } - EdmEntityType type = (EdmEntityType) action.getReturnType().getType(); - ContextURL contextURL = ContextURL.with().type(type).asCollection().build(); - EntityCollectionSerializerOptions options = EntityCollectionSerializerOptions.with().contextURL(contextURL).build(); - - SerializerResult result = - odata.createSerializer(ODataFormat.fromContentType(responseFormat)) - .entityCollection(serviceMetadata, type, collection, options); - + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo.asUriInfoResource()); + final EdmEntityType type = (EdmEntityType) action.getReturnType().getType(); + final ODataFormat format = ODataFormat.fromContentType(responseFormat); + EntityCollectionSerializerOptions options = EntityCollectionSerializerOptions.with() + .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : + getContextUrl(edmEntitySet, type, false, null, null)) + .build(); + response.setContent(odata.createSerializer(format) + .entityCollection(serviceMetadata, type, collection, options).getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setContent(result.getContent()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } @@ -181,13 +181,16 @@ public class TechnicalEntityProcessor extends TechnicalProcessor public void countEntityCollection(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo) throws ODataApplicationException, SerializerException { validateOptions(uriInfo.asUriInfoResource()); - getEdmEntitySet(uriInfo); // including checks - EntityCollection entitySet = readEntityCollection(uriInfo); - if (entitySet == null) { + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo); // including checks + final EntityCollection entitySetInitial = readEntityCollection(uriInfo); + if (entitySetInitial == null) { throw new ODataApplicationException("Nothing found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } else { - setCount(entitySet); - response.setContent(odata.createFixedFormatSerializer().count(entitySet.getCount())); + EntityCollection entitySet = new EntityCollection(); + entitySet.getEntities().addAll(entitySetInitial.getEntities()); + FilterHandler.applyFilterSystemQuery(uriInfo.getFilterOption(), entitySet, edmEntitySet); + response.setContent(odata.createFixedFormatSerializer().count( + entitySet.getEntities().size())); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, HttpContentType.TEXT_PLAIN); } @@ -206,7 +209,6 @@ public class TechnicalEntityProcessor extends TechnicalProcessor final Entity entity = readEntity(uriInfo); final ODataFormat format = ODataFormat.fromContentType(requestedContentType); - ODataSerializer serializer = odata.createSerializer(format); final ExpandOption expand = uriInfo.getExpandOption(); final SelectOption select = uriInfo.getSelectOption(); @@ -214,15 +216,8 @@ public class TechnicalEntityProcessor extends TechnicalProcessor final Entity entitySerialization = expandHandler.transformEntityGraphToTree(entity, edmEntitySet, expand); expandHandler.applyExpandQueryOptions(entitySerialization, edmEntitySet, expand); - response.setContent(serializer.entity( - serviceMetadata, - edmEntitySet.getEntityType(), - entitySerialization, - EntitySerializerOptions.with() - .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : - getContextUrl(edmEntitySet, edmEntityType, true, expand, select)) - .expand(expand).select(select) - .build()).getContent()); + response.setContent(serializeEntity(entitySerialization, edmEntitySet, edmEntityType, format, expand, select) + .getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString()); } @@ -278,13 +273,8 @@ public class TechnicalEntityProcessor extends TechnicalProcessor } final ODataFormat format = ODataFormat.fromContentType(responseFormat); - ODataSerializer serializer = odata.createSerializer(format); - response.setContent(serializer.entity(serviceMetadata, edmEntityType, entity, - EntitySerializerOptions.with() - .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : - getContextUrl(edmEntitySet, edmEntityType, true, null, null)) - .expand(expand) - .build()).getContent()); + response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, format, expand, null) + .getContent()); response.setStatusCode(HttpStatusCode.CREATED.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); response.setHeader(HttpHeader.LOCATION, @@ -296,6 +286,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor final ContentType requestFormat, final ContentType responseFormat) throws ODataApplicationException, DeserializerException, SerializerException { final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo); + final EdmEntityType edmEntityType = edmEntitySet.getEntityType(); Entity entity; try { @@ -322,19 +313,31 @@ public class TechnicalEntityProcessor extends TechnicalProcessor dataProvider.update(request.getRawBaseUri(), edmEntitySet, entity, changedEntity, request.getMethod() == HttpMethod.PATCH, false); - response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); + + final ODataFormat format = ODataFormat.fromContentType(responseFormat); + response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, format, null, null) + .getContent()); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } @Override public void updateMediaEntity(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo, final ContentType requestFormat, final ContentType responseFormat) throws ODataApplicationException, DeserializerException, SerializerException { - getEdmEntitySet(uriInfo); // including checks + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo); + final EdmEntityType edmEntityType = edmEntitySet.getEntityType(); + Entity entity = readEntity(uriInfo); checkRequestFormat(requestFormat); dataProvider.setMedia(entity, odata.createFixedFormatDeserializer().binary(request.getBody()), requestFormat.toContentTypeString()); - response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); + + final ODataFormat format = ODataFormat.fromContentType(responseFormat); + response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, format, null, null) + .getContent()); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } @Override @@ -350,34 +353,29 @@ public class TechnicalEntityProcessor extends TechnicalProcessor public void processActionEntity(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo, final ContentType requestFormat, final ContentType responseFormat) throws ODataApplicationException, DeserializerException, SerializerException { - EdmAction action = checkBoundAndExtractAction(uriInfo); - DeserializerResult deserializerResult = + final EdmAction action = checkBoundAndExtractAction(uriInfo); + final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo.asUriInfoResource()); + final EdmEntityType type = (EdmEntityType) action.getReturnType().getType(); + + final DeserializerResult deserializerResult = odata.createDeserializer(ODataFormat.fromContentType(requestFormat)) .actionParameters(request.getBody(), action); - EntityActionResult entityResult = + final EntityActionResult entityResult = dataProvider.processActionEntity(action.getName(), deserializerResult.getActionParameters()); - EdmEntityType type = (EdmEntityType) action.getReturnType().getType(); if (entityResult == null || entityResult.getEntity() == null) { if (action.getReturnType().isNullable()) { response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } else { // Not nullable return type so we have to give back a 500 - throw new ODataApplicationException("The action could no be executed", 500, Locale.ROOT); + throw new ODataApplicationException("The action could not be executed.", + HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT); } } else { - ContextURL contextURL = ContextURL.with().type(type).build(); - EntitySerializerOptions options = EntitySerializerOptions.with().contextURL(contextURL).build(); - - SerializerResult result = odata.createSerializer(ODataFormat.fromContentType(responseFormat)) - .entity(serviceMetadata, type, entityResult.getEntity(), options); - - if (entityResult.isCreated()) { - response.setStatusCode(HttpStatusCode.CREATED.getStatusCode()); - } else { - response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - } - response.setContent(result.getContent()); + final ODataFormat format = ODataFormat.fromContentType(responseFormat); + response.setContent(serializeEntity(entityResult.getEntity(), edmEntitySet, type, format, null, null) + .getContent()); + response.setStatusCode((entityResult.isCreated() ? HttpStatusCode.CREATED : HttpStatusCode.OK).getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } } @@ -396,12 +394,6 @@ public class TechnicalEntityProcessor extends TechnicalProcessor response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } - private void setCount(final EntityCollection entitySet) { - if (entitySet.getCount() == null) { - entitySet.setCount(entitySet.getEntities().size()); - } - } - private void checkRequestFormat(final ContentType requestFormat) throws ODataApplicationException { if (requestFormat == null) { throw new ODataApplicationException("The content type has not been set in the request.", @@ -415,9 +407,23 @@ public class TechnicalEntityProcessor extends TechnicalProcessor builder = entitySet == null ? isSingleEntity ? builder.type(entityType) : builder.asCollection().type(entityType) : builder.entitySet(entitySet); - builder = builder.selectList(odata.createUriHelper() - .buildContextURLSelectList(entityType, expand, select)) - .suffix(isSingleEntity ? Suffix.ENTITY : null); + builder = builder + .selectList(odata.createUriHelper().buildContextURLSelectList(entityType, expand, select)) + .suffix(isSingleEntity && entitySet != null ? Suffix.ENTITY : null); return builder.build(); } + + private SerializerResult serializeEntity(final Entity entity, + final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType, final ODataFormat format, + final ExpandOption expand, final SelectOption select) throws SerializerException { + return odata.createSerializer(format).entity( + serviceMetadata, + edmEntityType, + entity, + EntitySerializerOptions.with() + .contextURL(format == ODataFormat.JSON_NO_METADATA ? null : + getContextUrl(edmEntitySet, edmEntityType, true, expand, select)) + .expand(expand).select(select) + .build()); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/04baf388/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java index ef0d7bc..e5991bd 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java @@ -81,6 +81,8 @@ public abstract class TechnicalProcessor implements Processor { entitySet = ((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet(); } else if (resourcePaths.get(0) instanceof UriResourceFunction) { entitySet = ((UriResourceFunction) resourcePaths.get(0)).getFunctionImport().getReturnedEntitySet(); + } else if (resourcePaths.get(0) instanceof UriResourceAction) { + entitySet = ((UriResourceAction) resourcePaths.get(0)).getActionImport().getReturnedEntitySet(); } else { throw new ODataApplicationException("Invalid resource type.", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); @@ -217,14 +219,11 @@ public abstract class TechnicalProcessor implements Processor { } protected EdmAction checkBoundAndExtractAction(final UriInfo uriInfo) throws ODataApplicationException { - final UriInfoResource resource = uriInfo.asUriInfoResource(); - List<UriResource> uriResourceParts = resource.getUriResourceParts(); + final List<UriResource> uriResourceParts = uriInfo.asUriInfoResource().getUriResourceParts(); if (uriResourceParts.size() > 1) { - throw new ODataApplicationException("Bound acctions not supported yet.", + throw new ODataApplicationException("Bound actions are not supported yet.", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } - UriResourceAction uriResourceAction = (UriResourceAction) uriResourceParts.get(0); - EdmAction action = uriResourceAction.getAction(); - return action; + return ((UriResourceAction) uriResourceParts.get(0)).getAction(); } }
