Repository: olingo-odata2
Updated Branches:
  refs/heads/OLINGO-508_FixAnnotationEdmProvider 6f7b76f68 -> c0e17eea1


[OLINGO-508] Fixed readRelatedData for bi-directional


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

Branch: refs/heads/OLINGO-508_FixAnnotationEdmProvider
Commit: c0e17eea1221392b3bad4de53339778dcbaad6d8
Parents: 6f7b76f
Author: mibo <[email protected]>
Authored: Tue Dec 16 21:26:29 2014 +0100
Committer: mibo <[email protected]>
Committed: Tue Dec 16 21:26:29 2014 +0100

----------------------------------------------------------------------
 .../core/datasource/AnnotationInMemoryDs.java   |  7 ++++++-
 .../ref/AnnotationRefServiceFactory.java        |  6 ++++--
 .../annotation/processor/ref/MetadataTest.java  | 22 ++++++++++++++++++++
 3 files changed, 32 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c0e17eea/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
----------------------------------------------------------------------
diff --git 
a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
 
b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
index c1b121c..74b8d1e 100644
--- 
a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
+++ 
b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
@@ -144,7 +144,12 @@ public class AnnotationInMemoryDs implements DataSource {
 
     AnnotatedNavInfo navInfo = ANNOTATION_HELPER.getCommonNavigationInfo(
         sourceStore.getDataTypeClass(), targetStore.getDataTypeClass());
-    Field sourceField = navInfo.getFromField();
+    final Field sourceField;
+    if(navInfo.isBiDirectional()) {
+      sourceField = navInfo.getToField();
+    } else {
+      sourceField = navInfo.getFromField();
+    }
     if (sourceField == null) {
       throw new AnnotationRuntimeException("Missing source field for related 
data (sourceStore='" + sourceStore
           + "', targetStore='" + targetStore + "').");

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c0e17eea/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/AnnotationRefServiceFactory.java
----------------------------------------------------------------------
diff --git 
a/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/AnnotationRefServiceFactory.java
 
b/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/AnnotationRefServiceFactory.java
index 6bf3588..9130a19 100644
--- 
a/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/AnnotationRefServiceFactory.java
+++ 
b/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/AnnotationRefServiceFactory.java
@@ -126,7 +126,9 @@ public class AnnotationRefServiceFactory extends 
ODataServiceFactory {
     teamDs.create(createTeam("Team Beta", false));
     teamDs.create(createTeam("Team Gamma", false));
     teamDs.create(createTeam("Team Omega", true));
-    teamDs.create(createTeam("Team Zeta", true, createTeam("SubTeamOne", 
false)));
+    Team subTeam = createTeam("SubTeamOne", false);
+    teamDs.create(subTeam);
+    teamDs.create(createTeam("Team Zeta", true, subTeam));
 
     DataStore<Building> buildingsDs = getDataStore(Building.class);
     Building redBuilding = createBuilding("Red Building");
@@ -186,7 +188,7 @@ public class AnnotationRefServiceFactory extends 
ODataServiceFactory {
     Team team = new Team();
     team.setName(teamName);
     team.setScrumTeam(isScrumTeam);
-    subTeam.setSubTeam(subTeam);
+    team.setSubTeam(subTeam);
     return team;
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/c0e17eea/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/MetadataTest.java
----------------------------------------------------------------------
diff --git 
a/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/MetadataTest.java
 
b/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/MetadataTest.java
index 0068869..4818327 100644
--- 
a/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/MetadataTest.java
+++ 
b/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/MetadataTest.java
@@ -128,6 +128,11 @@ public class MetadataTest extends AbstractRefXmlTest {
             
"@BaseType='RefScenario.Base']/edm:NavigationProperty[@Name='nt_Employees' and 
" +
             "@Relationship='RefScenario.TeamEmployees' and @FromRole='r_Team' 
and @ToRole='r_Employees']",
         payload);
+    assertXpathExists(
+        "/edmx:Edmx/edmx:DataServices/edm:Schema/edm:EntityType[@Name='Team' 
and " +
+            
"@BaseType='RefScenario.Base']/edm:NavigationProperty[@Name='SubTeam' and " +
+            "@Relationship='RefScenario.Team-r_SubTeam' and @FromRole='Team' 
and @ToRole='r_SubTeam']",
+        payload);
 
     // Room
     assertXpathExists(
@@ -230,6 +235,13 @@ public class MetadataTest extends AbstractRefXmlTest {
     
assertXpathExists("/edmx:Edmx/edmx:DataServices/edm:Schema/edm:Association[@Name='TeamEmployees']"
 +
             "/edm:End[@Type='RefScenario.Team' and @Multiplicity='1' and 
@Role='r_Team']", payload);
 
+    // Team-r_SubTeam
+    
assertXpathExists("/edmx:Edmx/edmx:DataServices/edm:Schema/edm:Association[@Name='Team-r_SubTeam']",
 payload);
+    assertXpathExists( 
"/edmx:Edmx/edmx:DataServices/edm:Schema/edm:Association[@Name='Team-r_SubTeam']"
 +
+        "/edm:End[@Type='RefScenario.Team' and @Multiplicity='1' and 
@Role='Team']", payload);
+    
assertXpathExists("/edmx:Edmx/edmx:DataServices/edm:Schema/edm:Association[@Name='Team-r_SubTeam']"
 +
+        "/edm:End[@Type='RefScenario.Team' and @Multiplicity='1' and 
@Role='r_SubTeam']", payload);
+
     // RoomEmployees
     
assertXpathExists("/edmx:Edmx/edmx:DataServices/edm:Schema/edm:Association[@Name='r_Employees-r_Room']",
 payload);
     
assertXpathExists("/edmx:Edmx/edmx:DataServices/edm:Schema/edm:Association[@Name='r_Employees-r_Room']"
 +
@@ -309,6 +321,16 @@ public class MetadataTest extends AbstractRefXmlTest {
             
"@m:IsDefaultEntityContainer='true']/edm:AssociationSet[@Name='TeamEmployees' 
and " +
             
"@Association='RefScenario.TeamEmployees']/edm:End[@EntitySet='Employees' and 
@Role='r_Employees']",
         payload);
+    assertXpathExists(
+        
"/edmx:Edmx/edmx:DataServices/edm:Schema/edm:EntityContainer[@Name='DefaultContainer'
 and " +
+            
"@m:IsDefaultEntityContainer='true']/edm:AssociationSet[@Name='Team-r_SubTeam' 
and " +
+            
"@Association='RefScenario.Team-r_SubTeam']/edm:End[@EntitySet='Teams' and 
@Role='Team']",
+        payload);
+    assertXpathExists(
+        
"/edmx:Edmx/edmx:DataServices/edm:Schema/edm:EntityContainer[@Name='DefaultContainer'
 and " +
+            
"@m:IsDefaultEntityContainer='true']/edm:AssociationSet[@Name='Team-r_SubTeam' 
and " +
+            
"@Association='RefScenario.Team-r_SubTeam']/edm:End[@EntitySet='Teams' and 
@Role='r_SubTeam']",
+        payload);
 
     assertXpathExists(
         
"/edmx:Edmx/edmx:DataServices/edm:Schema/edm:EntityContainer[@Name='DefaultContainer'
 and " +

Reply via email to