You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2016/12/01 13:05:08 UTC
olingo-odata2 git commit: [OLINGO-1055] ODatav2: Omit empty inline
tags for null data
Repository: olingo-odata2
Updated Branches:
refs/heads/master de4aec1bd -> 4e1667fcc
[OLINGO-1055] ODatav2: Omit empty inline tags for null data
Signed-off-by: Christian Amend <ch...@sap.com>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/4e1667fc
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/4e1667fc
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/4e1667fc
Branch: refs/heads/master
Commit: 4e1667fcc4ac320aed19e3b0360af4c7fec651f0
Parents: de4aec1
Author: Archana Rai <ar...@sap.com>
Authored: Thu Dec 1 16:21:18 2016 +0530
Committer: Christian Amend <ch...@sap.com>
Committed: Thu Dec 1 12:54:54 2016 +0100
----------------------------------------------------------------------
.../api/ep/EntityProviderWriteProperties.java | 10 +
.../ep/producer/AtomEntryEntityProducer.java | 15 +-
.../ep/producer/JsonEntryEntityProducer.java | 14 +
.../ep/ODataEntityProviderPropertiesTest.java | 9 +-
.../producer/JsonEntryEntityProducerTest.java | 487 +++++++++++--------
.../core/ep/producer/XmlExpandProducerTest.java | 48 ++
.../fit/ref/InvalidDataInScenarioTest.java | 2 +-
7 files changed, 375 insertions(+), 210 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
index 354d0f5..ce448e0 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
@@ -50,8 +50,13 @@ public class EntityProviderWriteProperties {
private boolean isResponsePayload = true;
private boolean includeMetadataInContentOnly = false;
private boolean isDataBasedPropertySerialization = false;
+ private boolean omitInlineForNullData = false;
private EntityProviderWriteProperties() {}
+
+ public final boolean isOmitInlineForNullData() {
+ return omitInlineForNullData;
+ }
/**
* Returns true if the payload has dynamic properties i.e. every entry has different property list
@@ -163,6 +168,10 @@ public class EntityProviderWriteProperties {
public static class ODataEntityProviderPropertiesBuilder {
private final EntityProviderWriteProperties properties = new EntityProviderWriteProperties();
+ public final ODataEntityProviderPropertiesBuilder omitInlineForNullData(boolean omitInlineForNullData) {
+ properties.omitInlineForNullData = omitInlineForNullData;
+ return this;
+ }
/**
* @param setting if payload has dynamic property
*/
@@ -312,6 +321,7 @@ public class EntityProviderWriteProperties {
this.properties.isResponsePayload = properties.isResponsePayload;
this.properties.includeMetadataInContentOnly = properties.includeMetadataInContentOnly;
this.properties.isDataBasedPropertySerialization = properties.isDataBasedPropertySerialization;
+ this.properties.omitInlineForNullData = properties.omitInlineForNullData;
return this;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/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 ea00c6f..9c20bff 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
@@ -256,7 +256,6 @@ public class AtomEntryEntityProducer {
if (eia.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
- writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
EdmNavigationProperty navProp = (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
WriteFeedCallbackContext context = new WriteFeedCallbackContext();
@@ -282,6 +281,12 @@ public class AtomEntryEntityProducer {
if (inlineData == null) {
inlineData = new ArrayList<Map<String, Object>>();
}
+
+ // This statement is used for the client use case. Flag should never be set on server side
+ if (properties.isOmitInlineForNullData() && inlineData.isEmpty()) {
+ return;
+ }
+ writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navProp);
@@ -301,7 +306,6 @@ public class AtomEntryEntityProducer {
if (eia.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
- writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
EdmNavigationProperty navProp = (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
WriteEntryCallbackContext context = new WriteEntryCallbackContext();
@@ -323,6 +327,13 @@ public class AtomEntryEntityProducer {
throw new EntityProviderProducerException(EntityProviderException.COMMON, e);
}
Map<String, Object> inlineData = result.getEntryData();
+
+ // This statement is used for the client use case. Flag should never be set on server side
+ if (properties.isOmitInlineForNullData() && (inlineData == null || inlineData.isEmpty())) {
+ return;
+ }
+
+ writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
if (inlineData != null && !inlineData.isEmpty()) {
EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navProp);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
index ce9a5bb..887d4b9 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
@@ -157,6 +157,13 @@ public class JsonEntryEntityProducer {
if (inlineData == null) {
inlineData = new ArrayList<Map<String, Object>>();
}
+
+ //This statement is used for the client use case. Flag should never be set on server side
+ if(properties.isOmitInlineForNullData() && inlineData.isEmpty()){
+ writeDeferredUri(entityInfo, navigationPropertyName);
+ return;
+ }
+
final EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
final EntityInfoAggregator inlineEntityInfo =
EntityInfoAggregator.create(inlineEntitySet, inlineProperties.getExpandSelectTree());
@@ -172,6 +179,13 @@ public class JsonEntryEntityProducer {
final WriteEntryCallbackResult result =
((OnWriteEntryContent) callback).retrieveEntryResult((WriteEntryCallbackContext) context);
Map<String, Object> inlineData = result.getEntryData();
+
+ //This statement is used for the client use case. Flag should never be set on server side
+ if(properties.isOmitInlineForNullData() && (inlineData == null || inlineData.isEmpty())){
+ writeDeferredUri(entityInfo, navigationPropertyName);
+ return;
+ }
+
if (inlineData != null && !inlineData.isEmpty()) {
final EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
final EntityInfoAggregator inlineEntityInfo =
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
index 241828c..192a67d 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
@@ -78,6 +78,7 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
assertFalse(properties.isIncludeMetadataInContentOnly());
assertTrue(properties.isResponsePayload());
assertFalse(properties.isDataBasedPropertySerialization());
+ assertFalse(properties.isOmitInlineForNullData());
}
@Test
@@ -104,6 +105,7 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
.includeMetadataInContentOnly(true)
.responsePayload(true)
.isDataBasedPropertySerialization(true)
+ .omitInlineForNullData(true)
.build();
assertEquals("Wrong amount of callbacks.", 1, properties.getCallbacks().size());
@@ -122,7 +124,8 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
assertTrue("includeMetadataInContentOnly should be set", properties.isIncludeMetadataInContentOnly());
assertTrue("responsePayload flag should be set", properties.isResponsePayload());
- assertTrue(properties.isDataBasedPropertySerialization());
+ assertTrue("isDataBasedPropertySerialization should be set", properties.isDataBasedPropertySerialization());
+ assertTrue("omitInlineForNullData should be set", properties.isOmitInlineForNullData());
}
@Test
@@ -148,6 +151,8 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
.omitETag(true)
.includeMetadataInContentOnly(true)
.responsePayload(true)
+ .isDataBasedPropertySerialization(true)
+ .omitInlineForNullData(true)
.build();
//
@@ -170,5 +175,7 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
assertTrue("OmitETag should be set", fromProperties.isOmitETag());
assertTrue("includeMetadataInContentOnly should be set", fromProperties.isIncludeMetadataInContentOnly());
assertTrue("responsePayload flag should be set", fromProperties.isResponsePayload());
+ assertTrue("isDataBasedPropertySerialization should be set", properties.isDataBasedPropertySerialization());
+ assertTrue("omitInlineForNullData should be set", properties.isOmitInlineForNullData());
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
index 11c52c2..2673758 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
@@ -531,52 +531,77 @@ public class JsonEntryEntityProducerTest extends BaseTest {
json);
}
- @SuppressWarnings("unchecked")
@Test
public void entryWithExpandedEntryButNullData() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
Map<String, Object> roomData = new HashMap<String, Object>();
roomData.put("Id", "1");
roomData.put("Version", 1);
+ ExpandSelectTreeNode node1 = createRoomNode();
+
+ Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+ callbacks.put("nr_Building", new NullEntryCallback());
+
+ final ODataResponse response =
+ new JsonEntityProvider().writeEntry(entitySet, roomData,
+ EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+ .callbacks(callbacks).build());
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+ Map<String, Object> roomEntry = checkRoom(response);
+ assertTrue(roomEntry.containsKey("nr_Building"));
+ assertNull(roomEntry.get("nr_Building"));
+ }
+
+ class NullEntryCallback implements OnWriteEntryContent {
+ @Override
+ public WriteEntryCallbackResult retrieveEntryResult(final WriteEntryCallbackContext context)
+ throws ODataApplicationException {
+ WriteEntryCallbackResult result = new WriteEntryCallbackResult();
+ result.setEntryData(null);
+ result.setInlineProperties(DEFAULT_PROPERTIES);
+ return result;
+ }
+ }
+
+ private ExpandSelectTreeNode createRoomNode() {
ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
links.put("nr_Building", node2);
ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
Mockito.when(node1.getLinks()).thenReturn(links);
+ return node1;
+ }
- class EntryCallback implements OnWriteEntryContent {
- @Override
- public WriteEntryCallbackResult retrieveEntryResult(final WriteEntryCallbackContext context)
- throws ODataApplicationException {
- WriteEntryCallbackResult result = new WriteEntryCallbackResult();
- result.setEntryData(null);
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- EntryCallback callback = new EntryCallback();
+ @SuppressWarnings("unchecked")
+ @Test
+ public void entryWithExpandedEntryButNullDataOmitData() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+ Map<String, Object> roomData = new HashMap<String, Object>();
+ roomData.put("Id", "1");
+ roomData.put("Version", 1);
+
+ ExpandSelectTreeNode node1 = createRoomNode();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nr_Building", callback);
+ callbacks.put("nr_Building", new NullEntryCallback());
final ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, roomData,
EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
- .callbacks(callbacks).build());
+ .callbacks(callbacks).omitInlineForNullData(true).build());
assertNotNull(response);
assertNotNull(response.getEntity());
assertNull("EntitypProvider must not set content header", response.getContentHeader());
- Map<String, Object> roomEntry =
- new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class);
- // remove d wrapper
- roomEntry = (Map<String, Object>) roomEntry.get("d");
- assertEquals(2, roomEntry.size());
+ Map<String, Object> roomEntry = checkRoom(response);
assertTrue(roomEntry.containsKey("nr_Building"));
- assertNull(roomEntry.get("nr_Building"));
+ assertNotNull(roomEntry.get("nr_Building"));
+ assertTrue(((Map<String, Object>) roomEntry.get("nr_Building")).size() == 1);
+ assertTrue(((Map<String, Object>) roomEntry.get("nr_Building")).containsKey("__deferred"));
}
- @SuppressWarnings("unchecked")
@Test
public void entryWithExpandedEntryButEmptyData() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
@@ -584,25 +609,10 @@ public class JsonEntryEntityProducerTest extends BaseTest {
roomData.put("Id", "1");
roomData.put("Version", 1);
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nr_Building", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createRoomNode();
- class EntryCallback implements OnWriteEntryContent {
- @Override
- public WriteEntryCallbackResult retrieveEntryResult(final WriteEntryCallbackContext context)
- throws ODataApplicationException {
- WriteEntryCallbackResult result = new WriteEntryCallbackResult();
- result.setEntryData(new HashMap<String, Object>());
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- EntryCallback callback = new EntryCallback();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nr_Building", callback);
+ callbacks.put("nr_Building", new EmptyEntryCallback());
ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, roomData,
@@ -612,15 +622,50 @@ public class JsonEntryEntityProducerTest extends BaseTest {
assertNotNull(response.getEntity());
assertNull("EntitypProvider must not set content header", response.getContentHeader());
- Map<String, Object> roomEntry =
- new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class);
- // remove d wrapper
- roomEntry = (Map<String, Object>) roomEntry.get("d");
- assertEquals(2, roomEntry.size());
+ Map<String, Object> roomEntry = checkRoom(response);
assertTrue(roomEntry.containsKey("nr_Building"));
assertNull(roomEntry.get("nr_Building"));
}
+ class EmptyEntryCallback implements OnWriteEntryContent {
+ @Override
+ public WriteEntryCallbackResult retrieveEntryResult(final WriteEntryCallbackContext context)
+ throws ODataApplicationException {
+ WriteEntryCallbackResult result = new WriteEntryCallbackResult();
+ result.setEntryData(new HashMap<String, Object>());
+ result.setInlineProperties(DEFAULT_PROPERTIES);
+ return result;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void entryWithExpandedEntryButEmptyDataOmitInline() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+ Map<String, Object> roomData = new HashMap<String, Object>();
+ roomData.put("Id", "1");
+ roomData.put("Version", 1);
+
+ ExpandSelectTreeNode node1 = createRoomNode();
+
+ Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+ callbacks.put("nr_Building", new EmptyEntryCallback());
+
+ ODataResponse response =
+ new JsonEntityProvider().writeEntry(entitySet, roomData,
+ EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+ .omitInlineForNullData(true).callbacks(callbacks).build());
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ Map<String, Object> roomEntry = checkRoom(response);
+ assertTrue(roomEntry.containsKey("nr_Building"));
+ assertNotNull(roomEntry.get("nr_Building"));
+ assertTrue(((Map<String, Object>) roomEntry.get("nr_Building")).size() == 1);
+ assertTrue(((Map<String, Object>) roomEntry.get("nr_Building")).containsKey("__deferred"));
+ }
+
@Test
public void entryWithExpandedEntry() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
@@ -628,11 +673,7 @@ public class JsonEntryEntityProducerTest extends BaseTest {
roomData.put("Id", "1");
roomData.put("Version", 1);
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nr_Building", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createRoomNode();
class EntryCallback implements OnWriteEntryContent {
@Override
@@ -784,11 +825,7 @@ public class JsonEntryEntityProducerTest extends BaseTest {
roomData.put("Id", "1");
roomData.put("Version", 1);
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nr_Building", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createRoomNode();
final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, roomData,
EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1).build());
@@ -806,11 +843,7 @@ public class JsonEntryEntityProducerTest extends BaseTest {
roomData.put("Id", "1");
roomData.put("Version", 1);
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nr_Building", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createRoomNode();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
callbacks.put("nr_Building", null);
@@ -827,30 +860,10 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
- class FeedCallback implements OnWriteFeedContent {
- @Override
- public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
- throws ODataApplicationException {
- Map<String, Object> roomData = new HashMap<String, Object>();
- roomData.put("Id", "1");
- roomData.put("Version", 1);
- List<Map<String, Object>> roomsData = new ArrayList<Map<String, Object>>();
- roomsData.add(roomData);
- WriteFeedCallbackResult result = new WriteFeedCallbackResult();
- result.setFeedData(roomsData);
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- FeedCallback callback = new FeedCallback();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nb_Rooms", callback);
+ callbacks.put("nb_Rooms", new DataFeedCallback());
final ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, buildingData,
@@ -866,6 +879,23 @@ public class JsonEntryEntityProducerTest extends BaseTest {
+ "\"nr_Building\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Rooms('1')/nr_Building\"}}}]}}}",
json);
}
+
+ class DataFeedCallback implements OnWriteFeedContent {
+ @Override
+ public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
+ throws ODataApplicationException {
+ Map<String, Object> roomData = new HashMap<String, Object>();
+ roomData.put("Id", "1");
+ roomData.put("Version", 1);
+ List<Map<String, Object>> roomsData = new ArrayList<Map<String, Object>>();
+ roomsData.add(roomData);
+ WriteFeedCallbackResult result = new WriteFeedCallbackResult();
+ result.setFeedData(roomsData);
+ result.setInlineProperties(DEFAULT_PROPERTIES);
+ return result;
+ }
+ }
+
@Test
public void entryWithExpandedFeedInClientUseCase() throws Exception {
@@ -873,28 +903,9 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
- class FeedCallback implements OnWriteFeedContent {
- @Override
- public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
- throws ODataApplicationException {
- Map<String, Object> roomData = new HashMap<String, Object>();
- roomData.put("Id", "1");
- roomData.put("Version", 1);
- List<Map<String, Object>> roomsData = new ArrayList<Map<String, Object>>();
- roomsData.add(roomData);
- WriteFeedCallbackResult result = new WriteFeedCallbackResult();
- result.setFeedData(roomsData);
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- FeedCallback callback = new FeedCallback();
+ DataFeedCallback callback = new DataFeedCallback();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
callbacks.put("nb_Rooms", callback);
@@ -920,25 +931,10 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
- class FeedCallback implements OnWriteFeedContent {
- @Override
- public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
- throws ODataApplicationException {
- WriteFeedCallbackResult result = new WriteFeedCallbackResult();
- result.setFeedData(null);
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- FeedCallback callback = new FeedCallback();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nb_Rooms", callback);
+ callbacks.put("nb_Rooms", new NullFeedCallback());
final ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, buildingData,
@@ -948,18 +944,52 @@ public class JsonEntryEntityProducerTest extends BaseTest {
assertNotNull(response.getEntity());
assertNull("EntitypProvider must not set content header", response.getContentHeader());
- Map<String, Object> buildingEntry =
- new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class);
- // remove d wrapper
- buildingEntry = (Map<String, Object>) buildingEntry.get("d");
- assertEquals(2, buildingEntry.size());
+ Map<String, Object> buildingEntry = checkRoom(response);
assertTrue(buildingEntry.containsKey("nb_Rooms"));
Map<String, Object> roomsFeed = (Map<String, Object>) buildingEntry.get("nb_Rooms");
assertNotNull(roomsFeed);
List<Object> roomsFeedEntries = (List<Object>) roomsFeed.get("results");
assertEquals(0, roomsFeedEntries.size());
}
+ public class NullFeedCallback implements OnWriteFeedContent {
+ @Override
+ public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
+ throws ODataApplicationException {
+ WriteFeedCallbackResult result = new WriteFeedCallbackResult();
+ result.setFeedData(null);
+ result.setInlineProperties(DEFAULT_PROPERTIES);
+ return result;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void entryWithExpandedFeedButNullDataOmitInline() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings");
+ Map<String, Object> buildingData = new HashMap<String, Object>();
+ buildingData.put("Id", "1");
+
+ ExpandSelectTreeNode node1 = createBuildingNode();
+
+ Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+ callbacks.put("nb_Rooms", new NullFeedCallback());
+
+ final ODataResponse response =
+ new JsonEntityProvider().writeEntry(entitySet, buildingData,
+ EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+ .omitInlineForNullData(true).callbacks(callbacks).build());
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+ Map<String, Object> buildingEntry = checkRoom(response);
+ assertTrue(buildingEntry.containsKey("nb_Rooms"));
+ assertNotNull(buildingEntry.get("nb_Rooms"));
+ Map<String, Object> navContent = (Map<String, Object>) buildingEntry.get("nb_Rooms");
+ assertTrue(navContent.size() == 1);
+ assertTrue(navContent.containsKey("__deferred"));
+ }
+
@SuppressWarnings("unchecked")
@Test
public void entryWithExpandedFeedButNullDataClientUseCase() throws Exception {
@@ -967,25 +997,10 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
- class FeedCallback implements OnWriteFeedContent {
- @Override
- public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
- throws ODataApplicationException {
- WriteFeedCallbackResult result = new WriteFeedCallbackResult();
- result.setFeedData(null);
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- FeedCallback callback = new FeedCallback();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nb_Rooms", callback);
+ callbacks.put("nb_Rooms", new NullFeedCallback());
final ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, buildingData,
@@ -995,16 +1010,50 @@ public class JsonEntryEntityProducerTest extends BaseTest {
assertNotNull(response.getEntity());
assertNull("EntitypProvider must not set content header", response.getContentHeader());
+ Map<String, Object> buildingEntry = checkRoom(response);
+
+ assertTrue(buildingEntry.containsKey("nb_Rooms"));
+ List<Object> roomsFeed = (List<Object>) buildingEntry.get("nb_Rooms");
+ assertNotNull(roomsFeed);
+ assertEquals(0, roomsFeed.size());
+ }
+
+ @SuppressWarnings("unchecked")
+ private Map<String, Object> checkRoom(final ODataResponse response) {
Map<String, Object> buildingEntry =
new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class);
// remove d wrapper
buildingEntry = (Map<String, Object>) buildingEntry.get("d");
assertEquals(2, buildingEntry.size());
+ return buildingEntry;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void entryWithExpandedFeedButNullDataClientUseCaseOmitInline() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings");
+ Map<String, Object> buildingData = new HashMap<String, Object>();
+ buildingData.put("Id", "1");
+
+ ExpandSelectTreeNode node1 = createBuildingNode();
+
+ Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+ callbacks.put("nb_Rooms", new NullFeedCallback());
+
+ final ODataResponse response =
+ new JsonEntityProvider().writeEntry(entitySet, buildingData,
+ EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+ .omitInlineForNullData(true).callbacks(callbacks).responsePayload(false).build());
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ Map<String, Object> buildingEntry = checkRoom(response);
assertTrue(buildingEntry.containsKey("nb_Rooms"));
- List<Object> roomsFeed = (List<Object>) buildingEntry.get("nb_Rooms");
- assertNotNull(roomsFeed);
- assertEquals(0, roomsFeed.size());
+ assertNotNull(buildingEntry.get("nb_Rooms"));
+ assertTrue(((Map<String, Object>) buildingEntry.get("nb_Rooms")).size() == 1);
+ assertTrue(((Map<String, Object>) buildingEntry.get("nb_Rooms")).containsKey("__deferred"));
}
@SuppressWarnings("unchecked")
@@ -1014,26 +1063,12 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
- class FeedCallback implements OnWriteFeedContent {
- @Override
- public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
- throws ODataApplicationException {
- WriteFeedCallbackResult result = new WriteFeedCallbackResult();
- result.setFeedData(new ArrayList<Map<String, Object>>());
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- FeedCallback callback = new FeedCallback();
+
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nb_Rooms", callback);
-
+ callbacks.put("nb_Rooms", new EmptyFeedCallback());
+
final ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, buildingData,
EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
@@ -1042,44 +1077,72 @@ public class JsonEntryEntityProducerTest extends BaseTest {
assertNotNull(response.getEntity());
assertNull("EntitypProvider must not set content header", response.getContentHeader());
- Map<String, Object> buildingEntry =
- new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class);
- // remove d wrapper
- buildingEntry = (Map<String, Object>) buildingEntry.get("d");
- assertEquals(2, buildingEntry.size());
+ Map<String, Object> buildingEntry = checkRoom(response);
assertTrue(buildingEntry.containsKey("nb_Rooms"));
Map<String, Object> roomsFeed = (Map<String, Object>) buildingEntry.get("nb_Rooms");
assertNotNull(roomsFeed);
List<Object> roomsFeedEntries = (List<Object>) roomsFeed.get("results");
assertEquals(0, roomsFeedEntries.size());
}
+ private ExpandSelectTreeNode createBuildingNode() {
+ ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
+ Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
+ links.put("nb_Rooms", node2);
+ ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
+ Mockito.when(node1.getLinks()).thenReturn(links);
+ return node1;
+ }
+
+ class EmptyFeedCallback implements OnWriteFeedContent {
+ @Override
+ public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
+ throws ODataApplicationException {
+ WriteFeedCallbackResult result = new WriteFeedCallbackResult();
+ result.setFeedData(new ArrayList<Map<String, Object>>());
+ result.setInlineProperties(DEFAULT_PROPERTIES);
+ return result;
+ }
+ }
@SuppressWarnings("unchecked")
@Test
+ public void entryWithExpandedFeedButEmptyDataOmitInline() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings");
+ Map<String, Object> buildingData = new HashMap<String, Object>();
+ buildingData.put("Id", "1");
+
+ ExpandSelectTreeNode node1 = createBuildingNode();
+
+ Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+ callbacks.put("nb_Rooms", new EmptyFeedCallback());
+
+ final ODataResponse response =
+ new JsonEntityProvider().writeEntry(entitySet, buildingData,
+ EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+ .omitInlineForNullData(true).callbacks(callbacks).build());
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ Map<String, Object> buildingEntry = checkRoom(response);
+ assertTrue(buildingEntry.containsKey("nb_Rooms"));
+ assertNotNull(buildingEntry.get("nb_Rooms"));
+ assertTrue(((Map<String, Object>) buildingEntry.get("nb_Rooms")).size() == 1);
+ assertTrue(((Map<String, Object>) buildingEntry.get("nb_Rooms")).containsKey("__deferred"));
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
public void entryWithExpandedFeedButEmptyDataClientCase() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings");
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
- class FeedCallback implements OnWriteFeedContent {
- @Override
- public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
- throws ODataApplicationException {
- WriteFeedCallbackResult result = new WriteFeedCallbackResult();
- result.setFeedData(new ArrayList<Map<String, Object>>());
- result.setInlineProperties(DEFAULT_PROPERTIES);
- return result;
- }
- }
- FeedCallback callback = new FeedCallback();
+
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
- callbacks.put("nb_Rooms", callback);
+ callbacks.put("nb_Rooms", new EmptyFeedCallback());
final ODataResponse response =
new JsonEntityProvider().writeEntry(entitySet, buildingData,
@@ -1089,17 +1152,41 @@ public class JsonEntryEntityProducerTest extends BaseTest {
assertNotNull(response.getEntity());
assertNull("EntitypProvider must not set content header", response.getContentHeader());
- Map<String, Object> buildingEntry =
- new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class);
- // remove d wrapper
- buildingEntry = (Map<String, Object>) buildingEntry.get("d");
- assertEquals(2, buildingEntry.size());
+ Map<String, Object> buildingEntry = checkRoom(response);
assertTrue(buildingEntry.containsKey("nb_Rooms"));
List<Object> roomsFeed = (List<Object>) buildingEntry.get("nb_Rooms");
assertNotNull(roomsFeed);
assertEquals(0, roomsFeed.size());
}
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void entryWithExpandedFeedButEmptyDataClientCaseOmitInline() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings");
+ Map<String, Object> buildingData = new HashMap<String, Object>();
+ buildingData.put("Id", "1");
+
+ ExpandSelectTreeNode node1 = createBuildingNode();
+
+ Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+ callbacks.put("nb_Rooms", new EmptyFeedCallback());
+
+ final ODataResponse response =
+ new JsonEntityProvider().writeEntry(entitySet, buildingData,
+ EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+ .omitInlineForNullData(true).callbacks(callbacks).responsePayload(false).build());
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ Map<String, Object> buildingEntry = checkRoom(response);
+
+ assertTrue(buildingEntry.containsKey("nb_Rooms"));
+ assertNotNull(buildingEntry.get("nb_Rooms"));
+ assertTrue(((Map<String, Object>) buildingEntry.get("nb_Rooms")).size() == 1);
+ assertTrue(((Map<String, Object>) buildingEntry.get("nb_Rooms")).containsKey("__deferred"));
+ }
@Test
public void entryWithExpandedFeedButNoRegisteredCallback() throws Exception {
@@ -1107,11 +1194,7 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, buildingData,
EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1).build());
@@ -1128,11 +1211,7 @@ public class JsonEntryEntityProducerTest extends BaseTest {
Map<String, Object> buildingData = new HashMap<String, Object>();
buildingData.put("Id", "1");
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nb_Rooms", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createBuildingNode();
Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
callbacks.put("nb_Rooms", null);
@@ -1389,11 +1468,7 @@ public class JsonEntryEntityProducerTest extends BaseTest {
roomData.put("Id", "1");
roomData.put("Version", 1);
- ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
- Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
- links.put("nr_Building", node2);
- ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
- Mockito.when(node1.getLinks()).thenReturn(links);
+ ExpandSelectTreeNode node1 = createRoomNode();
class EntryCallback implements OnWriteEntryContent {
@Override
@@ -1422,10 +1497,10 @@ public class JsonEntryEntityProducerTest extends BaseTest {
final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
assertNotNull(json);
- assertEquals("{\"d\":{\"__metadata\":{\"id\":\""+BASE_URI+"Rooms('1')\",\"uri\":\""+BASE_URI+"Rooms('1')\","
+ assertEquals("{\"d\":{\"__metadata\":{\"id\":\"" + BASE_URI + "Rooms('1')\",\"uri\":\"" + BASE_URI + "Rooms('1')\","
+ "\"type\":\"RefScenario.Room\",\"etag\":\"W/\\\"1\\\"\"},\"Id\":\"1\",\"Version\":1,"
- + "\"nr_Building\":{\"__metadata\":{\"id\":\""+BASE_URI+"Buildings('1')\","
- + "\"uri\":\""+BASE_URI+"Buildings('1')\",\"type\":\"RefScenario.Building\"},"
+ + "\"nr_Building\":{\"__metadata\":{\"id\":\"" + BASE_URI + "Buildings('1')\","
+ + "\"uri\":\"" + BASE_URI + "Buildings('1')\",\"type\":\"RefScenario.Building\"},"
+ "\"Id\":\"1\",\"Name\":\"Building1\"}}}", json);
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/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 faab701..6504f2e 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
@@ -86,6 +86,54 @@ public class XmlExpandProducerTest extends AbstractProviderTest {
}
@Test
+ public void expandSelectedTeamNullOmitInline() throws Exception {
+ ExpandSelectTreeNode selectTree = getSelectExpandTree("Employees('1')", "ne_Team", "ne_Team");
+
+ HashMap<String, ODataCallback> callbacksEmployee = createCallbacks("Employees");
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.serviceRoot(BASE_URI).expandSelectTree(selectTree).callbacks(callbacksEmployee)
+ .omitInlineForNullData(true).build();
+ AtomEntityProvider provider = createAtomEntityProvider();
+ ODataResponse response =
+ provider.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"),
+ employeeData, properties);
+
+ String xmlString = verifyResponse(response);
+ verifyNavigationProperties(xmlString, F, F, T);
+ assertXpathExists(teamXPathString, xmlString);
+ assertXpathNotExists("/a:entry/m:properties", xmlString);
+ assertXpathNotExists(teamXPathString + "/m:inline", xmlString);
+ assertXpathNotExists(teamXPathString + "/m:inline/a:entry", xmlString);
+ }
+
+ @Test
+ public void expandSelectedRoomsNullOmitInline() throws Exception {
+ ExpandSelectTreeNode selectTree = getSelectExpandTree("Buildings('1')", "nb_Rooms", "nb_Rooms");
+
+ HashMap<String, ODataCallback> callbacksEmployee = createCallbacks("Buildings");
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.serviceRoot(BASE_URI).expandSelectTree(selectTree).callbacks(callbacksEmployee)
+ .omitInlineForNullData(true).build();
+ AtomEntityProvider provider = createAtomEntityProvider();
+ ODataResponse response =
+ provider.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings"),
+ buildingData, properties);
+
+ String xmlString = verifyResponse(response);
+ assertXpathNotExists("/a:entry/m:properties", xmlString);
+ assertXpathExists(buildingXPathString, xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline", xmlString);
+
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:id", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:title", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:updated", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:author", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:author/a:name", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:link[@href=\"Buildings('1')/nb_Rooms\"]", xmlString);
+ assertXpathNotExists(buildingXPathString + "/m:inline/a:feed/a:entry", xmlString);
+ }
+ @Test
public void expandSelectedEmployees() throws Exception {
ExpandSelectTreeNode selectTree = getSelectExpandTree("Rooms('1')", "nr_Employees", "nr_Employees");
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/4e1667fc/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/InvalidDataInScenarioTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/InvalidDataInScenarioTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/InvalidDataInScenarioTest.java
index 10be915..a796b39 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/InvalidDataInScenarioTest.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/InvalidDataInScenarioTest.java
@@ -73,7 +73,7 @@ public class InvalidDataInScenarioTest extends AbstractRefTest {
@Test
public void nullKeyInEntryData() throws Exception {
HttpResponse response = callUri("Employees('1')", HttpStatusCodes.INTERNAL_SERVER_ERROR);
- System.out.println(getBody(response));
+ assertTrue(getBody(response).contains("null value"));
response = callUri("Employees('1')?$format=json", HttpStatusCodes.INTERNAL_SERVER_ERROR);
assertTrue(getBody(response).contains("null value"));
}