You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2015/07/15 04:36:52 UTC
[3/8] olingo-odata4 git commit: OLINGO-640: Adding support for
ATOM+XML Serializer and De-Serializer
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
index 759516c..ce5daf3 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
@@ -19,6 +19,7 @@
package org.apache.olingo.server.tecsvc.data;
import java.math.BigDecimal;
+import java.net.URI;
import java.nio.charset.Charset;
import java.sql.Timestamp;
import java.util.ArrayList;
@@ -37,6 +38,10 @@ import org.apache.olingo.commons.api.data.EntityCollection;
import org.apache.olingo.commons.api.data.Link;
import org.apache.olingo.commons.api.data.Property;
import org.apache.olingo.commons.api.data.ValueType;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
+import org.apache.olingo.server.tecsvc.provider.EntityTypeProvider;
public class DataCreator {
@@ -44,28 +49,28 @@ public class DataCreator {
private final Map<String, EntityCollection> data;
- public DataCreator() {
+ public DataCreator(Edm edm) {
data = new HashMap<String, EntityCollection>();
- data.put("ESTwoPrim", createESTwoPrim());
- data.put("ESAllPrim", createESAllPrim());
- data.put("ESCompAllPrim", createESCompAllPrim());
- data.put("ESCollAllPrim", createESCollAllPrim());
- data.put("ESMixPrimCollComp", createESMixPrimCollComp());
- data.put("ESAllKey", createESAllKey());
- data.put("ESCompComp", createESCompComp());
- data.put("ESMedia", createESMedia());
- data.put("ESKeyNav", createESKeyNav());
- data.put("ESTwoKeyNav", createESTwoKeyNav());
- data.put("ESCompCollComp", createESCompCollComp());
- data.put("ESServerSidePaging", createESServerSidePaging());
- data.put("ESTwoKeyTwoPrim", createESTwoKeyTwoPrim());
- data.put("ESAllNullable", createESAllNullable());
- data.put("ESTwoBase", createESTwoBase());
- data.put("ESBaseTwoKeyNav", createESBaseTwoKeyNav());
- data.put("ESCompCollAllPrim", createESCompCollAllPrim());
- data.put("ESFourKeyAlias", createESFourKeyAlias());
- data.put("ESBase", createESBase());
- data.put("ESCompMixPrimCollComp", createESCompMixPrimCollComp());
+ data.put("ESTwoPrim", createESTwoPrim(edm));
+ data.put("ESAllPrim", createESAllPrim(edm));
+ data.put("ESCompAllPrim", createESCompAllPrim(edm));
+ data.put("ESCollAllPrim", createESCollAllPrim(edm));
+ data.put("ESMixPrimCollComp", createESMixPrimCollComp(edm));
+ data.put("ESAllKey", createESAllKey(edm));
+ data.put("ESCompComp", createESCompComp(edm));
+ data.put("ESMedia", createESMedia(edm));
+ data.put("ESKeyNav", createESKeyNav(edm));
+ data.put("ESTwoKeyNav", createESTwoKeyNav(edm));
+ data.put("ESCompCollComp", createESCompCollComp(edm));
+ data.put("ESServerSidePaging", createESServerSidePaging(edm));
+ data.put("ESTwoKeyTwoPrim", createESTwoKeyTwoPrim(edm));
+ data.put("ESAllNullable", createESAllNullable(edm));
+ data.put("ESTwoBase", createESTwoBase(edm));
+ data.put("ESBaseTwoKeyNav", createESBaseTwoKeyNav(edm));
+ data.put("ESCompCollAllPrim", createESCompCollAllPrim(edm));
+ data.put("ESFourKeyAlias", createESFourKeyAlias(edm));
+ data.put("ESBase", createESBase(edm));
+ data.put("ESCompMixPrimCollComp", createESCompMixPrimCollComp(edm));
linkESTwoPrim(data);
linkESAllPrim(data);
@@ -73,13 +78,17 @@ public class DataCreator {
linkESTwoKeyNav(data);
}
- private EntityCollection createESCompMixPrimCollComp() {
+ private EntityCollection createESCompMixPrimCollComp(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(createETCompMixPrimCollComp((short) 1));
entityCollection.getEntities().add(createETCompMixPrimCollComp((short) 2));
entityCollection.getEntities().add(createETCompMixPrimCollComp((short) 3));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETCompMixPrimCollComp);
+ setEntityType(entityCollection, type);
+ createEntityId("ESCompMixPrimCollComp", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -111,7 +120,7 @@ public class DataCreator {
));
}
- private EntityCollection createESBase() {
+ private EntityCollection createESBase(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -129,11 +138,14 @@ public class DataCreator {
.addProperty(createPrimitive("PropertyString", "TEST C"))
.addProperty(createPrimitive("AdditionalPropertyString_5", "TEST E 0815")));
-
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETBase);
+ setEntityType(entityCollection, type);
+ createEntityId("ESBase", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESFourKeyAlias() {
+ private EntityCollection createESFourKeyAlias(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -150,16 +162,22 @@ public class DataCreator {
))
);
-
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETFourKeyAlias);
+ setEntityType(entityCollection, type);
+ createEntityId("ESFourKeyAlias", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESCompCollAllPrim() {
+ private EntityCollection createESCompCollAllPrim(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(createETCompCollAllPrim((short) 5678));
entityCollection.getEntities().add(createETCompCollAllPrim((short) 12326));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETCompCollAllPrim);
+ setEntityType(entityCollection, type);
+ createEntityId("ESCompCollAllPrim", entityCollection, type.getKeyPropertyRefs());
return entityCollection;
}
@@ -244,7 +262,7 @@ public class DataCreator {
));
}
- private EntityCollection createESBaseTwoKeyNav() {
+ private EntityCollection createESBaseTwoKeyNav(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(
createESTwoKeyNavEntity((short) 1, "1")
@@ -261,10 +279,15 @@ public class DataCreator {
entityCollection.getEntities().add(
createESTwoKeyNavEntity((short) 3, "1")
.addProperty(createPrimitive("PropertyDate", getDateTime(2013, 12, 12, 0, 0, 0))));
+
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
+ setEntityType(entityCollection, type);
+ createEntityId("ESBaseTwoKeyNav", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESTwoBase() {
+ private EntityCollection createESTwoBase(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
.addProperty(createPrimitive("PropertyInt16",(short) 111))
@@ -284,10 +307,14 @@ public class DataCreator {
.addProperty(createPrimitive("AdditionalPropertyString_5", "TEST E 0815"))
.addProperty(createPrimitive("AdditionalPropertyString_6", "TEST F 0815")));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETTwoBase);
+ setEntityType(entityCollection, type);
+ createEntityId("ESTwoBase", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESAllNullable() {
+ private EntityCollection createESAllNullable(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(
new Entity()
@@ -374,7 +401,9 @@ public class DataCreator {
getTime(0, 37, 13))
));
-
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETAllNullable);
+ setEntityType(entityCollection, type);
+ createEntityId("ESAllNullable", entityCollection, type.getKeyPropertyRefs());
return entityCollection;
}
@@ -382,11 +411,16 @@ public class DataCreator {
return data;
}
- private EntityCollection createESTwoKeyTwoPrim() {
+ private EntityCollection createESTwoKeyTwoPrim(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(createETTwoKeyTwoPrimEntity((short) 32767, "Test String1"));
entityCollection.getEntities().add(createETTwoKeyTwoPrimEntity((short) -365, "Test String2"));
entityCollection.getEntities().add(createETTwoKeyTwoPrimEntity((short) -32766, "Test String3"));
+
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETTwoKeyTwoPrim);
+ setEntityType(entityCollection, type);
+ createEntityId("ESTwoKeyTwoPrim", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -396,7 +430,7 @@ public class DataCreator {
.addProperty(createPrimitive("PropertyString", propertyString));
}
- private EntityCollection createESServerSidePaging() {
+ private EntityCollection createESServerSidePaging(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
for (short i = 1; i <= 503; i++) {
@@ -405,16 +439,24 @@ public class DataCreator {
.addProperty(createPrimitive("PropertyString", "Number:" + i)));
}
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETServerSidePaging);
+ setEntityType(entityCollection, type);
+ createEntityId("ESServerSidePaging", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESKeyNav() {
+ private EntityCollection createESKeyNav(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(createETKeyNavEntity((short) 1, "I am String Property 1"));
entityCollection.getEntities().add(createETKeyNavEntity((short) 2, "I am String Property 2"));
entityCollection.getEntities().add(createETKeyNavEntity((short) 3, "I am String Property 3"));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
+ setEntityType(entityCollection, type);
+ createEntityId("ESKeyNav", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -453,7 +495,7 @@ public class DataCreator {
createPrimitive("PropertyInt16",(short) 1))));
}
- private EntityCollection createESTwoKeyNav() {
+ private EntityCollection createESTwoKeyNav(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(createESTwoKeyNavEntity((short) 1, "1"));
@@ -461,6 +503,10 @@ public class DataCreator {
entityCollection.getEntities().add(createESTwoKeyNavEntity((short) 2, "1"));
entityCollection.getEntities().add(createESTwoKeyNavEntity((short) 3, "1"));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
+ setEntityType(entityCollection, type);
+ createEntityId("ESTwoKeyNav", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -521,7 +567,7 @@ public class DataCreator {
}
@SuppressWarnings("unchecked")
- private EntityCollection createESCompCollComp() {
+ private EntityCollection createESCompCollComp(Edm edm) {
final EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -552,10 +598,14 @@ public class DataCreator {
createPrimitive("PropertyInt16",(short) 0),
createPrimitive("PropertyString", "13 Test Complex in Complex Property"))))));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETCompCollComp);
+ setEntityType(entityCollection, type);
+ createEntityId("ESCompCollComp", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESTwoPrim() {
+ private EntityCollection createESTwoPrim(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -574,10 +624,19 @@ public class DataCreator {
.addProperty(createPrimitive("PropertyInt16", Short.MAX_VALUE))
.addProperty(createPrimitive("PropertyString", "Test String4")));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETTwoPrim);
+ setEntityType(entityCollection, type);
+ createEntityId("ESTwoPrim", entityCollection, type.getKeyPropertyRefs());
return entityCollection;
}
- private EntityCollection createESAllPrim() {
+ private void setEntityType(EntityCollection entityCollection, EdmEntityType type) {
+ for (Entity entity:entityCollection.getEntities()) {
+ entity.setType(type.getFullQualifiedName().getFullQualifiedNameAsString());
+ }
+ }
+
+ private EntityCollection createESAllPrim(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -636,10 +695,14 @@ public class DataCreator {
.addProperty(createPrimitive("PropertyGuid", UUID.fromString("76543201-23ab-cdef-0123-456789cccddd")))
.addProperty(createPrimitive("PropertyTimeOfDay", getTime(0, 1, 1))));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETAllPrim);
+ setEntityType(entityCollection, type);
+ createEntityId("ESAllPrim", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESCompAllPrim() {
+ private EntityCollection createESCompAllPrim(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
Entity entity = new Entity()
@@ -730,19 +793,27 @@ public class DataCreator {
createPrimitive("PropertyInt64", null),
createPrimitive("PropertySByte", null),
createPrimitive("PropertyTimeOfDay", null)));
- entity.setETag("W/\"-32768\"");
- entityCollection.getEntities().add(entity);
-
+ entity.setETag("W/\"-32768\"");
+ entityCollection.getEntities().add(entity);
+
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETCompAllPrim);
+ setEntityType(entityCollection, type);
+ createEntityId("ESCompAllPrim", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESCollAllPrim() {
+ private EntityCollection createESCollAllPrim(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(createETCollAllPrim((short) 1));
entityCollection.getEntities().add(createETCollAllPrim((short) 2));
entityCollection.getEntities().add(createETCollAllPrim((short) 3));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETCollAllPrim);
+ setEntityType(entityCollection, type);
+ createEntityId("ESCollAllPrim", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -815,7 +886,7 @@ public class DataCreator {
getTime(1, 12, 33)));
}
- private EntityCollection createESMixPrimCollComp() {
+ private EntityCollection createESMixPrimCollComp(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -841,7 +912,7 @@ public class DataCreator {
.addProperty(createColPropertyComp()));
entityCollection.getEntities().add(new Entity()
- .addProperty(createPrimitive("PropertyInt16", 0))
+ .addProperty(createPrimitive("PropertyInt16", (short)0))
.addProperty(createPrimitiveCollection("CollPropertyString",
"Employee1@company.example",
"Employee2@company.example",
@@ -851,6 +922,10 @@ public class DataCreator {
createPrimitive("PropertyString", "TEST C")))
.addProperty(createColPropertyComp()));
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETMixPrimCollComp);
+ setEntityType(entityCollection, type);
+ createEntityId("ESMixPrimCollComp", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -868,7 +943,7 @@ public class DataCreator {
createPrimitive("PropertyString", "TEST 3")));
}
- private EntityCollection createESAllKey() {
+ private EntityCollection createESAllKey(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
entityCollection.getEntities().add(new Entity()
@@ -900,11 +975,15 @@ public class DataCreator {
.addProperty(createPrimitive("PropertyDuration", BigDecimal.valueOf(6)))
.addProperty(createPrimitive("PropertyGuid", GUID))
.addProperty(createPrimitive("PropertyTimeOfDay", getTime(2, 48, 21))));
+
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETAllKey);
+ setEntityType(entityCollection, type);
+ createEntityId("ESAllKey", entityCollection, type.getKeyPropertyRefs());
return entityCollection;
}
- private EntityCollection createESCompComp() {
+ private EntityCollection createESCompComp(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
Entity entity = new Entity();
@@ -923,10 +1002,14 @@ public class DataCreator {
createPrimitive("PropertyString", "String 2"))));
entityCollection.getEntities().add(entity);
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETCompComp);
+ setEntityType(entityCollection, type);
+ createEntityId("ESCompComp", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
- private EntityCollection createESMedia() {
+ private EntityCollection createESMedia(Edm edm) {
EntityCollection entityCollection = new EntityCollection();
Entity entity = new Entity()
@@ -934,6 +1017,7 @@ public class DataCreator {
.addProperty(createPrimitive(DataProvider.MEDIA_PROPERTY_NAME, createImage("darkturquoise")));
entity.setMediaContentType("image/svg+xml");
entity.setMediaETag("W/\"1\"");
+ entity.getMediaEditLinks().add(buildMediaLink("ESMedia", "ESMedia(1)/$value"));
entityCollection.getEntities().add(entity);
entity = new Entity()
@@ -941,6 +1025,7 @@ public class DataCreator {
.addProperty(createPrimitive(DataProvider.MEDIA_PROPERTY_NAME, createImage("royalblue")));
entity.setMediaContentType("image/svg+xml");
entity.setMediaETag("W/\"2\"");
+ entity.getMediaEditLinks().add(buildMediaLink("ESMedia", "ESMedia(2)/$value"));
entityCollection.getEntities().add(entity);
entity = new Entity()
@@ -948,6 +1033,7 @@ public class DataCreator {
.addProperty(createPrimitive(DataProvider.MEDIA_PROPERTY_NAME, createImage("crimson")));
entity.setMediaContentType("image/svg+xml");
entity.setMediaETag("W/\"3\"");
+ entity.getMediaEditLinks().add(buildMediaLink("ESMedia", "ESMedia(3)/$value"));
entityCollection.getEntities().add(entity);
entity = new Entity()
@@ -955,8 +1041,13 @@ public class DataCreator {
.addProperty(createPrimitive(DataProvider.MEDIA_PROPERTY_NAME, createImage("black")));
entity.setMediaContentType("image/svg+xml");
entity.setMediaETag("W/\"4\"");
+ entity.getMediaEditLinks().add(buildMediaLink("ESMedia", "ESMedia(4)/$value"));
entityCollection.getEntities().add(entity);
+ EdmEntityType type = edm.getEntityType(EntityTypeProvider.nameETMedia);
+ setEntityType(entityCollection, type);
+ createEntityId("ESMedia", entityCollection, type.getKeyPropertyRefs());
+
return entityCollection;
}
@@ -1116,12 +1207,22 @@ public class DataCreator {
return timestamp;
}
+ protected static Link buildMediaLink(String title, String href) {
+ Link link = new Link();
+ link.setRel("edit-media");
+ link.setTitle(title);
+ link.setHref(href);
+ return link;
+ }
+
protected static void setLink(final Entity entity, final String navigationPropertyName, final Entity target) {
Link link = entity.getNavigationLink(navigationPropertyName);
if (link == null) {
link = new Link();
+ link.setRel("http://docs.oasis-open.org/odata/ns/related/"+navigationPropertyName);
link.setType(Constants.ENTITY_NAVIGATION_LINK_TYPE);
link.setTitle(navigationPropertyName);
+ link.setHref(target.getId().toASCIIString());
entity.getNavigationLinks().add(link);
}
link.setInlineEntity(target);
@@ -1131,14 +1232,42 @@ public class DataCreator {
Link link = entity.getNavigationLink(navigationPropertyName);
if (link == null) {
link = new Link();
+ link.setRel("http://docs.oasis-open.org/odata/ns/related/"+navigationPropertyName);
link.setType(Constants.ENTITY_SET_NAVIGATION_LINK_TYPE);
link.setTitle(navigationPropertyName);
EntityCollection target = new EntityCollection();
target.getEntities().addAll(Arrays.asList(targets));
link.setInlineEntitySet(target);
+ link.setHref(entity.getId().toASCIIString()+"/"+navigationPropertyName);
entity.getNavigationLinks().add(link);
} else {
link.getInlineEntitySet().getEntities().addAll(Arrays.asList(targets));
}
}
+
+ protected static void createEntityId (String esName, EntityCollection entities, List<EdmKeyPropertyRef> keys) {
+ for (Entity entity:entities.getEntities()) {
+ createEntityId(esName, entity, keys);
+ }
+ }
+ protected static void createEntityId (String esName, Entity entity, List<EdmKeyPropertyRef> keys) {
+ try {
+ if(keys.size() == 1) {
+ entity.setId(URI.create(esName+"("+entity.getProperty(keys.get(0).getName()).asPrimitive()+")"));
+ } else {
+ StringBuilder sb = new StringBuilder();
+ sb.append(esName).append("(");
+ for (int i = 0; i < keys.size(); i++) {
+ if (i != 0) {
+ sb.append(",");
+ }
+ sb.append(keys.get(i)).append("=").append(entity.getProperty(keys.get(i).getName()).asPrimitive());
+ }
+ sb.append(")");
+ entity.setId(URI.create(sb.toString()));
+ }
+ } catch (Exception e) {
+ entity.setId(URI.create("id"));
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
index 79313e6..95cdf9a 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
@@ -63,12 +63,9 @@ public class DataProvider {
private Edm edm;
private OData odata;
- public DataProvider() {
- data = new DataCreator().getData();
- }
-
- public void setEdm(final Edm edm) {
+ public DataProvider(final Edm edm) {
this.edm = edm;
+ data = new DataCreator(edm).getData();
}
public void setOData(final OData odata) {
@@ -153,6 +150,7 @@ public class DataProvider {
}
createProperties(edmEntityType, newEntity.getProperties());
+ DataCreator.createEntityId(edmEntitySet.getName(), newEntity, edmEntityType.getKeyPropertyRefs());
entities.add(newEntity);
return newEntity;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/RequestValidator.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/RequestValidator.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/RequestValidator.java
index fbe21b5..baf2f40 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/RequestValidator.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/RequestValidator.java
@@ -139,11 +139,13 @@ public class RequestValidator {
if (edmProperty.isCollection()) {
final EntityCollection inlineEntitySet = navigationLink.getInlineEntitySet();
- if (!isInsert && inlineEntitySet.getEntities().size() > 0) {
- throw new DataProvider.DataProviderException("Deep update is not allowed", HttpStatusCode.BAD_REQUEST);
- } else {
- for (final Entity entity : navigationLink.getInlineEntitySet().getEntities()) {
- validate(edmBindingTarget, entity);
+ if (inlineEntitySet != null) {
+ if (!isInsert && inlineEntitySet.getEntities().size() > 0) {
+ throw new DataProvider.DataProviderException("Deep update is not allowed", HttpStatusCode.BAD_REQUEST);
+ } else {
+ for (final Entity entity : navigationLink.getInlineEntitySet().getEntities()) {
+ validate(edmBindingTarget, entity);
+ }
}
}
} else {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index cba853d..06f450d 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -513,12 +513,12 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
expandHandler.applyExpandQueryOptions(entitySetSerialization, edmEntitySet, expand);
final CountOption countOption = uriInfo.getCountOption();
+ final String id = request.getRawBaseUri()+edmEntitySet.getName();
// Serialize
final SerializerResult serializerResult = (isReference) ?
serializeReferenceCollection(entitySetSerialization, edmEntitySet, requestedContentType, countOption) :
serializeEntityCollection(entitySetSerialization, edmEntitySet, edmEntityType, requestedContentType,
- expand, select, countOption);
-
+ expand, select, countOption, id);
response.setContent(serializerResult.getContent());
response.setStatusCode(HttpStatusCode.OK.getStatusCode());
response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString());
@@ -530,7 +530,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
private SerializerResult serializeEntityCollection(final EntityCollection entityCollection,
final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType, final ContentType requestedFormat,
- final ExpandOption expand, final SelectOption select, final CountOption countOption)
+ final ExpandOption expand, final SelectOption select, final CountOption countOption, String id)
throws ODataLibraryException {
return odata.createSerializer(requestedFormat).entityCollection(
@@ -542,6 +542,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
getContextUrl(edmEntitySet, edmEntityType, false, expand, select))
.count(countOption)
.expand(expand).select(select)
+ .setId(id)
.build());
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
index e0dd7dd..cb77b43 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
@@ -68,7 +68,6 @@ public abstract class TechnicalProcessor implements Processor {
this.odata = odata;
this.serviceMetadata = serviceMetadata;
dataProvider.setOData(odata);
- dataProvider.setEdm(serviceMetadata.getEdm());
}
protected EdmEntitySet getEdmEntitySet(final UriInfoResource uriInfo) throws ODataApplicationException {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
index c641516..e8c3a80 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
@@ -202,7 +202,7 @@ public class ExpandSystemQueryOptionHandler {
newLink.setTitle(link.getTitle());
newLink.setType(link.getType());
newLink.setRel(link.getRel());
-
+ newLink.setHref(link.getHref());
return newLink;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java b/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
index 1d29a8e..dab178c 100644
--- a/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
+++ b/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
@@ -55,7 +55,7 @@ public class DataProviderTest {
@Test
public void esAllPrimEntity() throws Exception {
- final DataProvider dataProvider = new DataProvider();
+ final DataProvider dataProvider = new DataProvider(edm);
final Entity entity = dataProvider.readAll(esAllPrim).getEntities().get(2);
Assert.assertEquals(16, entity.getProperties().size());
@@ -65,7 +65,7 @@ public class DataProviderTest {
@Test
public void esAllKeyEntity() throws Exception {
- final DataProvider dataProvider = new DataProvider();
+ final DataProvider dataProvider = new DataProvider(edm);
final Entity entity = dataProvider.readAll(esAllKey).getEntities().get(0);
Assert.assertEquals(13, entity.getProperties().size());
@@ -87,7 +87,7 @@ public class DataProviderTest {
@Test
public void esAllPrim() throws Exception {
- final DataProvider data = new DataProvider();
+ final DataProvider data = new DataProvider(edm);
EntityCollection outSet = data.readAll(esAllPrim);
Assert.assertEquals(3, outSet.getEntities().size());
@@ -107,7 +107,8 @@ public class DataProviderTest {
@Test
public void esCollAllPrim() throws Exception {
- EntityCollection outSet = new DataProvider().readAll(esCollAllPrim);
+ final DataProvider dataProvider = new DataProvider(edm);
+ EntityCollection outSet = dataProvider.readAll(esCollAllPrim);
Assert.assertEquals(3, outSet.getEntities().size());
Assert.assertEquals(17, outSet.getEntities().get(0).getProperties().size());
@@ -120,7 +121,9 @@ public class DataProviderTest {
@Test
public void esCompAllPrim() throws Exception {
- EntityCollection outSet = new DataProvider().readAll(esCompAllPrim);
+ final DataProvider dataProvider = new DataProvider(edm);
+
+ EntityCollection outSet = dataProvider.readAll(esCompAllPrim);
Assert.assertEquals(4, outSet.getEntities().size());
Assert.assertEquals(2, outSet.getEntities().get(0).getProperties().size());
@@ -133,7 +136,9 @@ public class DataProviderTest {
@Test
public void esMixPrimCollComp() throws Exception {
- EntityCollection outSet = new DataProvider().readAll(esMixPrimCollComp);
+ final DataProvider dataProvider = new DataProvider(edm);
+
+ EntityCollection outSet = dataProvider.readAll(esMixPrimCollComp);
Assert.assertEquals(3, outSet.getEntities().size());
Assert.assertEquals(4, outSet.getEntities().get(0).getProperties().size());
@@ -156,7 +161,8 @@ public class DataProviderTest {
@Test
public void esMedia() throws Exception {
- DataProvider dataProvider = new DataProvider();
+ DataProvider dataProvider = new DataProvider(edm);
+
Entity entity = dataProvider.read(esMedia, Arrays.asList(mockParameter("PropertyInt16", "3")));
Assert.assertNotNull(dataProvider.readMedia(entity));
dataProvider.delete(esMedia, entity);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-test/pom.xml
----------------------------------------------------------------------
diff --git a/lib/server-test/pom.xml b/lib/server-test/pom.xml
index d715698..3173137 100644
--- a/lib/server-test/pom.xml
+++ b/lib/server-test/pom.xml
@@ -68,6 +68,11 @@
<artifactId>commons-io</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index ca070a9..572e71a 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -69,7 +69,7 @@ public class ODataJsonSerializerTest {
private static final ServiceMetadata metadata = new ServiceMetadataImpl(
new EdmTechProvider(), Collections.<EdmxReference> emptyList(), new MetadataETagSupport("W/\"metadataETag\""));
private static final EdmEntityContainer entityContainer = metadata.getEdm().getEntityContainer();
- private final DataProvider data = new DataProvider();
+ private final DataProvider data = new DataProvider(metadata.getEdm());
private final ODataSerializer serializer = new ODataJsonSerializer(ContentType.JSON);
private final ODataSerializer serializerNoMetadata = new ODataJsonSerializer(ContentType.JSON_NO_METADATA);
private final ODataSerializer serializerIEEECompatible =
@@ -341,7 +341,9 @@ public class ODataJsonSerializerTest {
.build()).getContent());
final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia/$entity\","
+ "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
- + "\"@odata.mediaEtag\":\"W/\\\"1\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\","
+ + "\"@odata.mediaEtag\":\"W/\\\"1\\\"\","
+ + "\"@odata.mediaContentType\":\"image/svg+xml\","
+ + "\"@odata.mediaEditLink\":\"ESMedia(1)/$value\","
+ "\"PropertyInt16\":1}";
Assert.assertEquals(expectedResult, resultString);
}
@@ -357,10 +359,14 @@ public class ODataJsonSerializerTest {
final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia\","
+ "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+ "\"value\":["
- + "{\"@odata.mediaEtag\":\"W/\\\"1\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":1},"
- + "{\"@odata.mediaEtag\":\"W/\\\"2\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":2},"
- + "{\"@odata.mediaEtag\":\"W/\\\"3\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":3},"
- + "{\"@odata.mediaEtag\":\"W/\\\"4\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\",\"PropertyInt16\":4}]}";
+ + "{\"@odata.mediaEtag\":\"W/\\\"1\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\","
+ + "\"@odata.mediaEditLink\":\"ESMedia(1)/$value\",\"PropertyInt16\":1},"
+ + "{\"@odata.mediaEtag\":\"W/\\\"2\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\","
+ + "\"@odata.mediaEditLink\":\"ESMedia(2)/$value\",\"PropertyInt16\":2},"
+ + "{\"@odata.mediaEtag\":\"W/\\\"3\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\","
+ + "\"@odata.mediaEditLink\":\"ESMedia(3)/$value\",\"PropertyInt16\":3},"
+ + "{\"@odata.mediaEtag\":\"W/\\\"4\\\"\",\"@odata.mediaContentType\":\"image/svg+xml\","
+ + "\"@odata.mediaEditLink\":\"ESMedia(4)/$value\",\"PropertyInt16\":4}]}";
Assert.assertEquals(expectedResult, resultString);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b99eb7b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlDeserializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlDeserializerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlDeserializerTest.java
new file mode 100644
index 0000000..fb7e7ff
--- /dev/null
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlDeserializerTest.java
@@ -0,0 +1,630 @@
+/*
+ * 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.server.core.serializer.xml;
+
+import java.io.ByteArrayInputStream;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.olingo.commons.api.data.ComplexValue;
+import org.apache.olingo.commons.api.data.Entity;
+import org.apache.olingo.commons.api.data.Link;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlComplexType;
+import org.apache.olingo.commons.api.edm.provider.CsdlProperty;
+import org.apache.olingo.commons.core.edm.EdmComplexTypeImpl;
+import org.apache.olingo.commons.core.edm.EdmPropertyImpl;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmBinary;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmByte;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmDate;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmDecimal;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmDuration;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmGuid;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmInt16;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmInt64;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmSByte;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmSingle;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmTimeOfDay;
+import org.apache.olingo.server.api.ServiceMetadata;
+import org.apache.olingo.server.api.deserializer.ODataDeserializer;
+import org.apache.olingo.server.api.edmx.EdmxReference;
+import org.apache.olingo.server.core.ServiceMetadataImpl;
+import org.apache.olingo.server.core.deserializer.xml.ODataXmlDeserializer;
+import org.apache.olingo.server.tecsvc.MetadataETagSupport;
+import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class ODataXmlDeserializerTest {
+
+ private static final ServiceMetadata metadata = new ServiceMetadataImpl(
+ new EdmTechProvider(), Collections.<EdmxReference> emptyList(), new MetadataETagSupport("WmetadataETag"));
+ private static final EdmEntityContainer entityContainer = metadata.getEdm().getEntityContainer();
+ private final ODataDeserializer serializer = new ODataXmlDeserializer();
+
+ @BeforeClass
+ public static void setup() {
+ XMLUnit.setIgnoreComments(true);
+ XMLUnit.setIgnoreAttributeOrder(true);
+ XMLUnit.setIgnoreWhitespace(true);
+ XMLUnit.setNormalizeWhitespace(true);
+ XMLUnit.setCompareUnmatched(false);
+ }
+
+ private Object edmInt16(String value) throws EdmPrimitiveTypeException {
+ return EdmInt16.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmInt16.getInstance().getDefaultType());
+ }
+ private Object edmInt32(String value) throws EdmPrimitiveTypeException {
+ return EdmInt32.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmInt32.getInstance().getDefaultType());
+ }
+ private Object edmInt64(String value) throws EdmPrimitiveTypeException {
+ return EdmInt64.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmInt64.getInstance().getDefaultType());
+ }
+ private Object edmSingle(String value) throws EdmPrimitiveTypeException {
+ return EdmSingle.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmSingle.getInstance().getDefaultType());
+ }
+ private Object edmDouble(String value) throws EdmPrimitiveTypeException {
+ return EdmDouble.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmDouble.getInstance().getDefaultType());
+ }
+ private Object edmSByte(String value) throws EdmPrimitiveTypeException {
+ return EdmSByte.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmSByte.getInstance().getDefaultType());
+ }
+ private Object edmByte(String value) throws EdmPrimitiveTypeException {
+ return EdmByte.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmByte.getInstance().getDefaultType());
+ }
+ private Object edmDecimal(String value) throws EdmPrimitiveTypeException {
+ return EdmDecimal.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmDecimal.getInstance().getDefaultType());
+ }
+ private Object edmBinary(String value) throws EdmPrimitiveTypeException {
+ return EdmBinary.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmBinary.getInstance().getDefaultType());
+ }
+ private Object edmDate(String value) throws EdmPrimitiveTypeException {
+ return EdmDate.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmDate.getInstance().getDefaultType());
+ }
+ private Object edmDateTimeOffset(String value) throws EdmPrimitiveTypeException {
+ return EdmDateTimeOffset.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmDateTimeOffset.getInstance().getDefaultType());
+ }
+ private Object edmDuration(String value) throws EdmPrimitiveTypeException {
+ return EdmDuration.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmDuration.getInstance().getDefaultType());
+ }
+ private Object edmGUID(String value) throws EdmPrimitiveTypeException {
+ return EdmGuid.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmGuid.getInstance().getDefaultType());
+ }
+ private Object edmTimeOfDay(String value) throws EdmPrimitiveTypeException {
+ return EdmTimeOfDay.getInstance().valueOfString(value, true, 10, 10, 10, true,
+ EdmTimeOfDay.getInstance().getDefaultType());
+ }
+
+ @Test
+ public void entitySimple() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+
+ String payload = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+ "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\"\n" +
+ " xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\"> " +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETTwoPrimMany\"\n" +
+ " type=\"application/atom+xml;type=feed\" title=\"NavPropertyETTwoPrimMany\"\n" +
+ " href=\"id\" />\n" +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETTwoPrimOne\"\n" +
+ " type=\"application/atom+xml;type=entry\" title=\"NavPropertyETTwoPrimOne\"\n" +
+ " href=\"id\" />\n" +
+ " <atom:category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n" +
+ " term=\"#olingo.odata.test1.ETAllPrim\" />\n" +
+ " <atom:content type=\"application/xml\">\n" +
+ " <metadata:properties>\n" +
+ " <data:PropertyInt16>32767</data:PropertyInt16>\n" +
+ " <data:PropertyString>First Resource - positive values</data:PropertyString>\n" +
+ " <data:PropertyBoolean>true</data:PropertyBoolean>\n" +
+ " <data:PropertyByte>255</data:PropertyByte>\n" +
+ " <data:PropertySByte>127</data:PropertySByte>\n" +
+ " <data:PropertyInt32>2147483647</data:PropertyInt32>\n" +
+ " <data:PropertyInt64>9223372036854775807</data:PropertyInt64>\n" +
+ " <data:PropertySingle>1.79E20</data:PropertySingle>\n" +
+ " <data:PropertyDouble>-1.79E19</data:PropertyDouble>\n" +
+ " <data:PropertyDecimal>34</data:PropertyDecimal>\n" +
+ " <data:PropertyBinary>ASNFZ4mrze8=</data:PropertyBinary>\n" +
+ " <data:PropertyDate>2012-12-03</data:PropertyDate>\n" +
+ " <data:PropertyDateTimeOffset>2012-12-03T07:16:23Z</data:PropertyDateTimeOffset>\n" +
+ " <data:PropertyDuration>PT6S</data:PropertyDuration>\n" +
+ " <data:PropertyGuid>01234567-89ab-cdef-0123-456789abcdef</data:PropertyGuid>\n" +
+ " <data:PropertyTimeOfDay>03:26:05</data:PropertyTimeOfDay>\n" +
+ " </metadata:properties>\n" +
+ " </atom:content>\n" +
+ "</atom:entry>\n";
+
+ Entity result = serializer.entity(new ByteArrayInputStream(payload.getBytes()),
+ edmEntitySet.getEntityType()).getEntity();
+
+ Assert.assertEquals(16, result.getProperties().size());
+ Assert.assertEquals(2, result.getNavigationBindings().size());
+
+ Assert.assertEquals(edmInt16("32767"), result.getProperty("PropertyInt16").asPrimitive());
+ Assert.assertEquals("First Resource - positive values", result.getProperty("PropertyString").asPrimitive());
+ Assert.assertEquals(edmByte("255"), result.getProperty("PropertyByte").asPrimitive());
+ Assert.assertEquals(edmSByte("127"), result.getProperty("PropertySByte").asPrimitive());
+ Assert.assertEquals(edmInt32("2147483647"), result.getProperty("PropertyInt32").asPrimitive());
+ Assert.assertEquals(edmInt64("9223372036854775807"), result.getProperty("PropertyInt64").asPrimitive());
+ Assert.assertEquals(edmSingle("1.79E20"), result.getProperty("PropertySingle").asPrimitive());
+ Assert.assertEquals(edmDouble("-1.79E19"), result.getProperty("PropertyDouble").asPrimitive());
+ Assert.assertEquals(edmDecimal("34"), result.getProperty("PropertyDecimal").asPrimitive());
+// Assert.assertEquals(edmBinary("ASNFZ4mrze8="), result.getProperty("PropertyBinary").asPrimitive());
+ Assert.assertEquals(edmDate("2012-12-03"), result.getProperty("PropertyDate").asPrimitive());
+ Assert.assertEquals(edmDateTimeOffset("2012-12-03T07:16:23Z"), result.getProperty("PropertyDateTimeOffset")
+ .asPrimitive());
+ Assert.assertEquals(edmDuration("PT6S"), result.getProperty("PropertyDuration")
+ .asPrimitive());
+ Assert.assertEquals(edmGUID("01234567-89ab-cdef-0123-456789abcdef"), result.getProperty("PropertyGuid")
+ .asPrimitive());
+ Assert.assertEquals(edmTimeOfDay("03:26:05"), result.getProperty("PropertyTimeOfDay").asPrimitive());
+ }
+
+ @Test
+ public void entitySimpleWithTypes() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+
+ String payload = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+ "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\"\n" +
+ " xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\"> " +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETTwoPrimMany\"\n" +
+ " type=\"application/atom+xml;type=feed\" title=\"NavPropertyETTwoPrimMany\"\n" +
+ " href=\"id\" />\n" +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETTwoPrimOne\"\n" +
+ " type=\"application/atom+xml;type=entry\" title=\"NavPropertyETTwoPrimOne\"\n" +
+ " href=\"id\" />\n" +
+ " <atom:category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n" +
+ " term=\"#olingo.odata.test1.ETAllPrim\" />\n" +
+ " <atom:content type=\"application/xml\">\n" +
+ " <metadata:properties>\n" +
+ " <data:PropertyInt16 metadata:type=\"Int16\">32767</data:PropertyInt16>\n" +
+ " <data:PropertyString>First Resource - positive values</data:PropertyString>\n" +
+ " <data:PropertyBoolean metadata:type=\"Boolean\">true</data:PropertyBoolean>\n" +
+ " <data:PropertyByte metadata:type=\"Byte\">255</data:PropertyByte>\n" +
+ " <data:PropertySByte metadata:type=\"SByte\">127</data:PropertySByte>\n" +
+ " <data:PropertyInt32 metadata:type=\"Int32\">2147483647</data:PropertyInt32>\n" +
+ " <data:PropertyInt64 metadata:type=\"Int64\">9223372036854775807</data:PropertyInt64>\n" +
+ " <data:PropertySingle metadata:type=\"Single\">1.79E20</data:PropertySingle>\n" +
+ " <data:PropertyDouble metadata:type=\"Double\">-1.79E19</data:PropertyDouble>\n" +
+ " <data:PropertyDecimal metadata:type=\"Decimal\">34</data:PropertyDecimal>\n" +
+ " <data:PropertyBinary metadata:type=\"Binary\">ASNFZ4mrze8=</data:PropertyBinary>\n" +
+ " <data:PropertyDate metadata:type=\"Date\">2012-12-03</data:PropertyDate>\n" +
+ " <data:PropertyDateTimeOffset metadata:type=\"DateTimeOffset\">2012-12-03T07:16:23Z"
+ + "</data:PropertyDateTimeOffset>\n" +
+ " <data:PropertyDuration metadata:type=\"Duration\">PT6S</data:PropertyDuration>\n" +
+ " <data:PropertyGuid metadata:type=\"GUID\">01234567-89ab-cdef-0123-456789abcdef"
+ + "</data:PropertyGuid>\n" +
+ " <data:PropertyTimeOfDay metadata:type=\"TimeOfDay\">03:26:05</data:PropertyTimeOfDay>\n" +
+ " </metadata:properties>\n" +
+ " </atom:content>\n" +
+ "</atom:entry>\n";
+
+ Entity result = serializer.entity(new ByteArrayInputStream(payload.getBytes()),
+ edmEntitySet.getEntityType()).getEntity();
+
+ Assert.assertEquals(16, result.getProperties().size());
+ Assert.assertEquals(2, result.getNavigationBindings().size());
+
+ Assert.assertEquals(edmInt16("32767"), result.getProperty("PropertyInt16").asPrimitive());
+ Assert.assertEquals("First Resource - positive values", result.getProperty("PropertyString").asPrimitive());
+ Assert.assertEquals(edmByte("255"), result.getProperty("PropertyByte").asPrimitive());
+ Assert.assertEquals(edmSByte("127"), result.getProperty("PropertySByte").asPrimitive());
+ Assert.assertEquals(edmInt32("2147483647"), result.getProperty("PropertyInt32").asPrimitive());
+ Assert.assertEquals(edmInt64("9223372036854775807"), result.getProperty("PropertyInt64").asPrimitive());
+ Assert.assertEquals(edmSingle("1.79E20"), result.getProperty("PropertySingle").asPrimitive());
+ Assert.assertEquals(edmDouble("-1.79E19"), result.getProperty("PropertyDouble").asPrimitive());
+ Assert.assertEquals(edmDecimal("34"), result.getProperty("PropertyDecimal").asPrimitive());
+// Assert.assertEquals(edmBinary("ASNFZ4mrze8="), result.getProperty("PropertyBinary").asPrimitive());
+ Assert.assertEquals(edmDate("2012-12-03"), result.getProperty("PropertyDate").asPrimitive());
+ Assert.assertEquals(edmDateTimeOffset("2012-12-03T07:16:23Z"), result.getProperty("PropertyDateTimeOffset")
+ .asPrimitive());
+ Assert.assertEquals(edmDuration("PT6S"), result.getProperty("PropertyDuration")
+ .asPrimitive());
+ Assert.assertEquals(edmGUID("01234567-89ab-cdef-0123-456789abcdef"), result.getProperty("PropertyGuid")
+ .asPrimitive());
+ Assert.assertEquals(edmTimeOfDay("03:26:05"), result.getProperty("PropertyTimeOfDay").asPrimitive());
+ }
+
+ @Test
+ public void entityCompAllPrim() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESCompAllPrim");
+
+ String payload = "<?xml version='1.0' encoding='UTF-8'?>"
+ + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" "
+ + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" "
+ + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" "
+ + "metadata:etag=\"W/"32767"\">"
+ + "<atom:category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" "
+ + "term=\"#olingo.odata.test1.ETCompAllPrim\"/>"
+ + "<atom:content type=\"application/xml\">"
+ + "<metadata:properties>"
+ + "<data:PropertyInt16>32767</data:PropertyInt16>"
+ + "<data:PropertyComp metadata:type=\"#olingo.odata.test1.CTAllPrim\">"
+ + "<data:PropertyString>First Resource - first</data:PropertyString>"
+ + "<data:PropertyBinary>ASNFZ4mrze8=</data:PropertyBinary>"
+ + "<data:PropertyBoolean>true</data:PropertyBoolean>"
+ + "<data:PropertyByte>255</data:PropertyByte>"
+ + "<data:PropertyDate>2012-10-03</data:PropertyDate>"
+ + "<data:PropertyDateTimeOffset>2012-10-03T07:16:23.1234567Z</data:PropertyDateTimeOffset>"
+ + "<data:PropertyDecimal>34.27</data:PropertyDecimal>"
+ + "<data:PropertySingle>1.79E20</data:PropertySingle>"
+ + "<data:PropertyDouble>-1.79E19</data:PropertyDouble>"
+ + "<data:PropertyDuration>PT6S</data:PropertyDuration>"
+ + "<data:PropertyGuid>01234567-89ab-cdef-0123-456789abcdef</data:PropertyGuid>"
+ + "<data:PropertyInt16>32767</data:PropertyInt16>"
+ + "<data:PropertyInt32>2147483647</data:PropertyInt32>"
+ + "<data:PropertyInt64>9223372036854775807</data:PropertyInt64>"
+ + "<data:PropertySByte>127</data:PropertySByte>"
+ + "<data:PropertyTimeOfDay>01:00:01</data:PropertyTimeOfDay>"
+ + "</data:PropertyComp>"
+ + "</metadata:properties>"
+ + "</atom:content>"
+ + "</atom:entry>";
+
+ Entity result = serializer.entity(new ByteArrayInputStream(payload.getBytes()),
+ edmEntitySet.getEntityType()).getEntity();
+
+ Assert.assertEquals("olingo.odata.test1.ETCompAllPrim",result.getType());
+
+ Assert.assertEquals(2, result.getProperties().size());
+ Assert.assertEquals(0, result.getNavigationLinks().size());
+
+ Assert.assertEquals(edmInt16("32767"), result.getProperty("PropertyInt16").asPrimitive());
+
+ Assert.assertNotNull(result.getProperty("PropertyComp"));
+ Property comp = result.getProperty("PropertyComp");
+ Assert.assertEquals("olingo.odata.test1.CTAllPrim", comp.getType());
+ ComplexValue cv = (ComplexValue)comp.getValue();
+
+ Assert.assertEquals(16, cv.getValue().size());
+
+ Assert.assertEquals(edmInt16("32767"), getCVProperty(cv, "PropertyInt16").asPrimitive());
+ Assert.assertEquals("First Resource - first", getCVProperty(cv, "PropertyString").asPrimitive());
+ Assert.assertEquals(edmByte("255"), getCVProperty(cv, "PropertyByte").asPrimitive());
+ Assert.assertEquals(edmSByte("127"), getCVProperty(cv, "PropertySByte").asPrimitive());
+ Assert.assertEquals(edmInt32("2147483647"), getCVProperty(cv, "PropertyInt32").asPrimitive());
+ Assert.assertEquals(edmInt64("9223372036854775807"), getCVProperty(cv, "PropertyInt64").asPrimitive());
+ }
+
+ private Property getCVProperty(ComplexValue cv, String name) {
+ for (Property p:cv.getValue()) {
+ if (p.getName().equals(name)) {
+ return p;
+ }
+ }
+ return null;
+ }
+
+ @Test
+ public void entityMixPrimCollComp() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESMixPrimCollComp");
+ final String payload = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+ "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\"\n" +
+ " xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" \n" +
+ " metadata:metadata-etag=\"WmetadataETag\">\n" +
+ " <atom:category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n" +
+ " term=\"#olingo.odata.test1.ETMixPrimCollComp\" />\n" +
+ " <atom:content type=\"application/xml\">\n" +
+ " <metadata:properties>\n" +
+ " <data:PropertyInt16>32767</data:PropertyInt16>\n" +
+ " <data:CollPropertyString type=\"#Collection(String)\">\n" +
+ " <metadata:element>Employee1@company.example</metadata:element>\n" +
+ " <metadata:element>Employee2@company.example</metadata:element>\n" +
+ " <metadata:element>Employee3@company.example</metadata:element>\n" +
+ " </data:CollPropertyString>\n" +
+ " <data:PropertyComp metadata:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
+ " <data:PropertyInt16>111</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST A</data:PropertyString>\n" +
+ " </data:PropertyComp>\n" +
+ " <data:CollPropertyComp metadata:type=\"#Collection(olingo.odata.test1.CTTwoPrim)\">\n" +
+ " <metadata:element>\n" +
+ " <data:PropertyInt16>123</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST 1</data:PropertyString>\n" +
+ " </metadata:element>\n" +
+ " <metadata:element>\n" +
+ " <data:PropertyInt16>456</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST 2</data:PropertyString>\n" +
+ " </metadata:element>\n" +
+ " <metadata:element>\n" +
+ " <data:PropertyInt16>789</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST 3</data:PropertyString>\n" +
+ " </metadata:element>\n" +
+ " </data:CollPropertyComp>\n" +
+ " </metadata:properties>\n" +
+ " </atom:content>\n" +
+ "</atom:entry>\n";
+
+ Entity result = serializer.entity(new ByteArrayInputStream(payload.getBytes()),
+ edmEntitySet.getEntityType()).getEntity();
+
+ Assert.assertEquals(4, result.getProperties().size());
+ Assert.assertEquals(0, result.getNavigationLinks().size());
+
+ Assert.assertEquals(Arrays.asList("Employee1@company.example", "Employee2@company.example",
+ "Employee3@company.example"), result.getProperty("CollPropertyString").getValue());
+
+ Property comp = result.getProperty("PropertyComp");
+ Assert.assertEquals("olingo.odata.test1.CTTwoPrim", comp.getType());
+ ComplexValue cv = (ComplexValue)comp.getValue();
+
+ Assert.assertEquals(2, cv.getValue().size());
+ Assert.assertEquals(edmInt16("111"), getCVProperty(cv, "PropertyInt16").asPrimitive());
+ Assert.assertEquals("TEST A", getCVProperty(cv, "PropertyString").asPrimitive());
+
+ comp = result.getProperty("CollPropertyComp");
+ Assert.assertEquals("Collection(olingo.odata.test1.CTTwoPrim)", comp.getType());
+ List<ComplexValue> properties = (List<ComplexValue>)comp.getValue();
+
+ Assert.assertEquals(3, properties.size());
+
+ Assert.assertEquals(edmInt16("123"), getCVProperty(properties.get(0), "PropertyInt16")
+ .asPrimitive());
+ Assert.assertEquals("TEST 1", getCVProperty(properties.get(0), "PropertyString")
+ .asPrimitive());
+
+ Assert.assertEquals(edmInt16("789"), getCVProperty(properties.get(2), "PropertyInt16")
+ .asPrimitive());
+ Assert.assertEquals("TEST 3", getCVProperty(properties.get(2), "PropertyString")
+ .asPrimitive());
+ }
+
+ @Test
+ public void entityWithNavigation() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim");
+
+ final String payload = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+ "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\"\n" +
+ " xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\">" +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETAllPrimOne\"\n" +
+ " type=\"application/atom+xml;type=entry\" title=\"NavPropertyETAllPrimOne\"\n" +
+ " href=\"id\">\n" +
+ " <metadata:inline>\n" +
+ " <atom:entry>\n" +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETTwoPrimMany\"\n" +
+ " type=\"application/atom+xml;type=feed\" title=\"NavPropertyETTwoPrimMany\"\n" +
+ " href=\"id\" />\n" +
+ " <atom:link\n" +
+ " rel=\"http://docs.oasis-open.org/odata/ns/related/NavPropertyETTwoPrimOne\"\n" +
+ " type=\"application/atom+xml;type=entry\" title=\"NavPropertyETTwoPrimOne\"\n" +
+ " href=\"id\" />\n" +
+ " <atom:category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n" +
+ " term=\"#olingo.odata.test1.ETAllPrim\" />\n" +
+ " <atom:content type=\"application/xml\">\n" +
+ " <metadata:properties>\n" +
+ " <data:PropertyDate>2012-12-03</data:PropertyDate>\n" +
+ " </metadata:properties>\n" +
+ " </atom:content>\n" +
+ " </atom:entry>\n" +
+ " </metadata:inline>\n" +
+ " </atom:link>\n" +
+ " <atom:category scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n" +
+ " term=\"#olingo.odata.test1.ETTwoPrim\" />\n" +
+ " <atom:content type=\"application/xml\">\n" +
+ " <metadata:properties>\n" +
+ " <data:PropertyInt16>32767</data:PropertyInt16>\n" +
+ " <data:PropertyString>Test String4</data:PropertyString>\n" +
+ " </metadata:properties>\n" +
+ " </atom:content>\n" +
+ "</atom:entry>\n" +
+ "";
+
+ Entity result = serializer.entity(new ByteArrayInputStream(payload.getBytes()),
+ edmEntitySet.getEntityType()).getEntity();
+
+ Assert.assertEquals(2, result.getProperties().size());
+ Assert.assertEquals(1, result.getNavigationLinks().size());
+
+ Assert.assertEquals(edmInt16("32767"), result.getProperty("PropertyInt16").asPrimitive());
+ Assert.assertEquals("Test String4", result.getProperty("PropertyString").asPrimitive());
+
+ Assert.assertEquals(1, result.getNavigationLinks().size());
+ Link navLink = result.getNavigationLinks().get(0);
+ Assert.assertEquals("http://docs.oasis-open.org/odata/ns/related/NavPropertyETAllPrimOne", navLink.getRel());
+ Assert.assertEquals("id", navLink.getBindingLink());
+ Assert.assertEquals("NavPropertyETAllPrimOne", navLink.getTitle());
+
+ Entity inline = navLink.getInlineEntity();
+ Assert.assertEquals(1, inline.getProperties().size());
+ Assert.assertEquals(2, inline.getNavigationBindings().size());
+ Assert.assertEquals(edmDate("2012-12-03"), inline.getProperty("PropertyDate").asPrimitive());
+ }
+
+ @Test
+ public void primitiveProperty() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+ final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyInt16");
+
+ String payload = "<?xml version='1.0' encoding='UTF-8'?>"
+ + "<metadata:value xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "234</metadata:value>";
+
+ Property result = serializer.property(new ByteArrayInputStream(payload.getBytes()), edmProperty).getProperty();
+ Assert.assertEquals(edmInt16("234"), result.getValue());
+ }
+
+ @Test
+ public void primitivePropertyNull() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+ final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyString");
+ String payload = "<?xml version='1.0' encoding='UTF-8'?>"
+ + "<metadata:value xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" "
+ + "metadata:null=\"true\"/>";
+
+ Property result = serializer.property(new ByteArrayInputStream(payload.getBytes()), edmProperty).getProperty();
+ Assert.assertNull(result.getValue());
+ }
+
+ @Test
+ public void primitiveCollectionProperty() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESCollAllPrim");
+ final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("CollPropertyString");
+ String payload = "<?xml version='1.0' encoding='UTF-8'?>"
+ + "<metadata:value xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"> "
+ + "<metadata:element>Employee1@company.example</metadata:element>"
+ + "<metadata:element>Employee2@company.example</metadata:element>"
+ + "<metadata:element>Employee3@company.example</metadata:element>"
+ + "</metadata:value>";
+ Property result = serializer.property(new ByteArrayInputStream(payload.getBytes()), edmProperty).getProperty();
+ Assert.assertEquals(Arrays.asList("Employee1@company.example", "Employee2@company.example",
+ "Employee3@company.example"), result.getValue());
+
+ }
+
+ @Test
+ public void complexProperty() throws Exception {
+ Edm edm = Mockito.mock(Edm.class);
+
+ CsdlProperty street = new CsdlProperty().setName("Street")
+ .setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
+ CsdlProperty city = new CsdlProperty().setName("City")
+ .setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
+ CsdlProperty region = new CsdlProperty().setName("Region")
+ .setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
+ CsdlProperty postalcode = new CsdlProperty().setName("PostalCode")
+ .setType(EdmPrimitiveTypeKind.Int64.getFullQualifiedName());
+
+ CsdlComplexType ct = new CsdlComplexType()
+ .setName("Model.Address")
+ .setProperties(Arrays.asList(street, city, region, postalcode));
+ EdmComplexTypeImpl complexType = new EdmComplexTypeImpl(edm, new FullQualifiedName("Model.Address"), ct);
+
+ Mockito.stub(edm.getComplexType(new FullQualifiedName("Model.Address"))).toReturn(complexType);
+
+ CsdlProperty prop = new CsdlProperty();
+ prop.setName("ShipTo");
+ prop.setType(new FullQualifiedName("Model.Address"));
+ EdmPropertyImpl edmProperty = new EdmPropertyImpl(edm, null, prop);
+
+ String payload = "<data:ShipTo xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" " +
+ " xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " metadata:type=\"#Model.Address\">\n" +
+ " <data:Street>Obere Str. 57</data:Street>\n" +
+ " <data:City>Berlin</data:City>\n" +
+ " <data:Region metadata:null=\"true\"/>\n" +
+ " <data:PostalCode>12209</data:PostalCode>\n" +
+ "</data:ShipTo>";
+
+ Property result = serializer.property(new ByteArrayInputStream(payload.getBytes()), edmProperty).getProperty();
+
+ Assert.assertEquals("ShipTo", result.getName());
+ Assert.assertTrue(result.getValue() instanceof ComplexValue);
+ ComplexValue cv = (ComplexValue)result.getValue();
+ Assert.assertEquals("Model.Address", result.getType());
+ Assert.assertEquals("Berlin", getCVProperty(cv, "City").asPrimitive());
+ Assert.assertEquals("Obere Str. 57", getCVProperty(cv, "Street").asPrimitive());
+ }
+
+ @Test
+ public void complexCollectionProperty() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESMixPrimCollComp");
+ final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("CollPropertyComp");
+ String payload = "<metadata:value xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" "
+ + "metadata:type=\"#Collection(olingo.odata.test1.CTTwoPrim)\">\n"+
+ " <metadata:element>\n" +
+ " <data:PropertyInt16>123</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST 1</data:PropertyString>\n" +
+ " </metadata:element>\n" +
+ " <metadata:element>\n" +
+ " <data:PropertyInt16>456</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST 2</data:PropertyString>\n" +
+ " </metadata:element>\n" +
+ " <metadata:element>\n" +
+ " <data:PropertyInt16>789</data:PropertyInt16>\n" +
+ " <data:PropertyString>TEST 3</data:PropertyString>\n" +
+ " </metadata:element>\n" +
+ "</metadata:value>";
+ Property result = serializer.property(new ByteArrayInputStream(payload.getBytes()), edmProperty).getProperty();
+
+ List<ComplexValue> complex = (List<ComplexValue>)result.getValue();
+
+ Assert.assertEquals(3, complex.size());
+ Assert.assertEquals("Collection(olingo.odata.test1.CTTwoPrim)", result.getType());
+ Assert.assertEquals(edmInt16("123"), getCVProperty(complex.get(0), "PropertyInt16").asPrimitive());
+ Assert.assertEquals("TEST 1", getCVProperty(complex.get(0), "PropertyString").asPrimitive());
+ Assert.assertEquals(edmInt16("789"), getCVProperty(complex.get(2), "PropertyInt16").asPrimitive());
+ Assert.assertEquals("TEST 3", getCVProperty(complex.get(2), "PropertyString").asPrimitive());
+ }
+
+ @Test
+ public void entityReference() throws Exception {
+ String payload = "<metadata:ref xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " metadata:context=\"http://host/service/$metadata#$ref\"\n" +
+ " xmlns=\"http://www.w3.org/2005/Atom\" "+
+ " id=\"http://host/service/Orders(10643)\" />";
+
+ List<URI> result = serializer.entityReferences(new ByteArrayInputStream(payload.getBytes()))
+ .getEntityReferences();
+ Assert.assertEquals(1, result.size());
+ Assert.assertEquals("http://host/service/Orders(10643)", result.get(0).toASCIIString());
+ }
+
+ @Test
+ public void entityReferences() throws Exception {
+ String payload = "<feed xmlns=\"http://www.w3.org/2005/Atom\"\n" +
+ " xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
+ " metadata:context=\"http://host/service/$metadata#Collection($ref)\" >\n" +
+ " <metadata:ref id=\"http://host/service/Orders(10643)\" />\n" +
+ " <metadata:ref id=\"http://host/service/Orders(10759)\" />\n" +
+ "</feed>";
+
+ List<URI> result = serializer.entityReferences(new ByteArrayInputStream(payload.getBytes()))
+ .getEntityReferences();
+ Assert.assertEquals(2, result.size());
+ Assert.assertEquals("http://host/service/Orders(10643)", result.get(0).toASCIIString());
+ Assert.assertEquals("http://host/service/Orders(10759)", result.get(1).toASCIIString());
+ }
+}