[OLINGO-837] getNextNavigationProperty fix
Signed-off-by: mibo <mibo@mirb.de>
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/callback/JPAExpandCallBack.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/callback/JPAExpandCallBack.java
index 0ebc5eb..9940281 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/callback/JPAExpandCallBack.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/callback/JPAExpandCallBack.java
@@ -19,6 +19,8 @@
package org.apache.olingo.odata2.jpa.processor.core.callback;
import java.net.URI;
+import java.text.NumberFormat;
+import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -190,8 +192,7 @@
int size = navPropSegments.size();
for (int i = 0; i < size; i++) {
EdmNavigationProperty navProperty = navPropSegments.get(i).getNavigationProperty();
- if (navProperty.getFromRole().equalsIgnoreCase(sourceEntityType.getName())
- && navProperty.getName().equals(navigationProperty.getName())) {
+ if (testNavPropertySegment(navProperty, sourceEntityType, navigationProperty)) {
if (i < size - 1) {
edmNavigationPropertyList.add(navPropSegments.get(i + 1).getNavigationProperty());
}
@@ -201,6 +202,24 @@
return edmNavigationPropertyList;
}
+ private static boolean testNavPropertySegment(
+ final EdmNavigationProperty navProperty,
+ final EdmEntityType sourceEntityType,
+ final EdmNavigationProperty navigationProperty) throws EdmException {
+ if(navigationProperty.getFromRole().toLowerCase().startsWith(sourceEntityType.getName().toLowerCase())) {
+ final String roleNum =
+ navigationProperty.getFromRole().substring(sourceEntityType.getName().length());
+ if(roleNum.length() > 0) {
+ try {
+ NumberFormat.getInstance().parse(roleNum);
+ } catch (ParseException e) {
+ return false;
+ }
+ }
+ }
+ return navProperty.getName().equals(navigationProperty.getName());
+ }
+
public static <T> Map<String, ODataCallback> getCallbacks(final URI baseUri,
final ExpandSelectTreeNode expandSelectTreeNode, final List<ArrayList<NavigationPropertySegment>> expandList)
throws EdmException {