Repository: olingo-odata4 Updated Branches: refs/heads/master 1585f2da4 -> d5e29b020
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/v4/CUDRequestFactoryImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/v4/CUDRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/v4/CUDRequestFactoryImpl.java index 426d903..c0f6b40 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/v4/CUDRequestFactoryImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/v4/CUDRequestFactoryImpl.java @@ -18,11 +18,15 @@ */ package org.apache.olingo.client.core.communication.request.cud.v4; +import java.net.URI; +import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest; import org.apache.olingo.client.api.v4.ODataClient; import org.apache.olingo.client.api.communication.request.cud.v4.CUDRequestFactory; +import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType; import org.apache.olingo.client.core.communication.request.cud.AbstractCUDRequestFactory; +import org.apache.olingo.commons.api.domain.v4.ODataEntity; -public class CUDRequestFactoryImpl extends AbstractCUDRequestFactory +public class CUDRequestFactoryImpl extends AbstractCUDRequestFactory<UpdateType> implements CUDRequestFactory { private static final long serialVersionUID = 3080623853913380425L; @@ -30,4 +34,13 @@ public class CUDRequestFactoryImpl extends AbstractCUDRequestFactory public CUDRequestFactoryImpl(final ODataClient client) { super(client); } + + @Override + public ODataEntityUpdateRequest getEntityUpsertRequest( + final UpdateType type, final URI uri, final ODataEntity entity) { + + entity.setEditLink(uri); + return super.getEntityUpdateRequest(type, entity); + } + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java index f1b5d23..455ffb8 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java @@ -24,6 +24,7 @@ import org.apache.olingo.client.api.communication.header.HeaderName; import org.apache.olingo.client.api.communication.header.ODataHeaders; import org.apache.olingo.client.api.communication.request.batch.v3.BatchRequestFactory; import org.apache.olingo.client.api.communication.request.cud.v3.CUDRequestFactory; +import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType; import org.apache.olingo.client.api.communication.request.invoke.v3.InvokeRequestFactory; import org.apache.olingo.client.api.communication.request.retrieve.v3.RetrieveRequestFactory; import org.apache.olingo.client.api.communication.request.streamed.v3.StreamedRequestFactory; @@ -50,7 +51,7 @@ import org.apache.olingo.commons.api.domain.v3.ODataObjectFactory; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.core.domain.v3.ODataObjectFactoryImpl; -public class ODataClientImpl extends AbstractODataClient implements ODataClient { +public class ODataClientImpl extends AbstractODataClient<UpdateType> implements ODataClient { private static final long serialVersionUID = -1655712193243609209L; @@ -137,6 +138,7 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient return retrieveReqFact; } + @SuppressWarnings("unchecked") @Override public CUDRequestFactory getCUDRequestFactory() { return cudReqFact; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java index d379bcf..f6b9723 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java @@ -24,6 +24,7 @@ import org.apache.olingo.client.api.communication.header.HeaderName; import org.apache.olingo.client.api.communication.header.ODataHeaders; import org.apache.olingo.client.api.communication.request.batch.v4.BatchRequestFactory; import org.apache.olingo.client.api.communication.request.cud.v4.CUDRequestFactory; +import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType; import org.apache.olingo.client.api.communication.request.invoke.v4.InvokeRequestFactory; import org.apache.olingo.client.api.communication.request.retrieve.v4.RetrieveRequestFactory; import org.apache.olingo.client.api.communication.request.streamed.v4.StreamedRequestFactory; @@ -50,7 +51,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.core.domain.v4.ODataObjectFactoryImpl; -public class ODataClientImpl extends AbstractODataClient implements ODataClient { +public class ODataClientImpl extends AbstractODataClient<UpdateType> implements ODataClient { private static final long serialVersionUID = -6653176125573631964L; @@ -136,6 +137,7 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient return retrieveReqFact; } + @SuppressWarnings("unchecked") @Override public CUDRequestFactory getCUDRequestFactory() { return cudReqFact; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java index 7c6372c..36a2264 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java @@ -42,7 +42,7 @@ import org.apache.olingo.client.api.communication.ODataClientErrorException; import org.apache.olingo.client.api.communication.request.cud.ODataDeleteRequest; import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest; import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest; -import org.apache.olingo.client.api.communication.request.cud.UpdateType; +import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType; import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest; import org.apache.olingo.client.api.communication.response.ODataDeleteResponse; import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java index dbd964f..17e66a2 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java @@ -22,12 +22,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; + import java.io.IOException; import java.net.URI; import java.util.Collections; import java.util.List; -import org.apache.olingo.client.api.communication.request.cud.ODataLinkCreateRequest; -import org.apache.olingo.client.api.communication.request.cud.ODataLinkUpdateRequest; +import org.apache.olingo.client.api.communication.request.cud.v3.ODataLinkCreateRequest; +import org.apache.olingo.client.api.communication.request.cud.v3.ODataLinkUpdateRequest; import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType; import org.apache.olingo.client.api.communication.request.retrieve.v3.ODataLinkCollectionRequest; import org.apache.olingo.client.api.communication.response.ODataLinkOperationResponse; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java new file mode 100644 index 0000000..ca8ed99 --- /dev/null +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java @@ -0,0 +1,82 @@ +/* + * 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 java.net.URI; +import java.util.Calendar; +import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest; +import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType; +import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse; +import org.apache.olingo.commons.api.domain.v4.ODataEntity; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.format.ODataPubFormat; +import org.junit.Test; + +public class EntityUpdateTestITCase extends AbstractTestITCase { + + private void upsert(final UpdateType updateType, final ODataPubFormat format) { + final ODataEntity order = getClient().getObjectFactory(). + newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Order")); + + order.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("OrderID", + getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(9))); + order.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("OrderDate", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.DateTimeOffset).setValue(Calendar.getInstance()).build())); + order.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ShelfLife", + getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Duration).setText("PT0.0000002S").build())); + + final URI upsertURI = getClient().getURIBuilder(testStaticServiceRootURL). + appendEntitySetSegment("Orders").appendKeySegment(9).build(); + final ODataEntityUpdateRequest req = getClient().getCUDRequestFactory(). + getEntityUpsertRequest(updateType, upsertURI, order); + req.setFormat(format); + + final ODataEntityUpdateResponse res = req.execute(); + try { + final ODataEntity read = read(format, upsertURI); + assertNotNull(read); + assertEquals(order.getProperty("OrderID"), read.getProperty("OrderID")); + assertEquals(order.getProperty("OrderDate").getPrimitiveValue().toString(), + read.getProperty("OrderDate").getPrimitiveValue().toString()); + assertEquals(order.getProperty("ShelfLife").getPrimitiveValue().toString(), + read.getProperty("ShelfLife").getPrimitiveValue().toString()); + } finally { + getClient().getCUDRequestFactory().getDeleteRequest(upsertURI).execute(); + } + } + + @Test + public void atomUpsert() { + upsert(UpdateType.PATCH, ODataPubFormat.ATOM); + upsert(UpdateType.REPLACE, ODataPubFormat.ATOM); + } + + @Test + public void jsonUpsert() { + upsert(UpdateType.PATCH, ODataPubFormat.JSON); + upsert(UpdateType.REPLACE, ODataPubFormat.JSON); + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d5e29b02/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 36a1ff5..c2b88c0 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 @@ -144,12 +144,7 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { } 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); + return returnType.cast(new Timestamp(dateTimeValue.getTimeInMillis())); } else { throw new ClassCastException("unsupported return type " + returnType.getSimpleName()); }
