This is an automated email from the ASF dual-hosted git repository.
ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git
The following commit(s) were added to refs/heads/master by this push:
new 2ccc05b [OLINGO-1488]Support deep structures with identical
navigation names (Atom)
2ccc05b is described below
commit 2ccc05b8bf43ed699c870d52e10fb28aef8adbb5
Author: ramya vasanth <[email protected]>
AuthorDate: Wed Dec 9 10:21:52 2020 +0530
[OLINGO-1488]Support deep structures with identical navigation names (Atom)
---
.../core/ep/producer/AtomEntryEntityProducer.java | 20 ++++++++++++++++----
.../core/ep/producer/AtomEntryProducerTest.java | 16 ++++++++++++++++
.../core/ep/producer/AtomFeedProducerTest.java | 14 ++++++++++++++
3 files changed, 46 insertions(+), 4 deletions(-)
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 c347be4..e580f18 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
@@ -253,12 +253,19 @@ public class AtomEntryEntityProducer {
}
}
+ private String concat(String s1, String s2) {
+ return s1.concat(".").concat(s2);
+ }
+
private void appendInlineFeed(final XMLStreamWriter writer, final String
navigationPropertyName,
final EntityInfoAggregator eia, final Map<String, Object> data, final
String self)
throws EntityProviderException, XMLStreamException, EdmException,
URISyntaxException {
if
(eia.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
- if (properties.getCallbacks() != null &&
properties.getCallbacks().containsKey(navigationPropertyName)) {
+ String navigationPropertyNameFqn = concat(eia.getEntityType().getName(),
navigationPropertyName);
+ Map<String, ODataCallback> callbacks = properties.getCallbacks();
+ if (callbacks != null && callbacks.containsKey(navigationPropertyName) ||
+ callbacks.containsKey(navigationPropertyNameFqn)) {
EdmNavigationProperty navProp = (EdmNavigationProperty)
eia.getEntityType().getProperty(navigationPropertyName);
WriteFeedCallbackContext context = new WriteFeedCallbackContext();
@@ -270,7 +277,8 @@ public class AtomEntryEntityProducer {
context.setCurrentExpandSelectTreeNode(subNode);
context.setSelfLink(new URI(self));
- ODataCallback callback =
properties.getCallbacks().get(navigationPropertyName);
+ ODataCallback callback = callbacks.get(navigationPropertyName);
+ callback = callback == null ? callbacks.get(navigationPropertyNameFqn)
: callback;
if (callback == null) {
throw new
EntityProviderProducerException(EntityProviderException.EXPANDNOTSUPPORTED);
}
@@ -308,7 +316,10 @@ public class AtomEntryEntityProducer {
XMLStreamException, EdmException {
if
(eia.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
- if (properties.getCallbacks() != null &&
properties.getCallbacks().containsKey(navigationPropertyName)) {
+ Map<String, ODataCallback> callbacks = properties.getCallbacks();
+ String navigationPropertyNameFqn = concat(eia.getEntityType().getName(),
navigationPropertyName);
+ if (callbacks != null && callbacks.containsKey(navigationPropertyName)
||
+ callbacks.containsKey(navigationPropertyNameFqn)) {
EdmNavigationProperty navProp = (EdmNavigationProperty)
eia.getEntityType().getProperty(navigationPropertyName);
WriteEntryCallbackContext context = new WriteEntryCallbackContext();
@@ -319,7 +330,8 @@ public class AtomEntryEntityProducer {
ExpandSelectTreeNode subNode =
properties.getExpandSelectTree().getLinks().get(navigationPropertyName);
context.setCurrentExpandSelectTreeNode(subNode);
- ODataCallback callback =
properties.getCallbacks().get(navigationPropertyName);
+ ODataCallback callback = callbacks.get(navigationPropertyName);
+ callback = callback == null ? callbacks.get(navigationPropertyNameFqn)
: callback;
if (callback == null) {
throw new
EntityProviderProducerException(EntityProviderException.EXPANDNOTSUPPORTED);
}
diff --git
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
index f62d953..bb28afa 100644
---
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
+++
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
@@ -1320,6 +1320,22 @@ public class AtomEntryProducerTest extends
AbstractProviderTest {
assertXpathNotExists("/a:entry/m:properties", xmlString);
assertXpathExists("/a:entry/a:link", xmlString);
verifyBuilding(buildingXPathString, xmlString);
+
+ callbacks.clear();
+ callbacks.put("Room.nr_Building", callback);
+
+ properties =
+
EntityProviderWriteProperties.serviceRoot(BASE_URI).expandSelectTree(selectTree).callbacks(callbacks).
+ isDataBasedPropertySerialization(true).build();
+ provider = createAtomEntityProvider();
+ response =
+
provider.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms"),
roomData,
+ properties);
+
+ xmlString = verifyResponse(response);
+ assertXpathNotExists("/a:entry/m:properties", xmlString);
+ assertXpathExists("/a:entry/a:link", xmlString);
+ verifyBuilding(buildingXPathString, xmlString);
}
private ExpandSelectTreeNode getSelectExpandTree(final String pathSegment,
final String selectString,
diff --git
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java
index 8487bbc..9402bb0 100644
---
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java
+++
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java
@@ -369,6 +369,20 @@ public class AtomFeedProducerTest extends
AbstractProviderTest {
assertXpathNotExists("/a:entry/m:properties", xmlString);
assertXpathExists("/a:entry/a:link", xmlString);
verifyEmployees(employeeXPathString, xmlString);
+
+ callbacks.clear();
+ callbacks.put("Room.nr_Employees", callback);
+ properties =
EntityProviderWriteProperties.serviceRoot(BASE_URI).expandSelectTree(selectTree).
+ callbacks(callbacks).isDataBasedPropertySerialization(true).build();
+ provider = createAtomEntityProvider();
+ response =
+
provider.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms"),
roomData,
+ properties);
+
+ xmlString = verifyResponse(response);
+ assertXpathNotExists("/a:entry/m:properties", xmlString);
+ assertXpathExists("/a:entry/a:link", xmlString);
+ verifyEmployees(employeeXPathString, xmlString);
}
private ExpandSelectTreeNode getSelectExpandTree(final String pathSegment,
final String selectString,