From f2ed0ddb09608a9ef6b18b4233635eb209962a7a Mon Sep 17 00:00:00 2001 From: Christian Amend Date: Thu, 22 Jan 2015 10:53:42 +0100 Subject: [PATCH] [OLINGO-530] Fix edm properties and refactor some method names` --- .../json/ODataJsonDeserializer.java | 67 ++++++++++--------- .../tecsvc/provider/PropertyProvider.java | 4 +- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java index e89852e4a..1867cd75b 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java @@ -118,7 +118,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { } // remove here to avoid iterator issues. tree.remove(toRemove); - checkEmptyJsonNode(tree); + assertJsonNodeIsEmpty(tree); return entitySet; } @@ -129,7 +129,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { for (JsonNode arrayElement : jsonNode) { if (arrayElement.isArray() || arrayElement.isValueNode()) { throw new DeserializerException("Nested Arrays and primitive values are not allowed for an entity value.", - DeserializerException.MessageKeys.INVALID_ENTITY); + DeserializerException.MessageKeys.INVALID_ENTITY); } entities.add(consumeEntityNode(edmEntityType, (ObjectNode) arrayElement)); @@ -167,12 +167,12 @@ public class ODataJsonDeserializer implements ODataDeserializer { consumeEntityProperties(edmEntityType, tree, entity); // Check and consume all expanded Navigation Properties - consumeEntityNavigationProperties(edmEntityType, tree, entity); + consumeExpandedNavigationProperties(edmEntityType, tree, entity); // consume remaining json node fields - consumeAllJsonNodeFields(edmEntityType, tree, entity); + consumeRemainingJsonNodeFields(edmEntityType, tree, entity); - checkEmptyJsonNode(tree); + assertJsonNodeIsEmpty(tree); return entity; } @@ -180,14 +180,15 @@ public class ODataJsonDeserializer implements ODataDeserializer { /** * Consume all remaining fields of Json ObjectNode and try to map found values * to according Entity fields and omit to be ignored OData fields (e.g. control information). - * + * * @param edmEntityType edm entity type which for which the json node is consumed * @param node json node which is consumed * @param entity entity instance which is filled * @throws DeserializerException if an exception during consummation occurs */ - private void consumeAllJsonNodeFields(final EdmEntityType edmEntityType, final ObjectNode node, final EntityImpl - entity) throws DeserializerException { + private void consumeRemainingJsonNodeFields(final EdmEntityType edmEntityType, final ObjectNode node, + final EntityImpl + entity) throws DeserializerException { final List toRemove = new ArrayList(); Iterator> fieldsIterator = node.fields(); while (fieldsIterator.hasNext()) { @@ -210,7 +211,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { } private void consumeEntityProperties(final EdmEntityType edmEntityType, final ObjectNode node, final EntityImpl - entity) throws DeserializerException { + entity) throws DeserializerException { List propertyNames = edmEntityType.getPropertyNames(); for (String propertyName : propertyNames) { JsonNode jsonNode = node.get(propertyName); @@ -228,8 +229,8 @@ public class ODataJsonDeserializer implements ODataDeserializer { } } - private void consumeEntityNavigationProperties(final EdmEntityType edmEntityType, final ObjectNode node, final - EntityImpl entity) throws DeserializerException { + private void consumeExpandedNavigationProperties(final EdmEntityType edmEntityType, final ObjectNode node, + final EntityImpl entity) throws DeserializerException { List navigationPropertyNames = edmEntityType.getNavigationPropertyNames(); for (String navigationPropertyName : navigationPropertyNames) { // read expanded navigation property @@ -279,24 +280,24 @@ public class ODataJsonDeserializer implements ODataDeserializer { bindingLink.setTitle(navigationPropertyName); if (edmNavigationProperty.isCollection()) { - checkNullNode(key, jsonNode); + assertIsNullNode(key, jsonNode); if (!jsonNode.isArray()) { throw new DeserializerException("Binding annotation: " + key + " must be an array.", DeserializerException.MessageKeys.INVALID_ANNOTATION_TYPE, key); } List bindingLinkStrings = new ArrayList(); for (JsonNode arrayValue : jsonNode) { - checkNullNode(key, arrayValue); + assertIsNullNode(key, arrayValue); if (!arrayValue.isTextual()) { throw new DeserializerException("Binding annotation: " + key + " must have string valued array.", - DeserializerException.MessageKeys.INVALID_ANNOTATION_TYPE, key); + DeserializerException.MessageKeys.INVALID_ANNOTATION_TYPE, key); } bindingLinkStrings.add(arrayValue.asText()); } bindingLink.setType(ODataLinkType.ENTITY_COLLECTION_BINDING.toString()); bindingLink.setBindingLinks(bindingLinkStrings); } else { - checkNullNode(key, jsonNode); + assertIsNullNode(key, jsonNode); if (!jsonNode.isValueNode()) { throw new DeserializerException("Binding annotation: " + key + " must be a string value.", DeserializerException.MessageKeys.INVALID_ANNOTATION_TYPE, key); @@ -307,7 +308,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { return bindingLink; } - private void checkNullNode(String key, JsonNode jsonNode) throws DeserializerException { + private void assertIsNullNode(String key, JsonNode jsonNode) throws DeserializerException { if (jsonNode.isNull()) { throw new DeserializerException("Annotation: " + key + "must not have a null value.", DeserializerException.MessageKeys.INVALID_NULL_ANNOTATION, key); @@ -327,8 +328,8 @@ public class ODataJsonDeserializer implements ODataDeserializer { } private void consumePropertySingleNode(final EdmProperty edmProperty, - final JsonNode jsonNode, final Property property) - throws DeserializerException { + final JsonNode jsonNode, final Property property) + throws DeserializerException { switch (edmProperty.getType().getKind()) { case PRIMITIVE: Object value = readPrimitiveValue(edmProperty, jsonNode); @@ -363,7 +364,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { // remove here to avoid iterator issues. ((ObjectNode) jsonNode).remove(toRemove); // Afterwards the node must be empty - checkEmptyJsonNode(jsonNode); + assertJsonNodeIsEmpty(jsonNode); break; default: throw new DeserializerException("Invalid Type Kind for a property found: " + edmProperty.getType().getKind(), @@ -372,7 +373,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { } private void consumePropertyCollectionNode(final EdmProperty edmProperty, final JsonNode jsonNode, - final Property property) throws DeserializerException { + final Property property) throws DeserializerException { if (!jsonNode.isArray()) { throw new DeserializerException("Value for property: " + edmProperty.getName() + " must be an array but is not.", DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, @@ -429,7 +430,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { // remove here to avoid iterator issues. ((ObjectNode) arrayElement).remove(toRemove); // Afterwards the node must be empty - checkEmptyJsonNode(arrayElement); + assertJsonNodeIsEmpty(arrayElement); } property.setValue(ValueType.COLLECTION_COMPLEX, valueArray); break; @@ -473,9 +474,9 @@ public class ODataJsonDeserializer implements ODataDeserializer { checkJsonTypeBasedOnPrimitiveType(edmProperty.getName(), edmTypeDefinition.getUnderlyingType().getName(), jsonNode); return edmTypeDefinition.valueOfString(jsonNode.asText(), edmProperty.isNullable(), - edmTypeDefinition.getMaxLength(), - edmTypeDefinition.getPrecision(), edmTypeDefinition.getScale(), edmTypeDefinition.isUnicode(), - edmTypeDefinition.getDefaultType()); + edmTypeDefinition.getMaxLength(), + edmTypeDefinition.getPrecision(), edmTypeDefinition.getScale(), edmTypeDefinition.isUnicode(), + edmTypeDefinition.getDefaultType()); } catch (EdmPrimitiveTypeException e) { throw new DeserializerException( "Invalid value: " + jsonNode.asText() + " for property: " + edmProperty.getName(), e, @@ -490,7 +491,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { checkJsonTypeBasedOnPrimitiveType(edmProperty.getName(), edmEnumType.getUnderlyingType().getName(), jsonNode); return edmEnumType .valueOfString(jsonNode.asText(), edmProperty.isNullable(), edmProperty.getMaxLength(), edmProperty - .getPrecision(), edmProperty.getScale(), edmProperty.isUnicode(), edmEnumType.getDefaultType()); + .getPrecision(), edmProperty.getScale(), edmProperty.isUnicode(), edmEnumType.getDefaultType()); } catch (EdmPrimitiveTypeException e) { throw new DeserializerException( "Invalid value: " + jsonNode.asText() + " for property: " + edmProperty.getName(), e, @@ -516,32 +517,32 @@ public class ODataJsonDeserializer implements ODataDeserializer { /** * Check if JsonNode is a value node (jsonNode.isValueNode()) and if not throw * an DeserializerException. - * + * * @param edmProperty property which is checked * @param jsonNode node which is checked * @throws DeserializerException is thrown if json node is not a value node */ private void checkForValueNode(final EdmProperty edmProperty, final JsonNode jsonNode) - throws DeserializerException { + throws DeserializerException { if (!jsonNode.isValueNode()) { throw new DeserializerException( - "Invalid value for property: " + edmProperty.getName() + " must not be an object or array.", - DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmProperty.getName()); + "Invalid value for property: " + edmProperty.getName() + " must not be an object or array.", + DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, edmProperty.getName()); } } /** * Validate that node is empty (node.size == 0) and if not throw * an DeserializerException. - * + * * @param node node to be checked * @throws DeserializerException if node is not empty */ - private void checkEmptyJsonNode(JsonNode node) throws DeserializerException { + private void assertJsonNodeIsEmpty(JsonNode node) throws DeserializerException { if (node.size() != 0) { final String unknownField = node.fieldNames().next(); throw new DeserializerException("Tree should be empty but still has content left: " + unknownField, - DeserializerException.MessageKeys.UNKOWN_CONTENT, unknownField); + DeserializerException.MessageKeys.UNKOWN_CONTENT, unknownField); } } @@ -576,7 +577,7 @@ public class ODataJsonDeserializer implements ODataDeserializer { + " property: " + propertyName, DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, propertyName); } break; - //Strings + // Strings case String: case Binary: case Date: diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java index 156df86f9..636fbee4a 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java @@ -521,7 +521,7 @@ public class PropertyProvider { .setType(ComplexTypeProvider.nameCTMixEnumTypeDefColl); public static final Property propertyCompColl_CTMixEnumTypeDefColl = new Property() - .setName("PropertyCTMixEnumTypeDefColl") + .setName("CollPropertyCTMixEnumTypeDefColl") .setType(ComplexTypeProvider.nameCTMixEnumTypeDefColl) .setCollection(true); @@ -593,7 +593,7 @@ public class PropertyProvider { .setType(EnumTypeProvider.nameENString); public static final Property collPropertyEnumString_ENString = new Property() - .setName("PropertyEnumString") + .setName("CollPropertyEnumString") .setType(EnumTypeProvider.nameENString) .setCollection(true);