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 " +
