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 2015/04/02 08:30:08 UTC
[2/8] olingo-odata4 git commit: [OLINGO-612] Changed 'is*' behavior
for Valuable
[OLINGO-612] Changed 'is*' behavior for Valuable
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/26be7d2e
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/26be7d2e
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/26be7d2e
Branch: refs/heads/OLINGO-573
Commit: 26be7d2e7ccaa01968ab9a3e1d7259f48a762679
Parents: 15cfa37
Author: Michael Bolz <mi...@sap.com>
Authored: Wed Apr 1 10:49:39 2015 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Wed Apr 1 11:02:53 2015 +0200
----------------------------------------------------------------------
.../org/apache/olingo/fit/AbstractServices.java | 18 +++----
.../core/serialization/ODataBinderImpl.java | 22 ++++----
.../olingo/commons/api/data/Valuable.java | 55 ++++++++++++++++++++
.../commons/core/data/AbstractValuable.java | 24 +++++++++
.../core/serialization/AtomSerializer.java | 2 +-
.../serialization/JsonPropertySerializer.java | 4 +-
.../core/serialization/JsonSerializer.java | 10 ++--
7 files changed, 108 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
index 63a53af..a2ccbae 100644
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
@@ -1914,15 +1914,7 @@ public abstract class AbstractServices {
alink.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getName());
- if (property.isComplex()) {
- Entity inline = new EntityImpl();
- inline.setType(navProperties.get(property.getName()).getType());
- for (Property prop : property.asComplex().getValue()) {
- inline.getProperties().add(prop);
- }
- alink.setInlineEntity(inline);
-
- } else if (property.isCollection()) {
+ if (property.isCollection()) {
EntitySet inline = new EntitySetImpl();
for (Object value : property.asCollection()) {
Entity inlineEntity = new EntityImpl();
@@ -1933,6 +1925,14 @@ public abstract class AbstractServices {
inline.getEntities().add(inlineEntity);
}
alink.setInlineEntitySet(inline);
+ } else if (property.isComplex()) {
+ Entity inline = new EntityImpl();
+ inline.setType(navProperties.get(property.getName()).getType());
+ for (Property prop : property.asComplex().getValue()) {
+ inline.getProperties().add(prop);
+ }
+ alink.setInlineEntity(inline);
+
} else {
throw new IllegalStateException("Invalid navigation property " + property);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
index 4e22b0d..2ae47f1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
@@ -740,13 +740,22 @@ public class ODataBinderImpl implements ODataBinder {
// fixes enum values treated as primitive when no type information is available
if (client instanceof EdmEnabledODataClient && type != null) {
final EdmEnumType edmType = ((EdmEnabledODataClient) client).getEdm(metadataETag).getEnumType(type);
- if (valuable.isPrimitive() && edmType != null) {
+ if (!valuable.isCollection() && valuable.isPrimitive() && edmType != null) {
valuable.setValue(ValueType.ENUM, valuable.asPrimitive());
}
}
ODataValue value = null;
- if (valuable.isEnum()) {
+
+ if (valuable.isCollection()) {
+ value = client.getObjectFactory().newCollectionValue(type == null ? null : "Collection(" + type.toString() + ")");
+
+ for (Object _value : valuable.asCollection()) {
+ final Property fake = new PropertyImpl();
+ fake.setValue(valuable.getValueType().getBaseType(), _value);
+ value.asCollection().add(getODataValue(type, fake, contextURL, metadataETag));
+ }
+ } else if (valuable.isEnum()) {
value = client.getObjectFactory().newEnumValue(type == null ? null : type.toString(),
valuable.asEnum().toString());
} else if (valuable.isComplex()) {
@@ -833,15 +842,6 @@ public class ODataBinderImpl implements ODataBinder {
}
value = cValue;
- } else if (valuable.isCollection()) {
- value =
- client.getObjectFactory().newCollectionValue(type == null ? null : "Collection(" + type.toString() + ")");
-
- for (Object _value : valuable.asCollection()) {
- final Property fake = new PropertyImpl();
- fake.setValue(valuable.getValueType().getBaseType(), _value);
- value.asCollection().add(getODataValue(type, fake, contextURL, metadataETag));
- }
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Valuable.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Valuable.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Valuable.java
index ca660a8..78989b3 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Valuable.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/Valuable.java
@@ -30,26 +30,81 @@ public interface Valuable {
boolean isNull();
+ /**
+ * Check if Valuable contains a PRIMITIVE or COLLECTION_PRIMITIVE ValueType
+ *
+ * @return true if ValueType is a PRIMITIVE or COLLECTION_PRIMITIVE, otherwise false
+ */
boolean isPrimitive();
+ /**
+ * Check if Valuable contains a GEOSPATIAL or COLLECTION_GEOSPATIAL ValueType
+ *
+ * @return true if ValueType is a GEOSPATIAL or COLLECTION_GEOSPATIAL, otherwise false
+ */
boolean isGeospatial();
+ /**
+ * Check if Valuable contains a ENUM or COLLECTION_ENUM ValueType
+ *
+ * @return true if ValueType is a ENUM or COLLECTION_ENUM, otherwise false
+ */
boolean isEnum();
+ /**
+ * Check if Valuable contains a COMPLEX or COLLECTION_COMPLEX ValueType
+ *
+ * @return true if ValueType is a COMPLEX or COLLECTION_COMPLEX, otherwise false
+ */
boolean isComplex();
+ /**
+ * Check if Valuable contains a COLLECTION_* ValueType
+ *
+ * @return true if ValueType is a COLLECTION_*, otherwise false
+ */
boolean isCollection();
+ /**
+ * Get the value
+ *
+ * @return the value
+ */
Object getValue();
+ /**
+ * Get the value in its primitive representation or null if it is not based on a primitive ValueType
+ *
+ * @return primitive representation or null if it is not based on a primitive ValueType
+ */
Object asPrimitive();
+ /**
+ * Get the value in its enum representation or null if it is not based on a enum ValueType
+ *
+ * @return enum representation or null if it is not based on a enum ValueType
+ */
Object asEnum();
+ /**
+ * Get the value in its geospatial representation or null if it is not based on a geospatial ValueType
+ *
+ * @return geospatial representation or null if it is not based on a geospatial ValueType
+ */
Geospatial asGeospatial();
+ /**
+ * Get the value in its complex representation or null if it is not based on a complex ValueType
+ *
+ * @return primitive complex or null if it is not based on a complex ValueType
+ */
ComplexValue asComplex();
+ /**
+ * Get the value as collection or null if it is not a collection ValueType
+ *
+ * @return collection or null if it is not a collection ValueType
+ */
List<?> asCollection();
void setValue(ValueType valuetype, Object value);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractValuable.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractValuable.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractValuable.java
index 6a5a96f..3a06511 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractValuable.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractValuable.java
@@ -56,21 +56,33 @@ public abstract class AbstractValuable implements Valuable, Annotatable {
@Override
public boolean isPrimitive() {
+ if(isCollection()) {
+ return valueType.getBaseType() == ValueType.PRIMITIVE;
+ }
return valueType == ValueType.PRIMITIVE;
}
@Override
public boolean isGeospatial() {
+ if(isCollection()) {
+ return valueType.getBaseType() == ValueType.GEOSPATIAL;
+ }
return valueType == ValueType.GEOSPATIAL;
}
@Override
public boolean isEnum() {
+ if(isCollection()) {
+ return valueType.getBaseType() == ValueType.ENUM;
+ }
return valueType == ValueType.ENUM;
}
@Override
public boolean isComplex() {
+ if(isCollection()) {
+ return valueType.getBaseType() == ValueType.COMPLEX;
+ }
return valueType == ValueType.COMPLEX;
}
@@ -81,21 +93,33 @@ public abstract class AbstractValuable implements Valuable, Annotatable {
@Override
public Object asPrimitive() {
+ if(isCollection()) {
+ return null;
+ }
return isPrimitive() ? value : null;
}
@Override
public Geospatial asGeospatial() {
+ if(isCollection()) {
+ return null;
+ }
return isGeospatial() ? (Geospatial) value : null;
}
@Override
public Object asEnum() {
+ if(isCollection()) {
+ return null;
+ }
return isEnum() ? value : null;
}
@Override
public ComplexValue asComplex() {
+ if(isCollection()) {
+ return null;
+ }
return isComplex() ? (ComplexValue) value : null;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
index 6bd5fbb..de06008 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
@@ -141,7 +141,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
value(writer, property.getValueType(), typeInfo == null ? null : typeInfo.getPrimitiveTypeKind(),
property.getValue());
- if (!property.isNull() && property.isComplex()) {
+ if (!property.isNull() && property.isComplex() && !property.isCollection()) {
links(writer, property.asComplex().getAssociationLinks());
links(writer, property.asComplex().getNavigationLinks());
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
index f6ddd58..870cabd 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
@@ -67,6 +67,8 @@ public class JsonPropertySerializer extends JsonSerializer {
if (property.isNull()) {
jgen.writeBooleanField(Constants.JSON_NULL, true);
+ } else if (property.isGeospatial() || property.isCollection()) {
+ valuable(jgen, property, Constants.VALUE);
} else if (property.isPrimitive()) {
final EdmTypeInfo typeInfo = property.getType() == null
? null
@@ -76,8 +78,6 @@ public class JsonPropertySerializer extends JsonSerializer {
primitiveValue(jgen, typeInfo, property.asPrimitive());
} else if (property.isEnum()) {
jgen.writeStringField(Constants.VALUE, property.asEnum().toString());
- } else if (property.isGeospatial() || property.isCollection()) {
- valuable(jgen, property, Constants.VALUE);
} else if (property.isComplex()) {
for (Property cproperty : property.asComplex().getValue()) {
valuable(jgen, cproperty, cproperty.getName());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/26be7d2e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
index 012d3a3..fd3fda1 100755
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
@@ -336,6 +336,8 @@ public class JsonSerializer implements ODataSerializer {
if (value.isNull()) {
jgen.writeNull();
+ } else if (value.isCollection()) {
+ collection(jgen, typeInfo, value.getValueType(), value.asCollection());
} else if (value.isPrimitive()) {
primitiveValue(jgen, typeInfo, value.asPrimitive());
} else if (value.isEnum()) {
@@ -344,8 +346,6 @@ public class JsonSerializer implements ODataSerializer {
jgen.writeStartObject();
geoSerializer.serialize(jgen, value.asGeospatial());
jgen.writeEndObject();
- } else if (value.isCollection()) {
- collection(jgen, typeInfo, value.getValueType(), value.asCollection());
} else if (value.isComplex()) {
complexValue(jgen, typeInfo, value.asComplex().getValue(), value.asComplex());
}
@@ -355,10 +355,12 @@ public class JsonSerializer implements ODataSerializer {
throws IOException, EdmPrimitiveTypeException {
if (!Constants.VALUE.equals(name) && !(valuable instanceof Annotation)
- && !valuable.isComplex() && !valuable.isComplex()) {
+ && !(valuable.isComplex() && !valuable.isCollection())) {
String type = valuable.getType();
- if (StringUtils.isBlank(type) && valuable.isPrimitive() || valuable.isNull()) {
+ if ((!valuable.isCollection() &&
+ StringUtils.isBlank(type) &&
+ valuable.isPrimitive()) || valuable.isNull()) {
type = EdmPrimitiveTypeKind.String.getFullQualifiedName().toString();
}
if (StringUtils.isNotBlank(type) && format != ODataFormat.JSON_NO_METADATA) {