Repository: olingo-odata4 Updated Branches: refs/heads/master 39d965990 -> 1585f2da4
[OLINGO-175] open type tests for V4 Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/1585f2da Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/1585f2da Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/1585f2da Branch: refs/heads/master Commit: 1585f2da4fa129bb142331aea634308ffad74bcb Parents: 39d9659 Author: Francesco Chicchiriccò <[email protected]> Authored: Mon Apr 14 10:47:41 2014 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Mon Apr 14 10:47:41 2014 +0200 ---------------------------------------------------------------------- .../java/org/apache/olingo/fit/V4OpenType.java | 142 ++++++++++++++ fit/src/main/resources/V30/Row/feed.full.json | 85 --------- fit/src/main/resources/V30/Row/feed.xml | 191 ------------------- .../entity.full.json | 10 + .../entity.xml | 43 +++++ .../entity.full.json | 9 + .../entity.xml | 43 +++++ fit/src/main/resources/V40/openTypeMetadata.xml | 66 +++++++ .../main/webapp/WEB-INF/applicationContext.xml | 1 + .../client/core/it/v4/AbstractTestITCase.java | 27 +++ .../client/core/it/v4/OpenTypeTestITCase.java | 188 ++++++++++++++++++ .../edm/primitivetype/EdmDateTimeOffset.java | 15 +- 12 files changed, 540 insertions(+), 280 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java b/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java new file mode 100644 index 0000000..f7744f7 --- /dev/null +++ b/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.olingo.fit; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; +import org.apache.olingo.fit.metadata.Metadata; +import org.apache.olingo.fit.utils.Accept; +import org.apache.olingo.fit.utils.ConstantKey; +import org.apache.olingo.fit.utils.Constants; +import org.apache.olingo.fit.utils.FSManager; +import org.springframework.stereotype.Service; + +@Service +@Path("/V40/OpenType.svc") +public class V4OpenType { + + private final V4Services services; + + private final Metadata openMetadata; + + public V4OpenType() throws Exception { + this.openMetadata = new Metadata(FSManager.instance(ODataServiceVersion.V40). + readFile("openType" + StringUtils.capitalize(Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA)), + Accept.XML)); + this.services = new V4Services() { + + @Override + protected Metadata getMetadataObj() { + return openMetadata; + } + }; + } + + private Response replaceServiceName(final Response response) { + try { + final String content = IOUtils.toString((InputStream) response.getEntity(), "UTF-8"). + replaceAll("Static\\.svc", "OpenType.svc"); + + final Response.ResponseBuilder builder = Response.status(response.getStatus()); + for (String headerName : response.getHeaders().keySet()) { + for (Object headerValue : response.getHeaders().get(headerName)) { + builder.header(headerName, headerValue); + } + } + + final InputStream toBeStreamedBack = IOUtils.toInputStream(content, "UTF-8"); + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + IOUtils.copy(toBeStreamedBack, baos); + IOUtils.closeQuietly(toBeStreamedBack); + + builder.header("Content-Length", baos.size()); + builder.entity(new ByteArrayInputStream(baos.toByteArray())); + + return builder.build(); + } catch (Exception e) { + return response; + } + } + + /** + * Provide sample large metadata. + * + * @return metadata. + */ + @GET + @Path("/$metadata") + @Produces(MediaType.APPLICATION_XML) + public Response getMetadata() { + return services.getMetadata("openType" + StringUtils.capitalize( + Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA))); + } + + @GET + @Path("/{entitySetName}({entityId})") + public Response getEntity( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) String expand, + @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) String select) { + + return replaceServiceName( + services.getEntityInternal(accept, entitySetName, entityId, format, expand, select, false)); + } + + @POST + @Path("/{entitySetName}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON}) + @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM}) + public Response postNewEntity( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType, + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") final String entitySetName, + final String entity) { + + return replaceServiceName(services.postNewEntity(accept, contentType, prefer, entitySetName, entity)); + } + + @DELETE + @Path("/{entitySetName}({entityId})") + public Response removeEntity( + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId) { + + return replaceServiceName(services.removeEntity(entitySetName, entityId)); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V30/Row/feed.full.json ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V30/Row/feed.full.json b/fit/src/main/resources/V30/Row/feed.full.json deleted file mode 100644 index fc17314..0000000 --- a/fit/src/main/resources/V30/Row/feed.full.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/$metadata#Row", - "value": [{ - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'432f0da9-806e-4a2f-b708-dbd1c57a1c21')", - "odata.editLink": "Row(guid'432f0da9-806e-4a2f-b708-dbd1c57a1c21')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "[email protected]": "Edm.Guid", - "Id": "432f0da9-806e-4a2f-b708-dbd1c57a1c21", - "Name": "Chris" - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'02d5d465-edb3-4169-9176-89dd7c86535e')", - "odata.editLink": "Row(guid'02d5d465-edb3-4169-9176-89dd7c86535e')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "[email protected]": "Edm.Guid", - "Id": "02d5d465-edb3-4169-9176-89dd7c86535e", - "Description": "Excellent" - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'8f59bcb4-1bed-4b91-ab74-44628f57f160')", - "odata.editLink": "Row(guid'8f59bcb4-1bed-4b91-ab74-44628f57f160')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "[email protected]": "Edm.Guid", - "Id": "8f59bcb4-1bed-4b91-ab74-44628f57f160", - "Count": 1 - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'5dcbef86-a002-4121-8087-f6160fe9a1ed')", - "odata.editLink": "Row(guid'5dcbef86-a002-4121-8087-f6160fe9a1ed')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "[email protected]": "Edm.Guid", - "Id": "5dcbef86-a002-4121-8087-f6160fe9a1ed", - "[email protected]": "Edm.DateTimeOffset", - "Occurred": "2001-04-05T05:05:05.001+00:01" - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'71f7d0dc-ede4-45eb-b421-555a2aa1e58f')", - "odata.editLink": "Row(guid'71f7d0dc-ede4-45eb-b421-555a2aa1e58f')", - "[email protected]": "Edm.Guid", - "Id": "71f7d0dc-ede4-45eb-b421-555a2aa1e58f", - "Double": 1.2626 - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'672b8250-1e6e-4785-80cf-b94b572e42b3')", - "odata.editLink": "Row(guid'672b8250-1e6e-4785-80cf-b94b572e42b3')", - "[email protected]": "Edm.Guid", - "Id": "672b8250-1e6e-4785-80cf-b94b572e42b3", - "[email protected]": "Edm.Decimal", - "Decimal": "1.26" - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'814d505b-6b6a-45a0-9de0-153b16149d56')", - "odata.editLink": "Row(guid'814d505b-6b6a-45a0-9de0-153b16149d56')", - "[email protected]": "Edm.Guid", - "Id": "814d505b-6b6a-45a0-9de0-153b16149d56", - "[email protected]": "Edm.DateTime", - "Date": "1999-02-04T00:00:00" - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'2e4904b4-00b0-4e37-9f44-b99a6b208dba')", - "odata.editLink": "Row(guid'2e4904b4-00b0-4e37-9f44-b99a6b208dba')", - "[email protected]": "Edm.Guid", - "Id": "2e4904b4-00b0-4e37-9f44-b99a6b208dba", - "[email protected]": "Edm.GeometryPolygon", - "GeomPolygon": { - "type": "Polygon", - "coordinates": [], - "crs": { - "type": "name", - "properties": { - "name": "EPSG:0" - } - } - } - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'5a76c54e-4553-4bf6-8592-04cbcbfb1e65')", - "odata.editLink": "Row(guid'5a76c54e-4553-4bf6-8592-04cbcbfb1e65')", - "[email protected]": "Edm.Guid", - "Id": "5a76c54e-4553-4bf6-8592-04cbcbfb1e65" - }, { - "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'9f9c963b-5c2f-4e39-8bec-b45d19c5dc85')", - "odata.editLink": "Row(guid'9f9c963b-5c2f-4e39-8bec-b45d19c5dc85')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow", - "[email protected]": "Edm.Guid", - "Id": "9f9c963b-5c2f-4e39-8bec-b45d19c5dc85" - }] -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V30/Row/feed.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V30/Row/feed.xml b/fit/src/main/resources/V30/Row/feed.xml deleted file mode 100644 index 04d889d..0000000 --- a/fit/src/main/resources/V30/Row/feed.xml +++ /dev/null @@ -1,191 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - ---> -<feed xml:base="http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/" - xmlns="http://www.w3.org/2005/Atom" - xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" - xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" - xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row</id> - <title type="text">Row</title> - <updated>2014-04-11T13:23:54Z</updated> - <link rel="self" title="Row" href="Row"/> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'432f0da9-806e-4a2f-b708-dbd1c57a1c21')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.IndexedRow" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'432f0da9-806e-4a2f-b708-dbd1c57a1c21')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">432f0da9-806e-4a2f-b708-dbd1c57a1c21</d:Id> - <d:Name>Chris</d:Name> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'02d5d465-edb3-4169-9176-89dd7c86535e')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.IndexedRow" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'02d5d465-edb3-4169-9176-89dd7c86535e')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">02d5d465-edb3-4169-9176-89dd7c86535e</d:Id> - <d:Description>Excellent</d:Description> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'8f59bcb4-1bed-4b91-ab74-44628f57f160')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.IndexedRow" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'8f59bcb4-1bed-4b91-ab74-44628f57f160')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">8f59bcb4-1bed-4b91-ab74-44628f57f160</d:Id> - <d:Count m:type="Edm.Int32">1</d:Count> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'5dcbef86-a002-4121-8087-f6160fe9a1ed')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.IndexedRow" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'5dcbef86-a002-4121-8087-f6160fe9a1ed')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">5dcbef86-a002-4121-8087-f6160fe9a1ed</d:Id> - <d:Occurred m:type="Edm.DateTimeOffset">2001-04-05T05:05:05.001+00:01</d:Occurred> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'71f7d0dc-ede4-45eb-b421-555a2aa1e58f')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'71f7d0dc-ede4-45eb-b421-555a2aa1e58f')"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">71f7d0dc-ede4-45eb-b421-555a2aa1e58f</d:Id> - <d:Double m:type="Edm.Double">1.2626</d:Double> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'672b8250-1e6e-4785-80cf-b94b572e42b3')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'672b8250-1e6e-4785-80cf-b94b572e42b3')"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">672b8250-1e6e-4785-80cf-b94b572e42b3</d:Id> - <d:Decimal m:type="Edm.Decimal">1.26</d:Decimal> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'814d505b-6b6a-45a0-9de0-153b16149d56')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'814d505b-6b6a-45a0-9de0-153b16149d56')"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">814d505b-6b6a-45a0-9de0-153b16149d56</d:Id> - <d:Date m:type="Edm.DateTime">1999-02-04T00:00:00</d:Date> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'2e4904b4-00b0-4e37-9f44-b99a6b208dba')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'2e4904b4-00b0-4e37-9f44-b99a6b208dba')"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">2e4904b4-00b0-4e37-9f44-b99a6b208dba</d:Id> - <d:GeomPolygon m:type="Edm.GeometryPolygon"> - <gml:Polygon gml:srsName="http://www.opengis.net/def/crs/EPSG/0/0"/> - </d:GeomPolygon> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'5a76c54e-4553-4bf6-8592-04cbcbfb1e65')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'5a76c54e-4553-4bf6-8592-04cbcbfb1e65')"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">5a76c54e-4553-4bf6-8592-04cbcbfb1e65</d:Id> - </m:properties> - </content> - </entry> - <entry> - <id>http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'9f9c963b-5c2f-4e39-8bec-b45d19c5dc85')</id> - <category term="Microsoft.Test.OData.Services.OpenTypesService.IndexedRow" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> - <link rel="edit" title="Row" href="Row(guid'9f9c963b-5c2f-4e39-8bec-b45d19c5dc85')/Microsoft.Test.OData.Services.OpenTypesService.IndexedRow"/> - <title/> - <updated>2014-04-11T13:23:54Z</updated> - <author> - <name/> - </author> - <content type="application/xml"> - <m:properties> - <d:Id m:type="Edm.Guid">9f9c963b-5c2f-4e39-8bec-b45d19c5dc85</d:Id> - </m:properties> - </content> - </entry> -</feed> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.full.json ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.full.json b/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.full.json new file mode 100644 index 0000000..f86a9c4 --- /dev/null +++ b/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.full.json @@ -0,0 +1,10 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/$metadata#Row/@Element", + "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'672b8250-1e6e-4785-80cf-b94b572e42b3')", + "odata.editLink": "Row(guid'672b8250-1e6e-4785-80cf-b94b572e42b3')", + "[email protected]": "Edm.Guid", + "Id": "672b8250-1e6e-4785-80cf-b94b572e42b3", + "[email protected]": "Edm.Decimal", + "Decimal": "1.26" +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.xml b/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.xml new file mode 100644 index 0000000..349c937 --- /dev/null +++ b/fit/src/main/resources/V40/Row/672b8250-1e6e-4785-80cf-b94b572e42b3/entity.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/OpenType.svc/" + xmlns="http://www.w3.org/2005/Atom" + xmlns:d="http://docs.oasis-open.org/odata/ns/data" + xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" + xmlns:georss="http://www.georss.org/georss" + xmlns:gml="http://www.opengis.net/gml" + m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/OpenType.svc/$metadata#Row"> + <id>http://localhost:${cargo.servlet.port}/StaticService/V40/OpenType.svc/Row(672b8250-1e6e-4785-80cf-b94b572e42b3)</id> + <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://docs.oasis-open.org/odata/ns/scheme"/> + <link rel="edit" title="Row" href="Row(672b8250-1e6e-4785-80cf-b94b572e42b3)"/> + <title/> + <updated>2014-04-11T13:31:52Z</updated> + <author> + <name/> + </author> + <content type="application/xml"> + <m:properties> + <d:Id m:type="Guid">672b8250-1e6e-4785-80cf-b94b572e42b3</d:Id> + <d:Decimal m:type="Decimal">1.26</d:Decimal> + </m:properties> + </content> +</entry> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.full.json ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.full.json b/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.full.json new file mode 100644 index 0000000..e63b2fd --- /dev/null +++ b/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.full.json @@ -0,0 +1,9 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/$metadata#Row/@Element", + "odata.type": "Microsoft.Test.OData.Services.OpenTypesService.Row", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/OpenType.svc/Row(guid'71f7d0dc-ede4-45eb-b421-555a2aa1e58f')", + "odata.editLink": "Row(guid'71f7d0dc-ede4-45eb-b421-555a2aa1e58f')", + "[email protected]": "Edm.Guid", + "Id": "71f7d0dc-ede4-45eb-b421-555a2aa1e58f", + "Double": 1.2626 +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.xml b/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.xml new file mode 100644 index 0000000..a90bdb8 --- /dev/null +++ b/fit/src/main/resources/V40/Row/71f7d0dc-ede4-45eb-b421-555a2aa1e58f/entity.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/OpenType.svc/" + xmlns="http://www.w3.org/2005/Atom" + xmlns:d="http://docs.oasis-open.org/odata/ns/data" + xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" + xmlns:georss="http://www.georss.org/georss" + xmlns:gml="http://www.opengis.net/gml" + m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/OpenType.svc/$metadata#Row"> + <id>http://localhost:${cargo.servlet.port}/StaticService/V40/OpenType.svc/Row(71f7d0dc-ede4-45eb-b421-555a2aa1e58f)</id> + <category term="Microsoft.Test.OData.Services.OpenTypesService.Row" scheme="http://docs.oasis-open.org/odata/ns/scheme"/> + <link rel="edit" title="Row" href="Row(71f7d0dc-ede4-45eb-b421-555a2aa1e58f)"/> + <title/> + <updated>2014-04-11T13:30:28Z</updated> + <author> + <name/> + </author> + <content type="application/xml"> + <m:properties> + <d:Id m:type="Guid">71f7d0dc-ede4-45eb-b421-555a2aa1e58f</d:Id> + <d:Double m:type="Double">1.2626</d:Double> + </m:properties> + </content> +</entry> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/resources/V40/openTypeMetadata.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/V40/openTypeMetadata.xml b/fit/src/main/resources/V40/openTypeMetadata.xml new file mode 100644 index 0000000..8c148af --- /dev/null +++ b/fit/src/main/resources/V40/openTypeMetadata.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> + <edmx:DataServices> + <Schema Namespace="Microsoft.Test.OData.Services.ODataWCFService" xmlns="http://docs.oasis-open.org/odata/ns/edm"> + <EnumType Name="Color"> + <Member Name="Red" Value="1"/> + <Member Name="Green" Value="2"/> + <Member Name="Blue" Value="4"/> + </EnumType> + <ComplexType Name="ContactDetails"> + <Property Name="FirstContacted" Type="Edm.Binary"/> + <Property Name="LastContacted" Type="Edm.DateTimeOffset" Nullable="false"/> + <Property Name="Contacted" Type="Edm.DateTime" Nullable="false"/> + <Property Name="GUID" Type="Edm.Guid" Nullable="false"/> + <Property Name="PreferedContactTime" Type="Edm.Time" Nullable="false"/> + <Property Name="Byte" Type="Edm.Byte" Nullable="false"/> + <Property Name="SignedByte" Type="Edm.SByte" Nullable="false"/> + <Property Name="Double" Type="Edm.Double" Nullable="false"/> + <Property Name="Single" Type="Edm.Single" Nullable="false"/> + <Property Name="Short" Type="Edm.Int16" Nullable="false"/> + <Property Name="Int" Type="Edm.Int32" Nullable="false"/> + <Property Name="Long" Type="Edm.Int64" Nullable="false"/> + </ComplexType> + <EntityType Name="Row" OpenType="true"> + <Key> + <PropertyRef Name="Id"/> + </Key> + <Property Name="Id" Type="Edm.Guid" Nullable="false"/> + </EntityType> + <EntityType Name="IndexedRow" BaseType="Microsoft.Test.OData.Services.ODataWCFService.Row" OpenType="true"/> + <EntityType Name="RowIndex" OpenType="true"> + <Key> + <PropertyRef Name="Id"/> + </Key> + <Property Name="Id" Type="Edm.Int32" Nullable="false"/> + <NavigationProperty Name="Rows" Type="Microsoft.Test.OData.Services.ODataWCFService.Row" Nullable="false"/> + </EntityType> + <EntityContainer Name="DefaultContainer"> + <EntitySet Name="Row" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Row"> + <NavigationPropertyBinding Path="Rows" Target="Row"/> + </EntitySet> + <EntitySet Name="RowIndex" EntityType="Microsoft.Test.OData.Services.ODataWCFService.RowIndex"/> + </EntityContainer> + </Schema> + </edmx:DataServices> +</edmx:Edmx> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/fit/src/main/webapp/WEB-INF/applicationContext.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/webapp/WEB-INF/applicationContext.xml b/fit/src/main/webapp/WEB-INF/applicationContext.xml index 422807c..81cfd23 100644 --- a/fit/src/main/webapp/WEB-INF/applicationContext.xml +++ b/fit/src/main/webapp/WEB-INF/applicationContext.xml @@ -46,6 +46,7 @@ <bean class="org.apache.olingo.fit.V4Services"/> <bean class="org.apache.olingo.fit.V4NorthWind"/> <bean class="org.apache.olingo.fit.V4NorthWindExt"/> + <bean class="org.apache.olingo.fit.V4OpenType"/> </jaxrs:serviceBeans> <jaxrs:providers> <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java index edab2dd..8bdcdb9 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java @@ -18,9 +18,17 @@ */ package org.apache.olingo.client.core.it.v4; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import java.io.IOException; +import java.net.URI; +import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest; +import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse; import org.apache.olingo.client.api.v4.ODataClient; import org.apache.olingo.client.core.ODataClientFactory; +import org.apache.olingo.commons.api.domain.v4.ODataEntity; +import org.apache.olingo.commons.api.format.ODataPubFormat; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,6 +41,8 @@ public abstract class AbstractTestITCase { protected static String testStaticServiceRootURL; + protected static String testOpenTypeServiceRootURL; + protected static String testLargeModelServiceRootURL; protected static String testAuthServiceRootURL; @@ -40,6 +50,7 @@ public abstract class AbstractTestITCase { @BeforeClass public static void setUpODataServiceRoot() throws IOException { testStaticServiceRootURL = "http://localhost:9080/StaticService/V40/Static.svc"; + testOpenTypeServiceRootURL = "http://localhost:9080/StaticService/V40/OpenType.svc"; testLargeModelServiceRootURL = "http://localhost:9080/StaticService/V40/Static.svc/large"; testAuthServiceRootURL = "http://localhost:9080/DefaultService.svc"; } @@ -52,4 +63,20 @@ public abstract class AbstractTestITCase { protected ODataClient getClient() { return client; } + + protected ODataEntity read(final ODataPubFormat format, final URI editLink) { + final ODataEntityRequest<ODataEntity> req = getClient().getRetrieveRequestFactory().getEntityRequest(editLink); + req.setFormat(format); + + final ODataRetrieveResponse<ODataEntity> res = req.execute(); + final ODataEntity entity = res.getBody(); + + assertNotNull(entity); + + if (ODataPubFormat.JSON_FULL_METADATA == format || ODataPubFormat.ATOM == format) { + assertEquals(req.getURI(), entity.getEditLink()); + } + + return entity; + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OpenTypeTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OpenTypeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OpenTypeTestITCase.java new file mode 100644 index 0000000..475a0fb --- /dev/null +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OpenTypeTestITCase.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.olingo.client.core.it.v4; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.Calendar; +import java.util.UUID; +import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest; +import org.apache.olingo.client.api.communication.response.ODataDeleteResponse; +import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse; +import org.apache.olingo.client.api.uri.v4.URIBuilder; +import org.apache.olingo.commons.api.domain.ODataComplexValue; +import org.apache.olingo.commons.api.domain.v4.ODataProperty; +import org.apache.olingo.commons.api.domain.v4.ODataEntity; +import org.apache.olingo.commons.api.edm.Edm; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; +import org.apache.olingo.commons.api.edm.EdmSchema; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.format.ODataPubFormat; +import org.junit.Test; + +public class OpenTypeTestITCase extends AbstractTestITCase { + + @Test + public void checkOpenTypeEntityTypesExist() { + final Edm metadata = getClient().getRetrieveRequestFactory(). + getMetadataRequest(testOpenTypeServiceRootURL).execute().getBody(); + + final EdmSchema schema = metadata.getSchemas().get(0); + + assertTrue(metadata.getEntityType(new FullQualifiedName(schema.getNamespace(), "Row")).isOpenType()); + assertTrue(metadata.getEntityType(new FullQualifiedName(schema.getNamespace(), "IndexedRow")).isOpenType()); + assertTrue(metadata.getEntityType(new FullQualifiedName(schema.getNamespace(), "RowIndex")).isOpenType()); + } + + private ODataEntity readRow(final ODataPubFormat format, final String uuid) { + final URIBuilder builder = getClient().getURIBuilder(testOpenTypeServiceRootURL). + appendEntitySetSegment("Row").appendKeySegment(UUID.fromString(uuid)); + return read(format, builder.build()); + } + + private void read(final ODataPubFormat format) { + ODataEntity row = readRow(format, "71f7d0dc-ede4-45eb-b421-555a2aa1e58f"); + assertEquals(EdmPrimitiveTypeKind.Double, row.getProperty("Double").getPrimitiveValue().getTypeKind()); + assertEquals(EdmPrimitiveTypeKind.Guid, row.getProperty("Id").getPrimitiveValue().getTypeKind()); + + row = readRow(format, "672b8250-1e6e-4785-80cf-b94b572e42b3"); + assertEquals(EdmPrimitiveTypeKind.Decimal, row.getProperty("Decimal").getPrimitiveValue().getTypeKind()); + } + + @Test + public void readAsAtom() { + read(ODataPubFormat.ATOM); + } + + @Test + public void readAsJSON() { + read(ODataPubFormat.JSON_FULL_METADATA); + } + + private void cud(final ODataPubFormat format) { + final Integer id = 1426; + + ODataEntity rowIndex = getClient().getObjectFactory().newEntity( + new FullQualifiedName("Microsoft.Test.OData.Services.OpenTypesService.RowIndex")); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("Id", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(id))); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("aString", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("string"))); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("aBoolean", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildBoolean(true))); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("aDouble", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildDouble(1.5D))); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("aByte", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.SByte).setValue(Byte.MAX_VALUE). + build())); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("aDate", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.DateTimeOffset).setValue(Calendar.getInstance()). + build())); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newPrimitiveProperty("aDate", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.DateTimeOffset).setValue(Calendar.getInstance()). + build())); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newEnumProperty("aColor", getClient().getObjectFactory(). + newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Blue"))); + + final ODataComplexValue<ODataProperty> contactDetails = getClient().getObjectFactory().newComplexValue( + "Microsoft.Test.OData.Services.OpenTypesService.ContactDetails"); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("FirstContacted", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildBinary("text".getBytes()))); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("LastContacted", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.DateTimeOffset).setText("2001-04-05T05:05:05.001+00:01").build())); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("Contacted", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Date).setText("2001-04-05").build())); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("GUID", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildGuid(UUID.randomUUID()))); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("PreferedContactTime", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Duration).setText("-P9DT51M10.5063807S").build())); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("Byte", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Byte).setValue(24).build())); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("SignedByte", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.SByte).setValue(Byte.MAX_VALUE).build())); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("Double", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildDouble(Double.MAX_VALUE))); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("Single", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildSingle(Float.MAX_VALUE))); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("Short", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Int16).setValue(Short.MAX_VALUE).build())); + contactDetails.add(getClient().getObjectFactory().newPrimitiveProperty("Int", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(Integer.MAX_VALUE))); + getClient().getBinder().add(rowIndex, + getClient().getObjectFactory().newComplexProperty("aContact", contactDetails)); + + final ODataEntityCreateRequest<ODataEntity> createReq = getClient().getCUDRequestFactory(). + getEntityCreateRequest(getClient().getURIBuilder(testOpenTypeServiceRootURL). + appendEntitySetSegment("RowIndex").build(), rowIndex); + createReq.setFormat(format); + final ODataEntityCreateResponse<ODataEntity> createRes = createReq.execute(); + assertEquals(201, createRes.getStatusCode()); + + final URIBuilder builder = getClient().getURIBuilder(testOpenTypeServiceRootURL). + appendEntitySetSegment("RowIndex").appendKeySegment(id); + rowIndex = read(format, builder.build()); + assertNotNull(rowIndex); + assertEquals(EdmPrimitiveTypeKind.Int32, + rowIndex.getProperty("Id").getPrimitiveValue().getTypeKind()); + assertEquals(EdmPrimitiveTypeKind.String, + rowIndex.getProperty("aString").getPrimitiveValue().getTypeKind()); + assertEquals(EdmPrimitiveTypeKind.Boolean, + rowIndex.getProperty("aBoolean").getPrimitiveValue().getTypeKind()); + assertTrue(rowIndex.getProperty("aDouble").hasPrimitiveValue()); + assertTrue(rowIndex.getProperty("aByte").hasPrimitiveValue()); + assertTrue(rowIndex.getProperty("aDate").hasPrimitiveValue()); + assertNotNull(rowIndex.getProperty("aColor")); + assertTrue(rowIndex.getProperty("aContact").hasComplexValue()); + assertTrue(rowIndex.getProperty("aContact").getComplexValue().get("SignedByte").hasPrimitiveValue()); + + final ODataDeleteResponse deleteRes = getClient().getCUDRequestFactory(). + getDeleteRequest(rowIndex.getEditLink()).execute(); + assertEquals(204, deleteRes.getStatusCode()); + } + + @Test + public void cudAsAtom() { + cud(ODataPubFormat.ATOM); + } + + @Test + public void cudAsJSON() { + cud(ODataPubFormat.JSON_FULL_METADATA); + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1585f2da/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java index f1b707f..36a1ff5 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java @@ -59,7 +59,7 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { } final String timeZoneOffset = matcher.group(9) != null && matcher.group(10) != null - && !matcher.group(10).matches("[-+]0+:0+") ? matcher.group(10) : null; + && !matcher.group(10).matches("[-+]0+:0+") ? matcher.group(10) : null; final Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT" + timeZoneOffset)); if (dateTimeValue.get(Calendar.ZONE_OFFSET) == 0 && timeZoneOffset != null) { throw new EdmPrimitiveTypeException( @@ -90,8 +90,8 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { "EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)"); } final String milliSeconds = decimals.length() > 3 - ? decimals.substring(0, 3) - : decimals + "000".substring(decimals.length()); + ? decimals.substring(0, 3) + : decimals + "000".substring(decimals.length()); dateTimeValue.set(Calendar.MILLISECOND, Short.parseShort(milliSeconds)); if (!decimals.isEmpty()) { @@ -143,6 +143,13 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { return returnType.cast(dateTimeValue.getTimeInMillis()); // may throw IllegalArgumentException } else if (returnType.isAssignableFrom(Date.class)) { return returnType.cast(dateTimeValue.getTime()); // may throw IllegalArgumentException + } else if (returnType.isAssignableFrom(Timestamp.class)) { + final Timestamp timestamp = new Timestamp(dateTimeValue.getTimeInMillis()); // may throw IllegalArgumentException + if (dateTimeValue.get(Calendar.MILLISECOND) > 0) { + timestamp.setNanos(dateTimeValue.get(Calendar.MILLISECOND)); // may throw IllegalArgumentException + } + + return returnType.cast(timestamp); } else { throw new ClassCastException("unsupported return type " + returnType.getSimpleName()); } @@ -192,7 +199,7 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { } final int offsetInMinutes = (dateTimeValue.get(Calendar.ZONE_OFFSET) - + dateTimeValue.get(Calendar.DST_OFFSET)) / 60 / 1000; + + dateTimeValue.get(Calendar.DST_OFFSET)) / 60 / 1000; final int offsetHours = offsetInMinutes / 60; final int offsetMinutes = Math.abs(offsetInMinutes % 60); final String offsetString = offsetInMinutes == 0 ? "Z" : String.format("%+03d:%02d", offsetHours, offsetMinutes);
