[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 <[email protected]> Authored: Mon Jan 25 20:35:26 2016 +0100 Committer: mibo <[email protected]> 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
