Repository: olingo-odata2
Updated Branches:
  refs/heads/OLINGO-822_WritePropertiesForExpandContext [created] bdaec2fa9


[OLINGO-822] Support skip facets in expand for XML producer


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/bdaec2fa
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/bdaec2fa
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/bdaec2fa

Branch: refs/heads/OLINGO-822_WritePropertiesForExpandContext
Commit: bdaec2fa9b8fb59c5b98fb8c2b099e9f0ef91e0a
Parents: f8bbd74
Author: mibo <[email protected]>
Authored: Sun Nov 15 20:49:53 2015 +0100
Committer: mibo <[email protected]>
Committed: Sun Nov 15 20:49:53 2015 +0100

----------------------------------------------------------------------
 .../api/ep/callback/WriteCallbackContext.java   | 21 +++++++
 .../ep/producer/AtomEntryEntityProducer.java    | 12 ++--
 .../odata2/core/ep/producer/MyCallback.java     | 13 +++--
 .../core/ep/producer/XmlExpandProducerTest.java | 59 +++++++++++++++++++-
 4 files changed, 92 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/bdaec2fa/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/callback/WriteCallbackContext.java
----------------------------------------------------------------------
diff --git 
a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/callback/WriteCallbackContext.java
 
b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/callback/WriteCallbackContext.java
index 7659765..f4143bb 100644
--- 
a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/callback/WriteCallbackContext.java
+++ 
b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/callback/WriteCallbackContext.java
@@ -25,6 +25,7 @@ import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
 import org.apache.olingo.odata2.api.ep.EntityProviderException;
+import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
 import org.apache.olingo.odata2.api.uri.ExpandSelectTreeNode;
 
 /**
@@ -37,6 +38,7 @@ public abstract class WriteCallbackContext {
   private EdmNavigationProperty navigationProperty;
   private Map<String, Object> entryData;
   private ExpandSelectTreeNode currentNode;
+  private EntityProviderWriteProperties currentWriteProperties;
 
   /**
    * Current means the node pointing to the target entity set
@@ -118,4 +120,23 @@ public abstract class WriteCallbackContext {
     }
     return key;
   }
+
+  /**
+   * EntityProviderWriteProperties of outer producer.
+   *
+   * @param currentWriteProperties of outer producer.
+   */
+  public void setCurrentWriteProperties(EntityProviderWriteProperties 
currentWriteProperties) {
+    this.currentWriteProperties = currentWriteProperties;
+  }
+
+  /**
+   * EntityProviderWriteProperties which were set by outer producer or 
<code>null</code>
+   * if not supported.
+   *
+   * @return set by outer producer or <code>null</code> if not supported.
+   */
+  public EntityProviderWriteProperties getCurrentWriteProperties() {
+    return currentWriteProperties;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/bdaec2fa/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
----------------------------------------------------------------------
diff --git 
a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
 
b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
index c8da1d8..5e92500 100644
--- 
a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
+++ 
b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
@@ -262,6 +262,7 @@ public class AtomEntryEntityProducer {
         context.setSourceEntitySet(eia.getEntitySet());
         context.setNavigationProperty(navProp);
         context.setEntryData(data);
+        context.setCurrentWriteProperties(properties);
         ExpandSelectTreeNode subNode = 
properties.getExpandSelectTree().getLinks().get(navigationPropertyName);
         context.setCurrentExpandSelectTreeNode(subNode);
         context.setSelfLink(new URI(self));
@@ -270,7 +271,7 @@ public class AtomEntryEntityProducer {
         if (callback == null) {
           throw new 
EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
         }
-        WriteFeedCallbackResult result = null;
+        WriteFeedCallbackResult result;
         try {
           result = ((OnWriteFeedContent) callback).retrieveFeedResult(context);
         } catch (ODataApplicationException e) {
@@ -304,6 +305,7 @@ public class AtomEntryEntityProducer {
         EdmNavigationProperty navProp = (EdmNavigationProperty) 
eia.getEntityType().getProperty(navigationPropertyName);
         WriteEntryCallbackContext context = new WriteEntryCallbackContext();
         context.setSourceEntitySet(eia.getEntitySet());
+        context.setCurrentWriteProperties(properties);
         context.setNavigationProperty(navProp);
         context.setEntryData(data);
         ExpandSelectTreeNode subNode = 
properties.getExpandSelectTree().getLinks().get(navigationPropertyName);
@@ -313,7 +315,7 @@ public class AtomEntryEntityProducer {
         if (callback == null) {
           throw new 
EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
         }
-        WriteEntryCallbackResult result = null;
+        WriteEntryCallbackResult result;
         try {
           result = ((OnWriteEntryContent) 
callback).retrieveEntryResult(context);
         } catch (ODataApplicationException e) {
@@ -461,9 +463,7 @@ public class AtomEntryEntityProducer {
     if (updateDate == null) {
       updateDate = new Date();
     }
-    String valueToString =
-        EdmDateTimeOffset.getInstance().valueToString(updateDate, 
EdmLiteralKind.DEFAULT, updateFacets);
-    return valueToString;
+    return EdmDateTimeOffset.getInstance().valueToString(updateDate, 
EdmLiteralKind.DEFAULT, updateFacets);
   }
 
   private String getTargetPathValue(final EntityInfoAggregator eia, final 
String targetPath,
@@ -608,7 +608,7 @@ public class AtomEntryEntityProducer {
   private boolean isNotMappedViaCustomMapping(final EntityPropertyInfo 
propertyInfo) {
     EdmCustomizableFeedMappings customMapping = 
propertyInfo.getCustomMapping();
     if (customMapping != null && customMapping.isFcKeepInContent() != null) {
-      return customMapping.isFcKeepInContent().booleanValue();
+      return customMapping.isFcKeepInContent();
     }
     return true;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/bdaec2fa/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/MyCallback.java
----------------------------------------------------------------------
diff --git 
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/MyCallback.java
 
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/MyCallback.java
index bdea75a..25770bf 100644
--- 
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/MyCallback.java
+++ 
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/MyCallback.java
@@ -61,16 +61,21 @@ public class MyCallback implements OnWriteEntryContent, 
OnWriteFeedContent {
             callbacks.put(navPropName, this);
           }
           EntityProviderWriteProperties inlineProperties =
-              
EntityProviderWriteProperties.serviceRoot(baseUri).callbacks(callbacks).expandSelectTree(
-                  
context.getCurrentExpandSelectTreeNode()).selfLink(context.getSelfLink()).build();
+              
EntityProviderWriteProperties.serviceRoot(baseUri).callbacks(callbacks)
+                  .expandSelectTree(context.getCurrentExpandSelectTreeNode())
+                  .selfLink(context.getSelfLink())
+                  
.validatingFacets(context.getCurrentWriteProperties().isValidatingFacets())
+                  .build();
 
           result.setFeedData(dataProvider.getEmployeesData());
           result.setInlineProperties(inlineProperties);
         }
       } else if ("Buildings".equals(context.getSourceEntitySet().getName())) {
         EntityProviderWriteProperties inlineProperties =
-            
EntityProviderWriteProperties.serviceRoot(baseUri).expandSelectTree(
-                
context.getCurrentExpandSelectTreeNode()).selfLink(context.getSelfLink()).build();
+            EntityProviderWriteProperties.serviceRoot(baseUri)
+                .expandSelectTree(context.getCurrentExpandSelectTreeNode())
+                
.validatingFacets(context.getCurrentWriteProperties().isValidatingFacets())
+                .selfLink(context.getSelfLink()).build();
         List<Map<String, Object>> emptyData = new ArrayList<Map<String, 
Object>>();
         result.setFeedData(emptyData);
         result.setInlineProperties(inlineProperties);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/bdaec2fa/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlExpandProducerTest.java
----------------------------------------------------------------------
diff --git 
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlExpandProducerTest.java
 
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlExpandProducerTest.java
index c4ba63c..faab701 100644
--- 
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlExpandProducerTest.java
+++ 
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlExpandProducerTest.java
@@ -22,6 +22,8 @@ import static 
org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
 import static org.custommonkey.xmlunit.XMLAssert.assertXpathNotExists;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -33,9 +35,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.olingo.odata2.api.ODataCallback;
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmEntitySet;
-import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.*;
 import org.apache.olingo.odata2.api.ep.EntityProviderException;
 import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
 import org.apache.olingo.odata2.api.ep.callback.OnWriteEntryContent;
@@ -104,6 +104,59 @@ public class XmlExpandProducerTest extends 
AbstractProviderTest {
     verifyEmployees(employeeXPathString, xmlString);
   }
 
+  @Test(expected = EntityProviderException.class)
+  public void expandSelectedEmployeesWithFacets() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped imageUrlProperty = edm.getEntityType("RefScenario", 
"Employee").getProperty("ImageUrl");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(1);
+    when(((EdmProperty) imageUrlProperty).getFacets()).thenReturn(facets);
+
+    ExpandSelectTreeNode selectTree = getSelectExpandTree("Rooms('1')", 
"nr_Employees", "nr_Employees");
+
+    HashMap<String, ODataCallback> callbacksRoom = createCallbacks("Rooms");
+    EntityProviderWriteProperties properties =
+        
EntityProviderWriteProperties.serviceRoot(BASE_URI).expandSelectTree(selectTree)
+            .callbacks(callbacksRoom)
+            .build();
+    AtomEntityProvider provider = createAtomEntityProvider();
+    ODataResponse response =
+        
provider.writeEntry(edm.getDefaultEntityContainer().getEntitySet("Rooms"), 
roomData,
+            properties);
+
+    String xmlString = verifyResponse(response);
+    assertXpathNotExists("/a:entry/m:properties", xmlString);
+    assertXpathExists("/a:entry/a:link", xmlString);
+    verifyEmployees(employeeXPathString, xmlString);
+  }
+
+  @Test
+  public void expandSelectedEmployeesIgnoreFacets() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped imageUrlProperty = edm.getEntityType("RefScenario", 
"Employee").getProperty("ImageUrl");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(1);
+    when(((EdmProperty) imageUrlProperty).getFacets()).thenReturn(facets);
+
+    ExpandSelectTreeNode selectTree = getSelectExpandTree("Rooms('1')", 
"nr_Employees", "nr_Employees");
+
+    HashMap<String, ODataCallback> callbacksRoom = createCallbacks("Rooms");
+    EntityProviderWriteProperties properties =
+        
EntityProviderWriteProperties.serviceRoot(BASE_URI).expandSelectTree(selectTree).callbacks(callbacksRoom)
+            .callbacks(callbacksRoom).validatingFacets(false)
+            .build();
+    AtomEntityProvider provider = createAtomEntityProvider();
+    ODataResponse response =
+        
provider.writeEntry(edm.getDefaultEntityContainer().getEntitySet("Rooms"), 
roomData,
+            properties);
+
+    String xmlString = verifyResponse(response);
+    assertXpathNotExists("/a:entry/m:properties", xmlString);
+    assertXpathExists("/a:entry/a:link", xmlString);
+    verifyEmployees(employeeXPathString, xmlString);
+  }
+
+
   @Test
   public void expandSelectedEmployeesWithBuilder() throws Exception {
     EdmEntitySet entitySet = 
MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");

Reply via email to