/******************************************************************************* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. ******************************************************************************/ package org.apache.olingo.odata2.jpa.processor.core.mock.data; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.UUID; import org.apache.olingo.odata2.api.ep.entry.EntryMetadata; import org.apache.olingo.odata2.api.ep.entry.ODataEntry; import org.apache.olingo.odata2.api.ep.feed.ODataFeed; import org.apache.olingo.odata2.jpa.processor.core.mock.data.JPATypeMock.JPARelatedTypeMock; import org.apache.olingo.odata2.jpa.processor.core.mock.data.JPATypeMock.JPATypeEmbeddableMock; import org.apache.olingo.odata2.jpa.processor.core.mock.data.JPATypeMock.JPATypeEmbeddableMock2; import org.easymock.EasyMock; public class ODataEntryMockUtil { public static final int VALUE_MINT = 20; public static Calendar VALUE_DATE_TIME = null; public static byte[] VALUE_BLOB = null; public static final String VALUE_CLOB = "ABC"; public static final String VALUE_C = "D"; public static final String VALUE_CARRAY = "EFG"; public static final String VALUE_CHAR = "I"; public static final String VALUE_CHARARRAY = "LMN"; public static final String VALUE_MSTRING = "Mock"; public static final long VALUE_MLONG = 1234567890L; public static final double VALUE_MDOUBLE = 20.12; public static final byte VALUE_MBYTE = 0XA; public static final byte[] VALUE_MBYTEARRAY = new byte[] { 0XA, 0XB }; public static final float VALUE_MFLOAT = 2.00F; public static final UUID VALUE_UUID = UUID.fromString("38400000-8cf0-11bd-b23e-10b96e4ef00d"); public static final short VALUE_SHORT = 2; public static final JPATypeMock.JPATypeMockEnum VALUE_ENUM = JPATypeMock.JPATypeMockEnum.VALUE; public static ODataEntry mockODataEntry(final String entityName) { ODataEntry oDataEntry = EasyMock.createMock(ODataEntry.class); EasyMock.expect(oDataEntry.getProperties()).andReturn(mockODataEntryProperties(entityName)).anyTimes(); enhanceMockODataEntry(oDataEntry, false, new ArrayList<String>()); EasyMock.replay(oDataEntry); return oDataEntry; } public static ODataEntry mockODataEntryWithComplexType(final String entityName) { ODataEntry oDataEntry = EasyMock.createMock(ODataEntry.class); EasyMock.expect(oDataEntry.getProperties()).andReturn(mockODataEntryPropertiesWithComplexType(entityName)) .anyTimes(); enhanceMockODataEntry(oDataEntry, false, new ArrayList<String>()); EasyMock.replay(oDataEntry); return oDataEntry; } public static Map<String, Object> mockODataEntryProperties(final String entityName) { Map<String, Object> propertyMap = new HashMap<String, Object>(); if (entityName.equals(JPATypeMock.ENTITY_NAME)) { propertyMap.put(JPATypeMock.PROPERTY_NAME_MINT, VALUE_MINT); propertyMap.put(JPATypeMock.PROPERTY_NAME_ENUM, "VALUE"); VALUE_DATE_TIME = Calendar.getInstance(TimeZone.getDefault()); VALUE_DATE_TIME.set(2013, 1, 1, 1, 1, 1); propertyMap.put(JPATypeMock.PROPERTY_NAME_MDATETIME, VALUE_DATE_TIME); VALUE_BLOB = VALUE_MBYTEARRAY; propertyMap.put(JPATypeMock.PROPERTY_NAME_MBLOB, VALUE_BLOB); propertyMap.put(JPATypeMock.PROPERTY_NAME_CLOB, VALUE_CLOB); propertyMap.put(JPATypeMock.PROPERTY_NAME_MC, VALUE_C); propertyMap.put(JPATypeMock.PROPERTY_NAME_MCARRAY, VALUE_CARRAY); propertyMap.put(JPATypeMock.PROPERTY_NAME_MCHAR, VALUE_CHAR); propertyMap.put(JPATypeMock.PROPERTY_NAME_MCHARARRAY, VALUE_CHARARRAY); propertyMap.put(JPATypeMock.PROPERTY_NAME_MSTRING, VALUE_MSTRING); } else if (entityName.equals(JPARelatedTypeMock.ENTITY_NAME)) { propertyMap.put(JPARelatedTypeMock.PROPERTY_NAME_MLONG, VALUE_MLONG); propertyMap.put(JPARelatedTypeMock.PROPERTY_NAME_MDOUBLE, VALUE_MDOUBLE); propertyMap.put(JPARelatedTypeMock.PROPERTY_NAME_MBYTE, VALUE_MBYTE); propertyMap.put(JPARelatedTypeMock.PROPERTY_NAME_MBYTEARRAY, VALUE_MBYTEARRAY); } else if (entityName.equals(JPATypeEmbeddableMock.ENTITY_NAME)) { propertyMap.put(JPATypeEmbeddableMock.PROPERTY_NAME_MSHORT, VALUE_SHORT); propertyMap.put(JPATypeEmbeddableMock.PROPERTY_NAME_MEMBEDDABLE, mockODataEntryProperties(JPATypeEmbeddableMock2.ENTITY_NAME)); } else if (entityName.equals(JPATypeEmbeddableMock2.ENTITY_NAME)) { propertyMap.put(JPATypeEmbeddableMock2.PROPERTY_NAME_MFLOAT, VALUE_MFLOAT); propertyMap.put(JPATypeEmbeddableMock2.PROPERTY_NAME_MUUID, VALUE_UUID); } return propertyMap; } public static Map<String, Object> mockODataEntryPropertiesWithComplexType(final String entityName) { Map<String, Object> propertyMap = mockODataEntryProperties(entityName); propertyMap .put(JPATypeMock.PROPERTY_NAME_MCOMPLEXTYPE, mockODataEntryProperties(JPATypeEmbeddableMock.ENTITY_NAME)); return propertyMap; } public static Map<String, Object> mockODataEntryPropertiesWithInline(final String entityName) { Map<String, Object> propertyMap = mockODataEntryProperties(entityName); List<ODataEntry> relatedEntries = new ArrayList<ODataEntry>(); relatedEntries.add(mockODataEntry(JPARelatedTypeMock.ENTITY_NAME)); ODataFeed feed = EasyMock.createMock(ODataFeed.class); EasyMock.expect(feed.getEntries()).andReturn(relatedEntries); EasyMock.replay(feed); propertyMap.put(JPATypeMock.NAVIGATION_PROPERTY_X, feed); return propertyMap; } public static ODataEntry mockODataEntryWithInline(final String entityName) { ODataEntry oDataEntry = EasyMock.createMock(ODataEntry.class); EasyMock.expect(oDataEntry.getProperties()).andReturn(mockODataEntryPropertiesWithInline(entityName)).anyTimes(); if (entityName.equals(JPATypeMock.ENTITY_NAME)) { List<String> links = new ArrayList<String>(); links.add(JPATypeMock.ENTITY_NAME + "(" + ODataEntryMockUtil.VALUE_MINT + ")/" + JPATypeMock.NAVIGATION_PROPERTY_X); enhanceMockODataEntry(oDataEntry, true, links); } else { enhanceMockODataEntry(oDataEntry, false, new ArrayList<String>()); } EasyMock.replay(oDataEntry); return oDataEntry; } private static void enhanceMockODataEntry(final ODataEntry oDataEntry, final boolean hasInline, final List<String> associationURIs) { EasyMock.expect(oDataEntry.containsInlineEntry()).andReturn(hasInline).anyTimes(); EntryMetadata entryMetadata = EasyMock.createMock(EntryMetadata.class); if (hasInline) { EasyMock.expect(entryMetadata.getAssociationUris(JPATypeMock.NAVIGATION_PROPERTY_X)).andReturn(associationURIs) .anyTimes(); EasyMock.expect(entryMetadata.getAssociationUris(JPATypeMock.NAVIGATION_PROPERTY_XS)).andReturn( new ArrayList<String>()) .anyTimes(); } else { EasyMock.expect(entryMetadata.getAssociationUris(EasyMock.isA(String.class))).andReturn(associationURIs) .anyTimes(); } EasyMock.replay(entryMetadata); EasyMock.expect(oDataEntry.getMetadata()).andReturn(entryMetadata).anyTimes(); } }