Repository: olingo-odata4 Updated Branches: refs/heads/master 169651531 -> ef0553a02
[OLINGO-444] Minor improvements Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/ef0553a0 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ef0553a0 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ef0553a0 Branch: refs/heads/master Commit: ef0553a025c80ed0709ec0bdc13c00ae56852b31 Parents: 1696515 Author: Michael Bolz <[email protected]> Authored: Fri Oct 10 07:46:22 2014 +0200 Committer: Michael Bolz <[email protected]> Committed: Fri Oct 10 08:11:16 2014 +0200 ---------------------------------------------------------------------- .../olingo/commons/api/data/ContextURL.java | 8 ++--- .../serializer/utils/ContextURLBuilderTest.java | 6 ++-- .../tecsvc/processor/TechnicalProcessor.java | 37 ++++++-------------- 3 files changed, 17 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef0553a0/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java index 476da10..dcc45f5 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java @@ -143,14 +143,14 @@ public class ContextURL { return this; } - public Builder keySegment(Object value) { + public Builder keySegment(String value) { if (value != null) { - contextURL.keyPath = String.valueOf(value); + contextURL.keyPath = value; } return this; } - public Builder keySegment(Map<String, Object> values) { + public Builder keySegment(Map<String, String> values) { if (values != null && !values.isEmpty()) { if (values.size() == 1) { @@ -158,7 +158,7 @@ public class ContextURL { } StringBuilder sb = new StringBuilder(); - for (String key:values.keySet()) { + for (String key: values.keySet()) { if (sb.length() > 0) { sb.append(","); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef0553a0/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLBuilderTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLBuilderTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLBuilderTest.java index a8b5e71..4ce699f 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLBuilderTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLBuilderTest.java @@ -111,13 +111,13 @@ public class ContextURLBuilderTest { Mockito.when(entitySet.getName()).thenReturn("Customers"); ContextURL contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/")) .entitySet(entitySet) - .keySegment(1) + .keySegment(String.valueOf(1)) .navOrPropertyPath("Name") .build(); assertEquals("http://host/service/$metadata#Customers(1)/Name", ContextURLBuilder.create(contextURL).toASCIIString()); - TreeMap<String, Object> keys = new TreeMap<String, Object>(); - keys.put("one", 1); + TreeMap<String, String> keys = new TreeMap<String, String>(); + keys.put("one", String.valueOf(1)); keys.put("two", "'two'"); contextURL = ContextURL.with().serviceRoot(URI.create("http://host/service/")) .entitySet(entitySet) http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef0553a0/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 63a59c3..8609b0e 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 @@ -20,10 +20,7 @@ package org.apache.olingo.server.tecsvc.processor; import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import org.apache.olingo.commons.api.data.ContextURL; import org.apache.olingo.commons.api.data.ContextURL.Suffix; @@ -32,7 +29,6 @@ import org.apache.olingo.commons.api.data.EntitySet; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.commons.api.edm.EdmEntitySet; -import org.apache.olingo.commons.api.edm.EdmEntityType; import org.apache.olingo.commons.api.edm.EdmPrimitiveType; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; import org.apache.olingo.commons.api.edm.EdmProperty; @@ -217,24 +213,11 @@ public class TechnicalProcessor implements EntitySetProcessor, EntityProcessor, .build(); } - private Map<String, Object> getKeys(EdmEntityType entityType, - List<UriParameter> parameters) throws ODataApplicationException { - TreeMap<String, Object> keys = new TreeMap<String, Object>(); + private Map<String, String> mapKeys(List<UriParameter> parameters) + throws ODataApplicationException { + Map<String, String> keys = new LinkedHashMap<String, String>(); for (UriParameter param: parameters) { - final EdmProperty property = (EdmProperty) entityType.getProperty(param.getName()); - final EdmPrimitiveType type = (EdmPrimitiveType) property.getType(); - try { - Object keyValue = type.valueOfString(param.getText(), - property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), - property.isUnicode(), type.getDefaultType()); - if (keyValue instanceof String) { - keyValue = "'"+keyValue+"'"; - } - keys.put(param.getName(), keyValue); - } catch (EdmPrimitiveTypeException e) { - throw new ODataApplicationException("Invalid key found", HttpStatusCode.BAD_REQUEST.getStatusCode(), - Locale.ROOT, e); - } + keys.put(param.getName(), param.getText()); } return keys; } @@ -264,11 +247,11 @@ public class TechnicalProcessor implements EntitySetProcessor, EntityProcessor, final ODataFormat format = ODataFormat.fromContentType(contentType); ODataSerializer serializer = odata.createSerializer(format); response.setContent(serializer.entityProperty(edmProperty, property, - ODataSerializerOptions.with().contextURL(format == ODataFormat.JSON_NO_METADATA ? null : - ContextURL.with().entitySet(edmEntitySet) - .keySegment(getKeys(edmEntitySet.getEntityType(), resourceEntitySet.getKeyPredicates())) - .navOrPropertyPath(edmProperty.getName()) - .build()).build())); + ODataSerializerOptions.with().contextURL(format == ODataFormat.JSON_NO_METADATA ? null : + ContextURL.with().entitySet(edmEntitySet) + .keySegment(mapKeys(resourceEntitySet.getKeyPredicates())) + .navOrPropertyPath(edmProperty.getName()) + .build()).build())); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, contentType.toContentTypeString()); }
