package com.sap.core.odata.processor.core.jpa.mock.data; import static org.junit.Assert.fail; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.easymock.EasyMock; import com.sap.core.odata.api.edm.EdmEntitySet; import com.sap.core.odata.api.edm.EdmEntityType; import com.sap.core.odata.api.edm.EdmException; import com.sap.core.odata.api.edm.EdmMapping; import com.sap.core.odata.api.edm.EdmMultiplicity; import com.sap.core.odata.api.edm.EdmNavigationProperty; import com.sap.core.odata.api.edm.EdmProperty; import com.sap.core.odata.api.edm.EdmType; import com.sap.core.odata.api.edm.EdmTypeKind; import com.sap.core.odata.api.edm.EdmTyped; import com.sap.core.odata.api.edm.provider.Mapping; import com.sap.core.odata.api.ep.callback.WriteEntryCallbackContext; import com.sap.core.odata.api.ep.callback.WriteFeedCallbackContext; import com.sap.core.odata.api.uri.ExpandSelectTreeNode; import com.sap.core.odata.api.uri.NavigationPropertySegment; import com.sap.core.odata.processor.api.jpa.model.JPAEdmMapping; import com.sap.core.odata.processor.core.jpa.common.ODataJPATestConstants; import com.sap.core.odata.processor.core.jpa.model.JPAEdmMappingImpl; public class EdmMockUtil { public static ExpandSelectTreeNode mockExpandSelectTreeNode() { ExpandSelectTreeNode nextExpandNode = EasyMock .createMock(ExpandSelectTreeNode.class); Map<String, ExpandSelectTreeNode> nextLink = null; EasyMock.expect(nextExpandNode.getLinks()).andStubReturn(nextLink); EasyMock.replay(nextExpandNode); ExpandSelectTreeNode expandNode = EasyMock .createMock(ExpandSelectTreeNode.class); Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>(); links.put("SalesOrderLineItemDetails", nextExpandNode); EasyMock.expect(expandNode.getLinks()).andStubReturn(links); EasyMock.replay(expandNode); return expandNode; } public static ExpandSelectTreeNode mockCurrentExpandSelectTreeNode() { ExpandSelectTreeNode expandNode = EasyMock .createMock(ExpandSelectTreeNode.class); Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>(); EasyMock.expect(expandNode.getLinks()).andStubReturn(links); EasyMock.replay(expandNode); return expandNode; } public static List<ArrayList<NavigationPropertySegment>> getExpandList() { List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>(); ArrayList<NavigationPropertySegment> expands = new ArrayList<NavigationPropertySegment>(); expands.add(mockNavigationPropertySegment()); expandList.add(expands); return expandList; } public static WriteFeedCallbackContext getWriteFeedCallBackContext() { URI selfLink = null; WriteFeedCallbackContext writeContext = new WriteFeedCallbackContext(); try { selfLink = new URI("SalesOrders(2L)/SalesOrderLineItemDetails"); writeContext.setSelfLink(selfLink); writeContext .setCurrentExpandSelectTreeNode(mockCurrentExpandSelectTreeNode()); writeContext.setNavigationProperty(mockNavigationProperty()); writeContext.setSourceEntitySet(mockSourceEntitySet()); writeContext.setEntryData(getFeedData()); } catch (URISyntaxException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } return writeContext; } public static WriteEntryCallbackContext getWriteEntryCallBackContext() { WriteEntryCallbackContext writeContext = new WriteEntryCallbackContext(); writeContext .setCurrentExpandSelectTreeNode(mockCurrentExpandSelectTreeNode()); writeContext.setNavigationProperty(mockNavigationProperty()); writeContext.setSourceEntitySet(mockSourceEntitySet()); writeContext.setEntryData(getEntryData()); return writeContext; } private static EdmEntitySet mockSourceEntitySet() { EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class); try { EasyMock.expect(entitySet.getEntityType()).andStubReturn( mockSourceEdmEntityType()); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(entitySet); return entitySet; } public static EdmEntityType mockSourceEdmEntityType() { EdmEntityType entityType = EasyMock.createMock(EdmEntityType.class); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); List<String> navigationPropertyNames = new ArrayList<String>(); List<String> propertyNames = new ArrayList<String>(); propertyNames.add("id"); propertyNames.add("description"); navigationPropertyNames.add("SalesOrderLineItemDetails"); try { EasyMock.expect(mapping.getInternalName()).andStubReturn( "SalesOrderHeader"); EasyMock.replay(mapping); EasyMock.expect(entityType.getName()).andStubReturn( "SalesOrderHeader"); EasyMock.expect(entityType.getMapping()).andStubReturn(mapping); EasyMock.expect(entityType.getNavigationPropertyNames()) .andStubReturn(navigationPropertyNames); EasyMock.expect(entityType.getProperty("SalesOrderLineItemDetails")) .andStubReturn(mockNavigationProperty()); EdmProperty property1 = mockEdmPropertyOfSource1(); EasyMock.expect(entityType.getProperty("id")).andStubReturn( property1); EasyMock.expect(entityType.getProperty("description")) .andStubReturn(mockEdmPropertyOfSource2()); EasyMock.expect(entityType.getPropertyNames()).andStubReturn( propertyNames); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(entityType); return entityType; } private static EdmTyped mockEdmPropertyOfSource2() { EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class); EdmType type = EasyMock.createMock(EdmType.class); EasyMock.expect(type.getKind()).andStubReturn(EdmTypeKind.SIMPLE); EasyMock.replay(type); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); EasyMock.expect(mapping.getInternalName()).andStubReturn("description"); EasyMock.replay(mapping); try { EasyMock.expect(edmProperty.getName()).andStubReturn("description"); EasyMock.expect(edmProperty.getType()).andStubReturn(type); EasyMock.expect(edmProperty.getMapping()).andStubReturn(mapping); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(edmProperty); return edmProperty; } private static EdmProperty mockEdmPropertyOfSource1() { EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class); EdmType type = EasyMock.createMock(EdmType.class); EasyMock.expect(type.getKind()).andStubReturn(EdmTypeKind.SIMPLE); EasyMock.replay(type); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); EasyMock.expect(mapping.getInternalName()).andStubReturn("id"); EasyMock.replay(mapping); try { EasyMock.expect(edmProperty.getName()).andStubReturn("id"); EasyMock.expect(edmProperty.getType()).andStubReturn(type); EasyMock.expect(edmProperty.getMapping()).andStubReturn(mapping); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(edmProperty); return edmProperty; } private static Map<String, Object> getFeedData() { Map<String, Object> entryData = new HashMap<String, Object>(); entryData.put("id", 1); entryData.put("description", "laptop"); List<SalesOrderLineItem> salesOrderLineItems = new ArrayList<SalesOrderLineItem>(); salesOrderLineItems.add(new SalesOrderLineItem(23)); salesOrderLineItems.add(new SalesOrderLineItem(45)); entryData.put("SalesOrderLineItemDetails", salesOrderLineItems); return entryData; } private static Map<String, Object> getEntryData() { Map<String, Object> entryData = new HashMap<String, Object>(); entryData.put("id", 1); entryData.put("description", "laptop"); entryData.put("SalesOrderLineItemDetails", new SalesOrderLineItem(23)); return entryData; } private static NavigationPropertySegment mockNavigationPropertySegment() { NavigationPropertySegment navigationPropSegment = EasyMock .createMock(NavigationPropertySegment.class); EasyMock.expect(navigationPropSegment.getNavigationProperty()) .andStubReturn(mockNavigationProperty()); EasyMock.expect(navigationPropSegment.getTargetEntitySet()) .andStubReturn(mockTargetEntitySet()); EasyMock.replay(navigationPropSegment); return navigationPropSegment; } public static NavigationPropertySegment mockThirdNavigationPropertySegment() { NavigationPropertySegment navigationPropSegment = EasyMock .createMock(NavigationPropertySegment.class); EasyMock.expect(navigationPropSegment.getNavigationProperty()) .andStubReturn(mockSecondNavigationProperty()); EasyMock.expect(navigationPropSegment.getTargetEntitySet()) .andStubReturn(mockThirdEntitySet()); EasyMock.replay(navigationPropSegment); return navigationPropSegment; } public static EdmNavigationProperty mockSecondNavigationProperty() { EdmNavigationProperty navigationProperty = EasyMock .createMock(EdmNavigationProperty.class); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); EasyMock.expect(mapping.getInternalName()).andStubReturn( "materials"); EasyMock.replay(mapping); try { EasyMock.expect(navigationProperty.getMultiplicity()) .andStubReturn(EdmMultiplicity.ONE); EasyMock.expect(navigationProperty.getMapping()).andStubReturn( mapping); EasyMock.expect(navigationProperty.getName()).andStubReturn( "MaterialDetails"); EasyMock.expect(navigationProperty.getFromRole()).andStubReturn("SalesOrderLineItem"); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(navigationProperty); return navigationProperty; } public static EdmEntitySet mockTargetEntitySet() { EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class); try { EasyMock.expect(entitySet.getEntityType()).andStubReturn( mockTargetEdmEntityType()); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(entitySet); return entitySet; } public static EdmEntitySet mockThirdEntitySet() { EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class); try { EasyMock.expect(entitySet.getEntityType()).andStubReturn( mockThirdEdmEntityType()); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(entitySet); return entitySet; } private static EdmEntityType mockThirdEdmEntityType() { EdmEntityType entityType = EasyMock.createMock(EdmEntityType.class); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); List<String> propertyNames = new ArrayList<String>(); propertyNames.add("price"); try { EasyMock.expect(mapping.getInternalName()).andStubReturn( "Material"); EasyMock.replay(mapping); EasyMock.expect(entityType.getName()).andStubReturn( "Material"); EasyMock.expect(entityType.getMapping()).andStubReturn(mapping); EdmProperty property = mockEdmPropertyOfTarget(); EasyMock.expect(entityType.getProperty("price")).andStubReturn( property); EasyMock.expect(entityType.getPropertyNames()).andStubReturn( propertyNames); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(entityType); return entityType; } public static EdmEntityType mockTargetEdmEntityType() { EdmEntityType entityType = EasyMock.createMock(EdmEntityType.class); JPAEdmMapping mapping = new JPAEdmMappingImpl(); List<String> propertyNames = new ArrayList<String>(); propertyNames.add("price"); try { EasyMock.expect(entityType.getName()).andStubReturn( "SalesOrderLineItem"); mapping.setJPAType(JPATypeMock.class); ((Mapping) mapping).setInternalName("SalesOrderLineItem"); ((Mapping) mapping).setInternalName("SalesOrderLineItem"); EasyMock.expect(entityType.getMapping()).andStubReturn((EdmMapping) mapping); EdmProperty property = mockEdmPropertyOfTarget(); EasyMock.expect(entityType.getProperty("price")).andStubReturn( property); EasyMock.expect(entityType.getPropertyNames()).andStubReturn( propertyNames); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(entityType); return entityType; } private static EdmProperty mockEdmPropertyOfTarget() { EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class); EdmType type = EasyMock.createMock(EdmType.class); EasyMock.expect(type.getKind()).andStubReturn(EdmTypeKind.SIMPLE); EasyMock.replay(type); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); EasyMock.expect(mapping.getInternalName()).andStubReturn("price"); EasyMock.replay(mapping); try { EasyMock.expect(edmProperty.getName()).andStubReturn("price"); EasyMock.expect(edmProperty.getType()).andStubReturn(type); EasyMock.expect(edmProperty.getMapping()).andStubReturn(mapping); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(edmProperty); return edmProperty; } public static EdmNavigationProperty mockNavigationProperty() { EdmNavigationProperty navigationProperty = EasyMock .createMock(EdmNavigationProperty.class); EdmMapping mapping = EasyMock.createMock(EdmMapping.class); EasyMock.expect(mapping.getInternalName()).andStubReturn( "salesOrderLineItems"); EasyMock.replay(mapping); try { 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"); } catch (EdmException e) { fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); } EasyMock.replay(navigationProperty); return navigationProperty; } }