You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2016/01/25 20:35:57 UTC

[1/2] olingo-odata2 git commit: [OLINGO-837] getNextNavigationProperty fix

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 13cfd0a50 -> 09c0c743a


[OLINGO-837] getNextNavigationProperty fix

Signed-off-by: mibo <mi...@mirb.de>


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

Branch: refs/heads/master
Commit: 1dd8850ae21723e10bf8377373d8df40f026f434
Parents: 13cfd0a
Author: tothgya <to...@gmail.com>
Authored: Tue Dec 15 14:31:04 2015 +0100
Committer: mibo <mi...@mirb.de>
Committed: Fri Jan 22 07:31:22 2016 +0100

----------------------------------------------------------------------
 .../core/callback/JPAExpandCallBack.java        | 23 ++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1dd8850a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/callback/JPAExpandCallBack.java
----------------------------------------------------------------------
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 @@ public class JPAExpandCallBack implements OnWriteFeedContent, OnWriteEntryConten
       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 @@ public class JPAExpandCallBack implements OnWriteFeedContent, OnWriteEntryConten
     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 {


[2/2] olingo-odata2 git commit: [OLINGO-837] Added sample and test case

Posted by mi...@apache.org.
[OLINGO-837] Added sample and test case


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

Branch: refs/heads/master
Commit: 09c0c743a29f07d2d69b04dc0b3c46049f3ac222
Parents: 1dd8850
Author: mibo <mi...@mirb.de>
Authored: Mon Jan 25 20:35:26 2016 +0100
Committer: mibo <mi...@mirb.de>
Committed: Mon Jan 25 20:35:26 2016 +0100

----------------------------------------------------------------------
 .../core/callback/JPAExpandCallBack.java        | 13 +++----
 .../core/access/data/JPAExpandCallBackTest.java | 40 ++++++++++++++++++++
 .../processor/core/mock/data/EdmMockUtil.java   | 16 ++++++--
 .../jpa/processor/ref/util/DataGenerator.java   | 11 ++++--
 .../resources/SQL_Insert_Customer.properties    |  4 +-
 5 files changed, 69 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/09c0c743/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/callback/JPAExpandCallBack.java
----------------------------------------------------------------------
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 9940281..8d4102c 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,8 +19,6 @@
 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;
@@ -202,17 +200,18 @@ public class JPAExpandCallBack implements OnWriteFeedContent, OnWriteEntryConten
     return edmNavigationPropertyList;
   }
 
-  private static boolean testNavPropertySegment(
+  private boolean testNavPropertySegment(
 		  final EdmNavigationProperty navProperty,
 		  final EdmEntityType sourceEntityType,
 		  final EdmNavigationProperty navigationProperty) throws EdmException {
-	  if(navigationProperty.getFromRole().toLowerCase().startsWith(sourceEntityType.getName().toLowerCase())) {
+	  if(navigationProperty.getFromRole().toLowerCase(Locale.ENGLISH).startsWith(
+        sourceEntityType.getName().toLowerCase(Locale.ENGLISH))) {
 		  final String roleNum = 
 				  navigationProperty.getFromRole().substring(sourceEntityType.getName().length());
 		  if(roleNum.length() > 0) {
 			  try {
-				  NumberFormat.getInstance().parse(roleNum);
-			  } catch (ParseException e) {
+				  Integer.parseInt(roleNum);
+			  } catch (NumberFormatException e) {
 				  return false;
 			  }
 		  }
@@ -220,7 +219,7 @@ public class JPAExpandCallBack implements OnWriteFeedContent, OnWriteEntryConten
 	  return navProperty.getName().equals(navigationProperty.getName());
   }
   
-  public static <T> Map<String, ODataCallback> getCallbacks(final URI baseUri,
+  public static Map<String, ODataCallback> getCallbacks(final URI baseUri,
       final ExpandSelectTreeNode expandSelectTreeNode, final List<ArrayList<NavigationPropertySegment>> expandList)
       throws EdmException {
     Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/09c0c743/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAExpandCallBackTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAExpandCallBackTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAExpandCallBackTest.java
index 5c8700a..29a2a7a 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAExpandCallBackTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAExpandCallBackTest.java
@@ -44,6 +44,7 @@ import org.apache.olingo.odata2.api.uri.NavigationPropertySegment;
 import org.apache.olingo.odata2.jpa.processor.core.callback.JPAExpandCallBack;
 import org.apache.olingo.odata2.jpa.processor.core.common.ODataJPATestConstants;
 import org.apache.olingo.odata2.jpa.processor.core.mock.data.EdmMockUtil;
+import org.easymock.EasyMock;
 import org.junit.Test;
 
 public class JPAExpandCallBackTest {
@@ -148,6 +149,45 @@ public class JPAExpandCallBackTest {
     }
   }
 
+  @SuppressWarnings("unchecked")
+  @Test
+  public void testGetNextNavigationPropertyWithNumber() {
+    JPAExpandCallBack callBack = getJPAExpandCallBackObject();
+    List<ArrayList<NavigationPropertySegment>> expandList = EdmMockUtil.getExpandList();
+    ArrayList<NavigationPropertySegment> expands = new ArrayList<NavigationPropertySegment>();
+    expands.add(EdmMockUtil.mockNavigationPropertySegment("2"));
+    expandList.add(expands);
+    expands.add(EdmMockUtil.mockThirdNavigationPropertySegment());
+    List<EdmNavigationProperty> result = null;
+
+    try {
+      Field field = callBack.getClass().getDeclaredField("expandList");
+      field.setAccessible(true);
+      field.set(callBack, expandList);
+      Class<?>[] formalParams = { EdmEntityType.class, EdmNavigationProperty.class };
+      Object[] actualParams = { EdmMockUtil.mockSourceEdmEntityType(), EdmMockUtil.mockNavigationProperty() };
+      Method method = callBack.getClass().getDeclaredMethod("getNextNavigationProperty", formalParams);
+      method.setAccessible(true);
+      result = (List<EdmNavigationProperty>) method.invoke(callBack, actualParams);
+      assertEquals("MaterialDetails", result.get(0).getName());
+
+    } catch (SecurityException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    } catch (NoSuchFieldException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    } catch (IllegalArgumentException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    } catch (IllegalAccessException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    } catch (NoSuchMethodException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    } catch (InvocationTargetException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    } catch (EdmException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
   private JPAExpandCallBack getJPAExpandCallBackObject() {
     Map<String, ODataCallback> callBacks = null;
     try {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/09c0c743/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtil.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtil.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtil.java
index cda54df..7bd7bcf 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtil.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtil.java
@@ -204,14 +204,19 @@ public class EdmMockUtil {
     return entryData;
   }
 
-  private static NavigationPropertySegment mockNavigationPropertySegment() {
+  public static NavigationPropertySegment mockNavigationPropertySegment(String fromRoleAppendix) {
     NavigationPropertySegment navigationPropSegment = EasyMock.createMock(NavigationPropertySegment.class);
-    EasyMock.expect(navigationPropSegment.getNavigationProperty()).andStubReturn(mockNavigationProperty());
+    EasyMock.expect(navigationPropSegment.getNavigationProperty()).andStubReturn(
+        mockNavigationProperty(fromRoleAppendix));
     EasyMock.expect(navigationPropSegment.getTargetEntitySet()).andStubReturn(mockTargetEntitySet());
     EasyMock.replay(navigationPropSegment);
     return navigationPropSegment;
   }
 
+  public static NavigationPropertySegment mockNavigationPropertySegment() {
+    return mockNavigationPropertySegment(null);
+  }
+
   public static NavigationPropertySegment mockThirdNavigationPropertySegment() {
     NavigationPropertySegment navigationPropSegment = EasyMock.createMock(NavigationPropertySegment.class);
     EasyMock.expect(navigationPropSegment.getNavigationProperty()).andStubReturn(mockSecondNavigationProperty());
@@ -330,6 +335,10 @@ public class EdmMockUtil {
   }
 
   public static EdmNavigationProperty mockNavigationProperty() {
+    return mockNavigationProperty(null);
+  }
+
+  public static EdmNavigationProperty mockNavigationProperty(String fromRoleAppendix) {
     EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
     EdmMapping mapping = EasyMock.createMock(EdmMapping.class);
     EasyMock.expect(mapping.getInternalName()).andStubReturn("salesOrderLineItems");
@@ -338,7 +347,8 @@ public class EdmMockUtil {
       EasyMock.expect(navigationProperty.getMultiplicity()).andStubReturn(EdmMultiplicity.MANY);
       EasyMock.expect(navigationProperty.getMapping()).andStubReturn(mapping);
       EasyMock.expect(navigationProperty.getName()).andStubReturn("SalesOrderLineItemDetails");
-      EasyMock.expect(navigationProperty.getFromRole()).andStubReturn("SalesOrderHeader");
+      EasyMock.expect(navigationProperty.getFromRole()).andStubReturn("SalesOrderHeader"
+      + (fromRoleAppendix == null? "": fromRoleAppendix));
     } catch (EdmException e) {
       fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/09c0c743/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/util/DataGenerator.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/util/DataGenerator.java b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/util/DataGenerator.java
index e8c74dd..eab155d 100644
--- a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/util/DataGenerator.java
+++ b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/util/DataGenerator.java
@@ -18,7 +18,10 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.ref.util;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
 import java.util.List;
 import java.util.ResourceBundle;
 import java.util.Set;
@@ -77,10 +80,12 @@ public class DataGenerator {
         resourceBundleArr[i] = ResourceBundle.getBundle(resourceSQLPropFileNames[i]);// Get SQL statements as properties
 
         Set<String> keySet = resourceBundleArr[i].keySet();
+        List<String> queryNames = new ArrayList<String>(keySet);
+        Collections.sort(queryNames);
 
-        for (String string : keySet) {
-          String currentSQL = (String) string;
-          String sqlQuery = resourceBundleArr[i].getString(currentSQL);
+        for (String queryName : queryNames) {
+//        while(keySet.hasMoreElements()) {
+          String sqlQuery = resourceBundleArr[i].getString(queryName);
           System.out.println("Executing Query - " + sqlQuery);
           SQLCall sqlCall = new SQLCall(sqlQuery);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/09c0c743/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Customer.properties
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Customer.properties b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Customer.properties
index 16e13bd..f6d5a1c 100644
--- a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Customer.properties
+++ b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Customer.properties
@@ -19,5 +19,5 @@
 query_1 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT) VALUES(100,'Bob Bryan','VIP',7,'5 cross Street', 'London', 'UK',  'E7','2012-11-01 00:01:00');
 query_2 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT) VALUES(200,'Mike Bryan','LOW',7,'8 cross Street', 'New York', 'USA',  '10011','2012-11-01 00:01:00');
 query_3 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT) VALUES(201,'Steve Roger','LOW',7,'9 cross Street', 'Mumbai', 'India', '200101','2012-11-01 00:01:00');
-query_4 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT) VALUES(101,'Pac Man','LOW',7,'25 cross Street', 'Frankfurt', 'Germany',  '60001','2012-11-01 00:01:00');
-query_5 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT) VALUES(202,'Bolt Man','LOW',7,'25 cross Street', 'Toronto', 'Canada',  'NE','2012-11-01 00:01:00');
\ No newline at end of file
+query_4 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT, PARENT_ID) VALUES(101,'Pac Man','LOW',7,'25 cross Street', 'Frankfurt', 'Germany', '60001','2012-11-01 00:01:00', 100);
+query_5 = INSERT INTO T_CUSTOMER (ID , NAME, IMPORTANCE, HOUSE_NUMBER , STREET_NAME, CITY, COUNTRY, PINCODE,CREATED_AT, PARENT_ID) VALUES(202,'Bolt Man','LOW',7,'25 cross Street', 'Toronto', 'Canada',  'NE','2012-11-01 00:01:00', 101);
\ No newline at end of file