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());
     }

Reply via email to