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

Reply via email to