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 2014/07/07 07:56:52 UTC
[3/6] git commit: [OLINGO-317] Added collection type handling
[OLINGO-317] Added collection type handling
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/da8cf726
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/da8cf726
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/da8cf726
Branch: refs/heads/master
Commit: da8cf726bfb9eb63e8198b40ea600121e6d2697e
Parents: 71bdaed
Author: Michael Bolz <mi...@sap.com>
Authored: Wed Jul 2 09:28:26 2014 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Wed Jul 2 12:39:47 2014 +0200
----------------------------------------------------------------------
.../serializer/json/ODataJsonSerializer.java | 24 +--
.../json/ODataJsonSerializerTest.java | 180 +++++++++++++++++--
.../tecsvc/processor/SampleJsonProcessor.java | 145 ++++++++++-----
3 files changed, 283 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/da8cf726/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index c3fe720..1c61cc0 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -135,18 +135,16 @@ public class ODataJsonSerializer implements ODataSerializer {
json.writeNull();
}
} else {
- if (edmProperty.isPrimitive()) {
- handlePrimitive(edmProperty, property, json);
- } else if (edmProperty.isCollection()) {
+ if (edmProperty.isCollection()) {
handleCollection(edmProperty, property, json);
+ } else if (edmProperty.isPrimitive()) {
+ handlePrimitive(edmProperty, property, json);
+ } else if (property.isLinkedComplex()) {
+ writeComplexValue(edmProperty, property.asLinkedComplex().getValue(), json);
+ } else if(property.isComplex()) {
+ writeComplexValue(edmProperty, property.asComplex(), json);
} else {
- if (property.isLinkedComplex()) {
- writeComplexValue(edmProperty, property.asLinkedComplex().getValue(), json);
- } else if(property.isComplex()) {
- writeComplexValue(edmProperty, property.asComplex(), json);
- } else {
- throw new ODataRuntimeException("Property type not yet supported!");
- }
+ throw new ODataRuntimeException("Property type not yet supported!");
}
}
}
@@ -167,6 +165,9 @@ public class ODataJsonSerializer implements ODataSerializer {
case COLLECTION_LINKED_COMPLEX:
writeComplexValue(edmProperty, ((LinkedComplexValue) value).getValue(), json);
break;
+ case COLLECTION_COMPLEX:
+ writeComplexValue(edmProperty, property.asComplex(), json);
+ break;
default:
throw new ODataRuntimeException("Property type not yet supported!");
}
@@ -237,7 +238,8 @@ public class ODataJsonSerializer implements ODataSerializer {
JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
json.writeStartObject();
if (contextURL != null) {
- json.writeStringField(Constants.JSON_CONTEXT, contextURL.getURI().toASCIIString());
+ String context = "$metadata#" + edmEntitySet.getName();
+ json.writeStringField(Constants.JSON_CONTEXT, context);
}
if (entitySet.getCount() != null) {
json.writeNumberField("@odata.count", entitySet.getCount());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/da8cf726/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index e7563b0..b791cc6 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -43,6 +43,7 @@ public class ODataJsonSerializerTest {
private static final String ETAllPrim = "ETAllPrim";
private static final String ETCompAllPrim = "ETCompAllPrim";
+ private static final String ETCollAllPrim = "ETCollAllPrim";
private static final String CTAllPrim = "CTAllPrim";
private static final String CTAllPrim_Type = "com.sap.odata.test1.CTAllPrim";
@@ -50,18 +51,31 @@ public class ODataJsonSerializerTest {
String getName();
String getTypeName();
EdmPrimitiveTypeKind getType();
+ boolean isCollection();
}
public static class TecComplexProperty implements TechProperty {
final String typeName;
final String name;
- final List<EdmProperty> properties;
+ final List<EdmProperty> properties = new ArrayList<EdmProperty>();
+ boolean collection = false;
- public TecComplexProperty(String typeName, String name, List<EdmProperty> propertyNames) {
+ public TecComplexProperty(String typeName, String name) {
this.typeName = typeName;
this.name = name;
- this.properties = new ArrayList<EdmProperty>(propertyNames);
+ }
+ TechProperty addProperties(List<EdmProperty> properties) {
+ this.properties.addAll(properties);
+ return this;
+ }
+ TechProperty asCollection() {
+ this.collection = true;
+ return this;
+ }
+ @Override
+ public boolean isCollection() {
+ return collection;
}
@Override
public String getName() {
@@ -96,25 +110,44 @@ public class ODataJsonSerializerTest {
DateTimeOffset("PropertyDateTimeOffset", EdmPrimitiveTypeKind.DateTimeOffset),
Duration("PropertyDuration", EdmPrimitiveTypeKind.Duration),
Guid("PropertyGuid", EdmPrimitiveTypeKind.Guid),
- TimeOfDay("PropertyTimeOfDay", EdmPrimitiveTypeKind.TimeOfDay);
+ TimeOfDay("PropertyTimeOfDay", EdmPrimitiveTypeKind.TimeOfDay),
// <NavigationProperty Name="NavPropertyETTwoPrimOne" Type="test1.ETTwoPrim" Nullable="false"/>
// NavETTwoPrimOne = "NavPropertyETTwoPrimOne", EdmPrimitiveTypeKind.),
// <NavigationProperty Name="NavPropertyETTwoPrimMany" Type="Collection(test1.ETTwoPrim)" Nullable="false"/>
// NavETTwoPrimMany("NavPropertyETTwoPrimMany", EdmCom.);
+ Collection_Int16("CollPropertyInt16", EdmPrimitiveTypeKind.Int16, true),
+ Collection_String("CollPropertyString", EdmPrimitiveTypeKind.String, true),
+ Collection_Boolean("CollPropertyBoolean", EdmPrimitiveTypeKind.Boolean, true),
+ Collection_Byte("CollPropertyByte", EdmPrimitiveTypeKind.Byte, true),
+ Collection_SByte("CollPropertySByte", EdmPrimitiveTypeKind.SByte, true),
+ Collection_Int32("CollPropertyInt32", EdmPrimitiveTypeKind.Int32, true),
+ Collection_Int64("CollPropertyInt64", EdmPrimitiveTypeKind.Int64, true),
+ Collection_Single("CollPropertySingle", EdmPrimitiveTypeKind.Single, true),
+ Collection_Double("CollPropertyDouble", EdmPrimitiveTypeKind.Double, true),
+ Collection_Decimal("CollPropertyDecimal", EdmPrimitiveTypeKind.Decimal, true),
+ Collection_Binary("CollPropertyBinary", EdmPrimitiveTypeKind.Binary, true),
+ Collection_Date("CollPropertyDate", EdmPrimitiveTypeKind.Date, true),
+ Collection_DateTimeOffset("CollPropertyDateTimeOffset", EdmPrimitiveTypeKind.DateTimeOffset, true),
+ Collection_Duration("CollPropertyDuration", EdmPrimitiveTypeKind.Duration, true),
+ Collection_Guid("CollPropertyGuid", EdmPrimitiveTypeKind.Guid, true),
+ Collection_TimeOfDay("CollPropertyTimeOfDay", EdmPrimitiveTypeKind.TimeOfDay, true);
final String name;
final EdmPrimitiveTypeKind type;
+ final boolean isCollection;
TecSimpleProperty(String name, EdmPrimitiveTypeKind type) {
+ this(name, type, false);
+ }
+ TecSimpleProperty(String name, EdmPrimitiveTypeKind type, boolean collection) {
this.name = name;
this.type = type;
+ this.isCollection = collection;
}
-
@Override
public String getTypeName() {
return type.name();
}
-
@Override
public EdmPrimitiveTypeKind getType() {
return type;
@@ -123,12 +156,19 @@ public class ODataJsonSerializerTest {
public String getName() {
return name;
}
+ @Override
+ public boolean isCollection() {
+ return isCollection;
+ }
}
private ContextURL contextUrl;
private EdmEntitySet edmESAllPrim;
+ private EdmEntitySet edmESCompAllPrim;
+ private EdmEntitySet edmESCollAllPrim;
private EdmEntityType edmETAllPrim;
private EdmEntityType edmETCompAllPrim;
+ private EdmEntityType edmETCollAllPrim;
private ODataJsonSerializer serializer = new ODataJsonSerializer();
@@ -136,6 +176,7 @@ public class ODataJsonSerializerTest {
public void prepare() throws Exception {
contextUrl = ContextURL.getInstance(new URI("http://localhost:8080/test.svc"));
+ // entity all primitive
edmETAllPrim = Mockito.mock(EdmEntityType.class);
Mockito.when(edmETAllPrim.getName()).thenReturn(ETAllPrim);
List<EdmProperty> properties = Arrays.asList(
@@ -176,7 +217,7 @@ public class ODataJsonSerializerTest {
Mockito.when(edmETCompAllPrim.getName()).thenReturn(ETCompAllPrim);
List<EdmProperty> capProperties = Arrays.asList(
mockProperty(TecSimpleProperty.Int16, false),
- mockProperty(new TecComplexProperty(CTAllPrim_Type, CTAllPrim, properties), false)
+ mockProperty(new TecComplexProperty(CTAllPrim_Type, CTAllPrim).addProperties(properties), false)
);
List<String> capPropertyNames = new ArrayList<String>();
@@ -185,6 +226,38 @@ public class ODataJsonSerializerTest {
Mockito.when(edmETCompAllPrim.getProperty(property.getName())).thenReturn(property);
}
Mockito.when(edmETCompAllPrim.getPropertyNames()).thenReturn(capPropertyNames);
+
+ // entity type all primitive collections
+ //
+ edmETCollAllPrim = Mockito.mock(EdmEntityType.class);
+ Mockito.when(edmETCollAllPrim.getName()).thenReturn(ETCollAllPrim);
+ List<EdmProperty> allCollProperties = Arrays.asList(
+ mockProperty(TecSimpleProperty.Int16, false),
+ mockProperty(TecSimpleProperty.Collection_String),
+ mockProperty(TecSimpleProperty.Collection_Boolean),
+ mockProperty(TecSimpleProperty.Collection_Byte),
+ mockProperty(TecSimpleProperty.Collection_SByte),
+ mockProperty(TecSimpleProperty.Collection_Int32),
+ mockProperty(TecSimpleProperty.Collection_Int64),
+ mockProperty(TecSimpleProperty.Collection_Single),
+ mockProperty(TecSimpleProperty.Collection_Double),
+ mockProperty(TecSimpleProperty.Collection_Decimal),
+ mockProperty(TecSimpleProperty.Collection_Binary),
+ mockProperty(TecSimpleProperty.Collection_Date),
+ mockProperty(TecSimpleProperty.Collection_DateTimeOffset),
+ mockProperty(TecSimpleProperty.Collection_Duration),
+ mockProperty(TecSimpleProperty.Collection_Guid),
+ mockProperty(TecSimpleProperty.Collection_TimeOfDay)
+ );
+ List<String> etCollAllPrimPropertyNames = new ArrayList<String>();
+
+ for (EdmProperty property : allCollProperties) {
+ etCollAllPrimPropertyNames.add(property.getName());
+ Mockito.when(edmETCollAllPrim.getProperty(property.getName())).thenReturn(property);
+ }
+ Mockito.when(edmETCollAllPrim.getPropertyNames()).thenReturn(etCollAllPrimPropertyNames);
+
+ // Entity Set all primitive collection
}
private EdmProperty mockProperty(TechProperty name) {
@@ -217,6 +290,7 @@ public class ODataJsonSerializerTest {
Mockito.when(edmElement.getScale()).thenReturn(10);
Mockito.when(edmElement.getType()).thenReturn(EdmPrimitiveTypeFactory.getInstance(tecProperty.getType()));
}
+ Mockito.when(edmElement.isCollection()).thenReturn(tecProperty.isCollection());
Mockito.when(edmElement.isNullable()).thenReturn(nullable);
return edmElement;
}
@@ -225,8 +299,16 @@ public class ODataJsonSerializerTest {
return new PropertyImpl(property.getTypeName(), property.getName(), vType, value);
}
- private PropertyImpl createProperty(String type, TecSimpleProperty property, ValueType vType, Object value) {
- return new PropertyImpl(type, property.name, vType, value);
+ private PropertyImpl createProperty(String type, TecSimpleProperty property, ValueType vType, Object ... value) {
+ final Object propValue;
+ if(value == null || value.length ==0) {
+ propValue = null;
+ } else if(property.isCollection()) {
+ propValue = Arrays.asList(value);
+ } else {
+ propValue = value[0];
+ }
+ return new PropertyImpl(type, property.name, vType, propValue);
}
@Test
@@ -257,7 +339,6 @@ public class ODataJsonSerializerTest {
Assert.assertEquals(expectedResult, resultString);
}
-
@Test
public void entitySetETAllPrim() throws Exception {
EdmEntitySet edmEntitySet = edmESAllPrim;
@@ -288,13 +369,41 @@ public class ODataJsonSerializerTest {
}
@Test
+ public void entityCollAllPrim() throws Exception {
+ Entity entity = createETCollAllPrim(4711);
+
+ InputStream result = serializer.entity(edmETCollAllPrim, entity, contextUrl);
+ String resultString = streamToString(result);
+ String expectedResult = "{" +
+ "\"@odata.context\":\"http://localhost:8080/test.svc\"," +
+ "\"PropertyInt16\":4711," +
+ "\"CollPropertyString\":[\"StringValue_1\",\"StringValue_2\"]," +
+ "\"CollPropertyBoolean\":[true,false]," +
+ "\"CollPropertyByte\":[19,42]," +
+ "\"CollPropertySByte\":[1,2]," +
+ "\"CollPropertyInt32\":[2147483647,-2147483648]," +
+ "\"CollPropertyInt64\":[9223372036854775807,-9223372036854775808]," +
+ "\"CollPropertySingle\":[47.11,11.47]," +
+ "\"CollPropertyDouble\":[4.711,711.4]," +
+ "\"CollPropertyDecimal\":[4711.1174,1174.4711]," +
+ "\"CollPropertyBinary\":[\"BAcBAQ==\",\"dGVzdA==\"]," +
+ "\"CollPropertyDate\":[\"2014-03-19\",\"2014-07-02\"]," +
+ "\"CollPropertyDateTimeOffset\":[\"2014-03-19T10:12:00+01:00\",\"2014-07-02T13:30:00+02:00\"]," +
+ "\"CollPropertyDuration\":[\"P16148383DT8H0S\",\"P16253479DT4H0S\"]," +
+ "\"CollPropertyGuid\":[\"0000aaaa-00bb-00cc-00dd-000000ffffff\",\"0000ffff-00dd-00cc-00bb-000000aaaaaa\"]," +
+ "\"CollPropertyTimeOfDay\":[\"10:12:00\",\"13:30:00\"]" +
+ "}";
+ Assert.assertEquals(expectedResult, resultString);
+ }
+
+ @Test
public void entityETCompAllPrim() throws Exception {
Entity complexCtAllPrim = createETAllPrim();
Entity entity = new EntityImpl();
entity.addProperty(new PropertyImpl("Edm.Int16", TecSimpleProperty.Int16.name, ValueType.PRIMITIVE, 4711));
entity.addProperty(createProperty(
- new TecComplexProperty(CTAllPrim_Type, CTAllPrim, Collections.<EdmProperty>emptyList()),
+ new TecComplexProperty(CTAllPrim_Type, CTAllPrim),
ValueType.COMPLEX, complexCtAllPrim.getProperties()));
InputStream result = serializer.entity(edmETCompAllPrim, entity, contextUrl);
@@ -323,10 +432,59 @@ public class ODataJsonSerializerTest {
Assert.assertEquals(expectedResult, resultString);
}
+
private Entity createETAllPrim() {
return createETAllPrim(4711);
}
+ private Entity createETCollAllPrim(int id) {
+ Entity entity = new EntityImpl();
+ Calendar date = Calendar.getInstance();
+ date.set(2014, Calendar.MARCH, 19, 10, 12, 0);
+ date.set(Calendar.MILLISECOND, 0);
+ Calendar date2 = Calendar.getInstance();
+ date2.set(2014, Calendar.JULY, 2, 13, 30, 0);
+ date2.set(Calendar.MILLISECOND, 0);
+ //
+ entity.addProperty(createProperty("Edm.Int16", TecSimpleProperty.Int16, ValueType.PRIMITIVE, id));
+ //
+ entity.addProperty(createProperty("Collection(Edm.Int16)", TecSimpleProperty.Collection_Int16,
+ ValueType.COLLECTION_PRIMITIVE, id));
+ entity.addProperty(createProperty("Collection(Edm.String)", TecSimpleProperty.Collection_String,
+ ValueType.COLLECTION_PRIMITIVE, "StringValue_1", "StringValue_2"));
+ entity.addProperty(createProperty("Collection(Edm.Boolean)", TecSimpleProperty.Collection_Boolean,
+ ValueType.COLLECTION_PRIMITIVE, Boolean.TRUE, Boolean.FALSE));
+ entity.addProperty(createProperty("Collection(Edm.Byte)", TecSimpleProperty.Collection_Byte,
+ ValueType.COLLECTION_PRIMITIVE, Byte.valueOf("19"), Byte.valueOf("42")));
+ entity.addProperty(createProperty("Collection(Edm.SByte)", TecSimpleProperty.Collection_SByte,
+ ValueType.COLLECTION_PRIMITIVE, Short.valueOf("1"), Short.valueOf("2")));
+ entity.addProperty(createProperty("Collection(Edm.Int32)", TecSimpleProperty.Collection_Int32,
+ ValueType.COLLECTION_PRIMITIVE, Integer.MAX_VALUE, Integer.MIN_VALUE));
+ entity.addProperty(createProperty("Collection(Edm.Int64)", TecSimpleProperty.Collection_Int64,
+ ValueType.COLLECTION_PRIMITIVE, Long.MAX_VALUE, Long.MIN_VALUE));
+ entity.addProperty(createProperty("Collection(Edm.Single)", TecSimpleProperty.Collection_Single,
+ ValueType.COLLECTION_PRIMITIVE, 47.11, 11.47));
+ entity.addProperty(createProperty("Collection(Edm.Double)", TecSimpleProperty.Collection_Double,
+ ValueType.COLLECTION_PRIMITIVE, 4.711, 711.4));
+ entity.addProperty(createProperty("Collection(Edm.Decimal)", TecSimpleProperty.Collection_Decimal,
+ ValueType.COLLECTION_PRIMITIVE, 4711.1174, 1174.4711));
+ entity.addProperty(createProperty("Collection(Edm.Binary)", TecSimpleProperty.Collection_Binary,
+ ValueType.COLLECTION_PRIMITIVE, new byte[]{0x04, 0x07, 0x01, 0x01}, "test".getBytes()));
+ entity.addProperty(createProperty("Collection(Edm.Date)", TecSimpleProperty.Collection_Date,
+ ValueType.COLLECTION_PRIMITIVE, date, date2));
+ entity.addProperty(createProperty("Collection(Edm.DateTimeOffset)", TecSimpleProperty.Collection_DateTimeOffset,
+ ValueType.COLLECTION_PRIMITIVE, date.getTime(), date2.getTime()));
+ entity.addProperty(createProperty("Collection(Edm.Duration)", TecSimpleProperty.Collection_Duration,
+ ValueType.COLLECTION_PRIMITIVE, date.getTimeInMillis(), date2.getTimeInMillis()));
+ entity.addProperty(createProperty("Collection(Edm.Guid)", TecSimpleProperty.Collection_Guid,
+ ValueType.COLLECTION_PRIMITIVE,
+ UUID.fromString("AAAA-BB-CC-DD-FFFFFF"),
+ UUID.fromString("FFFF-DD-CC-BB-AAAAAA")));
+ entity.addProperty(createProperty("Collection(Edm.TimeOfDay)", TecSimpleProperty.Collection_TimeOfDay,
+ ValueType.COLLECTION_PRIMITIVE, date, date2));
+ return entity;
+ }
+
private Entity createETAllPrim(int id) {
Entity entity = new EntityImpl();
Calendar date = Calendar.getInstance();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/da8cf726/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/SampleJsonProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/SampleJsonProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/SampleJsonProcessor.java
index cf40489..bfdede8 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/SampleJsonProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/SampleJsonProcessor.java
@@ -19,9 +19,7 @@
package org.apache.olingo.server.tecsvc.processor;
import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.Entity;
@@ -70,9 +68,9 @@ public class SampleJsonProcessor implements EntitySetProcessor, EntityProcessor
time = System.nanoTime();
ODataSerializer serializer = odata.createSerializer(ODataFormat.JSON);
EdmEntitySet edmEntitySet = getEntitySet(uriInfo);
- EntitySet entitySet = createEntitySet(edmEntitySet.getEntityType());
- response.setContent(serializer.entitySet(edmEntitySet, entitySet,
- getContextUrl(request, edmEntitySet.getEntityType())));
+ ContextURL contextUrl = getContextUrl(request, edmEntitySet.getEntityType());
+ EntitySet entitySet = createEntitySet(edmEntitySet.getEntityType(), contextUrl.getURI().toASCIIString());
+ response.setContent(serializer.entitySet(edmEntitySet, entitySet, contextUrl));
LOG.info("Finished in " + (System.nanoTime() - time) / 1000 + " microseconds");
response.setStatusCode(HttpStatusCode.OK.getStatusCode());
@@ -106,42 +104,67 @@ public class SampleJsonProcessor implements EntitySetProcessor, EntityProcessor
}
public EdmEntitySet getEntitySet(UriInfo uriInfo) {
- List<UriResource> resourcePaths = uriInfo.getUriResourceParts();
- if(resourcePaths.isEmpty()) {
- throw new RuntimeException("Invalid resource path.");
- }
- String entitySetName = resourcePaths.get(resourcePaths.size()-1).toString();
- return edm.getEntityContainer(new FullQualifiedName("com.sap.odata.test1", "Container"))
- .getEntitySet(entitySetName);
+ List<UriResource> resourcePaths = uriInfo.getUriResourceParts();
+ if(resourcePaths.isEmpty()) {
+ throw new RuntimeException("Invalid resource path.");
}
+ String entitySetName = resourcePaths.get(resourcePaths.size()-1).toString();
+ return edm.getEntityContainer(new FullQualifiedName("com.sap.odata.test1", "Container"))
+ .getEntitySet(entitySetName);
+ }
- protected Entity createEntity(EdmEntityType entityType) {
- boolean complex = (entityType.getName().contains("Comp"));
- return createEntity(complex);
+ protected Entity createEntity(EdmEntityType entityType) {
+ boolean complex = (entityType.getName().contains("Comp"));
+ if(entityType.getName().contains("Coll")) {
+ return createEntityWithCollection(complex);
}
+ return createEntity(complex);
+ }
+
+ protected Entity createEntity(boolean complex) {
+ Entity entity = new EntityImpl();
+ Property property = new PropertyImpl();
+ property.setName("PropertyString");
+ property.setValue(ValueType.PRIMITIVE, "dummyValue");
+ entity.getProperties().add(property);
+ Property propertyInt = new PropertyImpl();
+ propertyInt.setName("PropertyInt16");
+ propertyInt.setValue(ValueType.PRIMITIVE, 42);
+ entity.getProperties().add(propertyInt);
+ Property propertyGuid = new PropertyImpl();
+ propertyGuid.setName("PropertyGuid");
+ propertyGuid.setValue(ValueType.PRIMITIVE, UUID.randomUUID());
+ entity.getProperties().add(propertyGuid);
+
+ if(complex) {
+ entity.addProperty(createComplexProperty());
+ }
+
+ return entity;
+ }
+
+ protected Entity createEntityWithCollection(boolean complex) {
+ Entity entity = new EntityImpl();
+ Property propertyInt = new PropertyImpl();
+ propertyInt.setName("PropertyInt16");
+ propertyInt.setValue(ValueType.PRIMITIVE, 42);
+ Property property = new PropertyImpl();
+ property.setName("CollPropertyString");
+ property.setValue(ValueType.COLLECTION_PRIMITIVE, Arrays.asList("dummyValue", "dummyValue_2"));
+ entity.getProperties().add(property);
+ entity.getProperties().add(propertyInt);
+ Property propertyGuid = new PropertyImpl();
+ propertyGuid.setName("CollPropertyGuid");
+ propertyGuid.setValue(ValueType.COLLECTION_PRIMITIVE, Arrays.asList(UUID.randomUUID(), UUID.randomUUID()));
+ entity.getProperties().add(propertyGuid);
- protected Entity createEntity(boolean complex) {
- Entity entity = new EntityImpl();
- Property property = new PropertyImpl();
- property.setName("PropertyString");
- property.setValue(ValueType.PRIMITIVE, "dummyValue");
- entity.getProperties().add(property);
- Property propertyInt = new PropertyImpl();
- propertyInt.setName("PropertyInt16");
- propertyInt.setValue(ValueType.PRIMITIVE, 42);
- entity.getProperties().add(propertyInt);
- Property propertyGuid = new PropertyImpl();
- propertyGuid.setName("PropertyGuid");
- propertyGuid.setValue(ValueType.PRIMITIVE, UUID.randomUUID());
- entity.getProperties().add(propertyGuid);
-
- if(complex) {
- entity.addProperty(createComplexProperty());
- }
-
- return entity;
+ if(complex) {
+ entity.addProperty(createCollectionOfComplexProperty());
}
+ return entity;
+ }
+
protected Property createComplexProperty() {
List<Property> properties = new ArrayList<Property>();
Property property = new PropertyImpl();
@@ -161,14 +184,48 @@ public class SampleJsonProcessor implements EntitySetProcessor, EntityProcessor
properties);
}
+ protected Property createCollectionOfComplexProperty() {
+ List<Property> properties = new ArrayList<Property>();
+ Property property = new PropertyImpl();
+ property.setName("PropertyString");
+ property.setValue(ValueType.PRIMITIVE, "dummyValue");
+ properties.add(property);
+ Property propertyInt = new PropertyImpl();
+ propertyInt.setName("PropertyInt16");
+ propertyInt.setValue(ValueType.PRIMITIVE, 42);
+ properties.add(propertyInt);
+ Property propertyGuid = new PropertyImpl();
+ propertyGuid.setName("PropertyGuid");
+ propertyGuid.setValue(ValueType.PRIMITIVE, UUID.randomUUID());
+ properties.add(propertyGuid);
+
+ List<Property> properties2 = new ArrayList<Property>();
+ Property property2 = new PropertyImpl();
+ property2.setName("PropertyString");
+ property2.setValue(ValueType.PRIMITIVE, "dummyValue2");
+ properties2.add(property2);
+ Property property2Int = new PropertyImpl();
+ property2Int.setName("PropertyInt16");
+ property2Int.setValue(ValueType.PRIMITIVE, 44);
+ properties2.add(property2Int);
+ Property property2Guid = new PropertyImpl();
+ property2Guid.setName("PropertyGuid");
+ property2Guid.setValue(ValueType.PRIMITIVE, UUID.randomUUID());
+ properties2.add(property2Guid);
+
+ return new PropertyImpl("com.sap.odata.test1.ETCompAllPrim", "PropertyComplex", ValueType.COMPLEX,
+ Arrays.asList(properties, properties2));
+ }
+
- protected EntitySet createEntitySet(EdmEntityType edmEntityType) {
- EntitySet entitySet = new EntitySetImpl();
- entitySet.setCount(4242);
- entitySet.setNext(URI.create("nextLinkURI"));
- for (int i = 0; i < 1000; i++) {
- entitySet.getEntities().add(createEntity(edmEntityType));
- }
- return entitySet;
+ protected EntitySet createEntitySet(EdmEntityType edmEntityType, String baseUri) {
+ EntitySet entitySet = new EntitySetImpl();
+ int count = (int) ((Math.random() * 50) + 1);
+ entitySet.setCount(count);
+ entitySet.setNext(URI.create(baseUri + "nextLink"));
+ for (int i = 0; i < count; i++) {
+ entitySet.getEntities().add(createEntity(edmEntityType));
}
+ return entitySet;
}
+}