Repository: olingo-odata2 Updated Branches: refs/heads/master f24fc8bf4 -> d6f9ddeed
[OLINGO-1035] Accept inline URI to create a reference to an existing entity. Signed-off-by: Christian Amend <christian.am...@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/d6f9ddee Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/d6f9ddee Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/d6f9ddee Branch: refs/heads/master Commit: d6f9ddeedb928b32c0ef2f3ea0dbf0ea056b9d3a Parents: f24fc8b Author: Michael Strasser <apa...@michaelstrasser.com> Authored: Tue Oct 18 11:42:47 2016 +1100 Committer: Christian Amend <christian.am...@sap.com> Committed: Thu Jan 26 11:11:31 2017 +0100 ---------------------------------------------------------------------- .../processor/core/ListsProcessor.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/d6f9ddee/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/ListsProcessor.java ---------------------------------------------------------------------- diff --git a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/ListsProcessor.java b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/ListsProcessor.java index df23b31..a896c80 100644 --- a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/ListsProcessor.java +++ b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/ListsProcessor.java @@ -1153,12 +1153,20 @@ public class ListsProcessor extends DataSourceProcessor { } } else if (relatedValue instanceof ODataEntry) { final ODataEntry relatedValueEntry = (ODataEntry) relatedValue; - Object relatedData = dataSource.newDataObject(relatedEntitySet); - setStructuralTypeValuesFromMap(relatedData, relatedEntityType, relatedValueEntry.getProperties(), false); - dataSource.createData(relatedEntitySet, relatedData); - dataSource.writeRelation(entitySet, data, relatedEntitySet, getStructuralTypeValueMap(relatedData, - relatedEntityType)); - createInlinedEntities(relatedEntitySet, relatedData, relatedValueEntry); + final Map<String, Object> relatedProperties = relatedValueEntry.getProperties(); + if (relatedProperties.isEmpty()) { + final Map<String, Object> key = parseLinkUri(relatedEntitySet, relatedValueEntry.getMetadata().getUri()); + if (key != null) { + dataSource.writeRelation(entitySet, data, relatedEntitySet, key); + } + } else { + Object relatedData = dataSource.newDataObject(relatedEntitySet); + setStructuralTypeValuesFromMap(relatedData, relatedEntityType, relatedProperties, false); + dataSource.createData(relatedEntitySet, relatedData); + dataSource.writeRelation(entitySet, data, relatedEntitySet, getStructuralTypeValueMap(relatedData, + relatedEntityType)); + createInlinedEntities(relatedEntitySet, relatedData, relatedValueEntry); + } } else { throw new ODataException("Unexpected class for a related value: " + relatedValue.getClass().getSimpleName()); }