You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/03/24 13:32:20 UTC
[3/3] git commit: [OLINGO-194] Using enum values as key or in search
filters
[OLINGO-194] Using enum values as key or in search filters
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/c1b8976e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/c1b8976e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/c1b8976e
Branch: refs/heads/olingo200
Commit: c1b8976e9bb866e9e226ff34250f8a34d141e57e
Parents: 4a19c8d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 24 13:32:09 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 24 13:32:09 2014 +0100
----------------------------------------------------------------------
.../olingo/client/api/uri/v4/URIBuilder.java | 22 +++
.../core/uri/AbstractFilterArgFactory.java | 9 +-
.../client/core/uri/AbstractFilterFactory.java | 7 +
.../client/core/uri/AbstractURIBuilder.java | 10 +-
.../olingo/client/core/uri/FilterLiteral.java | 10 +-
.../apache/olingo/client/core/uri/URIUtils.java | 184 +++++++++++++++++--
.../core/uri/v3/FilterArgFactoryImpl.java | 5 +
.../client/core/uri/v3/FilterFactoryImpl.java | 7 +-
.../client/core/uri/v3/URIBuilderImpl.java | 12 +-
.../core/uri/v4/FilterArgFactoryImpl.java | 5 +
.../client/core/uri/v4/FilterFactoryImpl.java | 7 +-
.../client/core/uri/v4/URIBuilderImpl.java | 27 ++-
.../olingo/client/core/v3/ODataClientImpl.java | 4 +-
.../olingo/client/core/v4/ODataClientImpl.java | 4 +-
14 files changed, 280 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/v4/URIBuilder.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/v4/URIBuilder.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/v4/URIBuilder.java
index 5fc8a1d..63d3a01 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/v4/URIBuilder.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/v4/URIBuilder.java
@@ -18,11 +18,33 @@
*/
package org.apache.olingo.client.api.uri.v4;
+import java.util.Map;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import org.apache.olingo.client.api.uri.QueryOption;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
public interface URIBuilder extends CommonURIBuilder<URIBuilder> {
/**
+ * Appends enum key segment to the URI.
+ *
+ * @param enumType enum type
+ * @param memberName enum member name
+ * @return current URIBuilder instance
+ */
+ URIBuilder appendKeySegment(EdmEnumType enumType, String memberName);
+
+ /**
+ * Appends key segment to the URI, for multiple keys.
+ *
+ * @param enumValues enum segment values.
+ * @param segmentValues segment values.
+ * @return current URIBuilder instance
+ */
+ URIBuilder appendKeySegment(Map<String, Pair<EdmEnumType, String>> enumValues, Map<String, Object> segmentValues);
+
+ /**
* Appends Singleton segment to the URI.
*
* @param segmentValue segment value.
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterArgFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterArgFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterArgFactory.java
index 47100e8..e55b3a1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterArgFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterArgFactory.java
@@ -20,12 +20,19 @@ package org.apache.olingo.client.core.uri;
import org.apache.olingo.client.api.uri.FilterArg;
import org.apache.olingo.client.api.uri.CommonFilterArgFactory;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
/**
* OData filter arguments factory.
*/
public abstract class AbstractFilterArgFactory implements CommonFilterArgFactory {
+ private final ODataServiceVersion version;
+
+ public AbstractFilterArgFactory(final ODataServiceVersion version) {
+ this.version = version;
+ }
+
@Override
public FilterArg _null() {
return new FilterConst("null");
@@ -38,7 +45,7 @@ public abstract class AbstractFilterArgFactory implements CommonFilterArgFactory
@Override
public FilterArg literal(final Object value) {
- return new FilterLiteral(value);
+ return new FilterLiteral(version, value);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterFactory.java
index eb6067e..108c1bf 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractFilterFactory.java
@@ -21,11 +21,18 @@ package org.apache.olingo.client.core.uri;
import org.apache.olingo.client.api.uri.FilterArg;
import org.apache.olingo.client.api.uri.CommonFilterFactory;
import org.apache.olingo.client.api.uri.URIFilter;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public abstract class AbstractFilterFactory implements CommonFilterFactory {
private static final long serialVersionUID = -6141317149802621836L;
+ protected final ODataServiceVersion version;
+
+ public AbstractFilterFactory(final ODataServiceVersion version) {
+ this.version = version;
+ }
+
@Override
public URIFilter match(final FilterArg arg) {
return new MatchFilter(arg);
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
index 2beecb3..6cc27e3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
@@ -30,6 +30,7 @@ import org.apache.olingo.client.api.uri.QueryOption;
import org.apache.olingo.client.api.uri.SegmentType;
import org.apache.olingo.client.api.uri.CommonURIBuilder;
import org.apache.olingo.client.api.uri.URIFilter;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,6 +64,8 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
}
+ private final ODataServiceVersion version;
+
protected final List<Segment> segments = new ArrayList<Segment>();
/**
@@ -76,7 +79,8 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
* @param serviceRoot absolute URL (schema, host and port included) representing the location of the root of the data
* service.
*/
- protected AbstractURIBuilder(final String serviceRoot) {
+ protected AbstractURIBuilder(final ODataServiceVersion version, final String serviceRoot) {
+ this.version = version;
segments.add(new Segment(SegmentType.SERVICEROOT, serviceRoot));
}
@@ -101,7 +105,7 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
@Override
public UB appendKeySegment(final Object val) {
- final String segValue = URIUtils.escape(val);
+ final String segValue = URIUtils.escape(version, val);
segments.add(new Segment(SegmentType.KEY, "(" + segValue + ")"));
return getThis();
@@ -116,7 +120,7 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
} else {
final StringBuilder keyBuilder = new StringBuilder().append('(');
for (Map.Entry<String, Object> entry : segmentValues.entrySet()) {
- keyBuilder.append(entry.getKey()).append('=').append(URIUtils.escape(entry.getValue()));
+ keyBuilder.append(entry.getKey()).append('=').append(URIUtils.escape(version, entry.getValue()));
keyBuilder.append(',');
}
keyBuilder.deleteCharAt(keyBuilder.length() - 1).append(')');
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLiteral.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLiteral.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLiteral.java
index cef0349..ad03934 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLiteral.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/FilterLiteral.java
@@ -19,22 +19,26 @@
package org.apache.olingo.client.core.uri;
import org.apache.olingo.client.api.uri.FilterArg;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
/**
* Filter value literals; obtain instances via <tt>FilterArgFactory</tt>.
*
- * @see FilterArgFactory
+ * @see org.apache.olingo.client.api.uri.v3.FilterArgFactory
*/
public class FilterLiteral implements FilterArg {
+ private final ODataServiceVersion version;
+
private final Object value;
- FilterLiteral(final Object value) {
+ FilterLiteral(final ODataServiceVersion version, final Object value) {
+ this.version = version;
this.value = value;
}
@Override
public String build() {
- return URIUtils.escape(value);
+ return URIUtils.escape(version, value);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
index 36bb1c2..831d0b1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
@@ -21,6 +21,7 @@ package org.apache.olingo.client.core.uri;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URI;
import java.net.URLEncoder;
@@ -30,18 +31,26 @@ import java.util.UUID;
import javax.xml.datatype.Duration;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.InputStreamEntity;
import org.apache.olingo.client.api.CommonODataClient;
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmDate;
import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTime;
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.EdmInt64;
import org.apache.olingo.commons.core.edm.primitivetype.EdmSingle;
import org.apache.olingo.commons.core.edm.primitivetype.EdmTime;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmTimeOfDay;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -141,41 +150,186 @@ public final class URIUtils {
return result.toString();
}
+ private static String prefix(final ODataServiceVersion version, final EdmPrimitiveTypeKind typeKind) {
+ String result = StringUtils.EMPTY;
+ if (version == ODataServiceVersion.V30) {
+ switch (typeKind) {
+ case Guid:
+ result = "guid'";
+ break;
+
+ case DateTime:
+ result = "datetime'";
+ break;
+
+ case DateTimeOffset:
+ result = "datetimeoffset'";
+ break;
+
+ case Binary:
+ result = "X'";
+ break;
+
+ default:
+ }
+ } else {
+ switch (typeKind) {
+ case Binary:
+ result = "binary'";
+ break;
+
+ default:
+ }
+ }
+
+ return result;
+ }
+
+ private static String suffix(final ODataServiceVersion version, final EdmPrimitiveTypeKind typeKind) {
+ String result = StringUtils.EMPTY;
+ if (version == ODataServiceVersion.V30) {
+ switch (typeKind) {
+ case Guid:
+ case DateTime:
+ case DateTimeOffset:
+ case Binary:
+ result = "'";
+ break;
+
+ case Decimal:
+ result = "M";
+ break;
+
+ case Double:
+ result = "D";
+ break;
+
+ case Single:
+ result = "f";
+ break;
+
+ case Int64:
+ result = "L";
+ break;
+
+ default:
+ }
+ } else {
+ switch (typeKind) {
+ case Binary:
+ result = "'";
+ break;
+
+ default:
+ }
+ }
+
+ return result;
+ }
+
+ private static String timestamp(final ODataServiceVersion version, final Timestamp timestamp)
+ throws UnsupportedEncodingException, EdmPrimitiveTypeException {
+
+ return version == ODataServiceVersion.V30
+ ? prefix(version, EdmPrimitiveTypeKind.DateTime)
+ + URLEncoder.encode(EdmDateTime.getInstance().
+ valueToString(timestamp, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8)
+ + suffix(version, EdmPrimitiveTypeKind.DateTime)
+ : URLEncoder.encode(EdmDateTimeOffset.getInstance().
+ valueToString(timestamp, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8);
+ }
+
+ private static String calendar(final ODataServiceVersion version, final Calendar calendar)
+ throws UnsupportedEncodingException, EdmPrimitiveTypeException {
+
+ String result;
+ if (calendar.get(Calendar.ZONE_OFFSET) == 0) {
+ if (version == ODataServiceVersion.V30) {
+ result = prefix(version, EdmPrimitiveTypeKind.DateTime)
+ + URLEncoder.encode(EdmDateTime.getInstance().
+ valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8)
+ + suffix(version, EdmPrimitiveTypeKind.DateTime);
+ } else {
+ if (calendar.get(Calendar.YEAR) == 0 && calendar.get(Calendar.MONTH) == 0
+ && calendar.get(Calendar.DAY_OF_MONTH) == 0) {
+
+ result = URLEncoder.encode(EdmTimeOfDay.getInstance().
+ valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8);
+ } else {
+ result = URLEncoder.encode(EdmDate.getInstance().
+ valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8);
+ }
+ }
+ } else {
+ result = prefix(version, EdmPrimitiveTypeKind.DateTimeOffset)
+ + URLEncoder.encode(EdmDateTimeOffset.getInstance().
+ valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8)
+ + suffix(version, EdmPrimitiveTypeKind.DateTimeOffset);
+ }
+
+ return result;
+ }
+
+ private static String duration(final ODataServiceVersion version, final Duration duration)
+ throws UnsupportedEncodingException, EdmPrimitiveTypeException {
+
+ return version == ODataServiceVersion.V30
+ ? "time'" + URLEncoder.encode(EdmTime.getInstance().
+ valueToString(duration, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8) + "'"
+ : "duration'" + URLEncoder.encode(EdmDuration.getInstance().
+ valueToString(duration, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+ Constants.UTF8) + "'";
+ }
+
/**
* Turns primitive values into their respective URI representation.
*
* @param obj primitive value
* @return URI representation
*/
- public static String escape(final Object obj) {
+ public static String escape(final ODataServiceVersion version, final Object obj) {
String value;
try {
- value = (obj instanceof UUID)
- ? "guid'" + obj.toString() + "'"
+ value = (obj instanceof Boolean)
+ ? BooleanUtils.toStringTrueFalse((Boolean) obj)
+ : (obj instanceof UUID)
+ ? prefix(version, EdmPrimitiveTypeKind.Guid)
+ + obj.toString()
+ + suffix(version, EdmPrimitiveTypeKind.Guid)
: (obj instanceof byte[])
- ? "X'" + Hex.encodeHexString((byte[]) obj) + "'"
+ ? prefix(version, EdmPrimitiveTypeKind.Binary)
+ + Hex.encodeHexString((byte[]) obj)
+ + suffix(version, EdmPrimitiveTypeKind.Binary)
: (obj instanceof Timestamp)
- ? "datetime'" + URLEncoder.encode(EdmDateTime.getInstance().
- valueToString(obj, null, null, null, null, null), Constants.UTF8) + "'"
+ ? timestamp(version, (Timestamp) obj)
: (obj instanceof Calendar)
- ? "datetimeoffset'" + URLEncoder.encode(EdmDateTimeOffset.getInstance().
- valueToString(obj, null, null, null, null, null), Constants.UTF8) + "'"
+ ? calendar(version, (Calendar) obj)
: (obj instanceof Duration)
- ? "time'" + URLEncoder.encode(EdmTime.getInstance().
- valueToString(obj, null, null, null, null, null), Constants.UTF8) + "'"
+ ? duration(version, (Duration) obj)
: (obj instanceof BigDecimal)
? EdmDecimal.getInstance().valueToString(obj, null, null,
- Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null) + "M"
+ Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+ + suffix(version, EdmPrimitiveTypeKind.Decimal)
: (obj instanceof Double)
? EdmDouble.getInstance().valueToString(obj, null, null,
- Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null) + "D"
+ Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+ + suffix(version, EdmPrimitiveTypeKind.Double)
: (obj instanceof Float)
? EdmSingle.getInstance().valueToString(obj, null, null,
- Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null) + "f"
+ Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+ + suffix(version, EdmPrimitiveTypeKind.Single)
: (obj instanceof Long)
? EdmInt64.getInstance().valueToString(obj, null, null,
- Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null) + "L"
+ Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+ + suffix(version, EdmPrimitiveTypeKind.Int64)
: (obj instanceof String)
? "'" + URLEncoder.encode((String) obj, Constants.UTF8) + "'"
: obj.toString();
@@ -186,7 +340,7 @@ public final class URIUtils {
return value;
}
-
+
public static InputStreamEntity buildInputStreamEntity(final CommonODataClient client, final InputStream input) {
InputStreamEntity entity;
if (client.getConfiguration().isUseChuncked()) {
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterArgFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterArgFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterArgFactoryImpl.java
index c4c176c..e5ed489 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterArgFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterArgFactoryImpl.java
@@ -22,9 +22,14 @@ import org.apache.olingo.client.api.uri.FilterArg;
import org.apache.olingo.client.api.uri.v3.FilterArgFactory;
import org.apache.olingo.client.core.uri.AbstractFilterArgFactory;
import org.apache.olingo.client.core.uri.FilterFunction;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public class FilterArgFactoryImpl extends AbstractFilterArgFactory implements FilterArgFactory {
+ public FilterArgFactoryImpl(final ODataServiceVersion version) {
+ super(version);
+ }
+
@Override
public FilterArg substringof(final FilterArg first, final FilterArg second) {
return new FilterFunction("substringof", first, second);
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterFactoryImpl.java
index a26cd51..a42a920 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/FilterFactoryImpl.java
@@ -21,14 +21,19 @@ package org.apache.olingo.client.core.uri.v3;
import org.apache.olingo.client.api.uri.v3.FilterArgFactory;
import org.apache.olingo.client.api.uri.v3.FilterFactory;
import org.apache.olingo.client.core.uri.AbstractFilterFactory;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public class FilterFactoryImpl extends AbstractFilterFactory implements FilterFactory {
private static final long serialVersionUID = 1092594961118334631L;
+ public FilterFactoryImpl(final ODataServiceVersion version) {
+ super(version);
+ }
+
@Override
public FilterArgFactory getArgFactory() {
- return new FilterArgFactoryImpl();
+ return new FilterArgFactoryImpl(version);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java
index b541579..f02c524 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java
@@ -27,15 +27,21 @@ import org.apache.olingo.client.api.uri.QueryOption;
import org.apache.olingo.client.api.uri.SegmentType;
import org.apache.olingo.client.api.uri.v3.URIBuilder;
import org.apache.olingo.client.core.uri.AbstractURIBuilder;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public class URIBuilderImpl extends AbstractURIBuilder<URIBuilder> implements URIBuilder {
private static final long serialVersionUID = -3506851722447870532L;
+ private final ODataServiceVersion version;
+
private final Configuration configuration;
- public URIBuilderImpl(final Configuration configuration, final String serviceRoot) {
- super(serviceRoot);
+ public URIBuilderImpl(final ODataServiceVersion version, final Configuration configuration,
+ final String serviceRoot) {
+
+ super(version, serviceRoot);
+ this.version = version;
this.configuration = configuration;
}
@@ -70,7 +76,7 @@ public class URIBuilderImpl extends AbstractURIBuilder<URIBuilder> implements UR
@Override
public URIBuilder appendKeySegment(final Object val) {
if (configuration.isKeyAsSegment()) {
- final String segValue = URIUtils.escape(val);
+ final String segValue = URIUtils.escape(version, val);
segments.add(new Segment(SegmentType.KEY_AS_SEGMENT, segValue));
} else {
super.appendKeySegment(val);
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterArgFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterArgFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterArgFactoryImpl.java
index 39298f3..15bb9e9 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterArgFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterArgFactoryImpl.java
@@ -24,9 +24,14 @@ import org.apache.olingo.client.api.uri.v4.FilterArgFactory;
import org.apache.olingo.client.core.uri.AbstractFilterArgFactory;
import org.apache.olingo.client.core.uri.FilterFunction;
import org.apache.olingo.client.core.uri.FilterLambda;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public class FilterArgFactoryImpl extends AbstractFilterArgFactory implements FilterArgFactory {
+ public FilterArgFactoryImpl(final ODataServiceVersion version) {
+ super(version);
+ }
+
@Override
public FilterArg contains(final FilterArg first, final FilterArg second) {
return new FilterFunction("contains", first, second);
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterFactoryImpl.java
index 2acf1c3..626a261 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/FilterFactoryImpl.java
@@ -26,14 +26,19 @@ import org.apache.olingo.client.core.uri.AbstractFilterFactory;
import org.apache.olingo.client.core.uri.FilterProperty;
import org.apache.olingo.client.core.uri.HasFilter;
import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public class FilterFactoryImpl extends AbstractFilterFactory implements FilterFactory {
private static final long serialVersionUID = -5358934829490623191L;
+ public FilterFactoryImpl(ODataServiceVersion version) {
+ super(version);
+ }
+
@Override
public FilterArgFactory getArgFactory() {
- return new FilterArgFactoryImpl();
+ return new FilterArgFactoryImpl(version);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java
index ae4284d..e996322 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java
@@ -18,18 +18,41 @@
*/
package org.apache.olingo.client.core.uri.v4;
+import java.util.LinkedHashMap;
+import java.util.Map;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.olingo.client.api.uri.QueryOption;
import org.apache.olingo.client.api.uri.SegmentType;
import org.apache.olingo.client.api.uri.v4.URIBuilder;
import org.apache.olingo.client.core.uri.AbstractURIBuilder;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
public class URIBuilderImpl extends AbstractURIBuilder<URIBuilder> implements URIBuilder {
private static final long serialVersionUID = -3506851722447870532L;
- public URIBuilderImpl(final String serviceRoot) {
- super(serviceRoot);
+ public URIBuilderImpl(final ODataServiceVersion version, final String serviceRoot) {
+ super(version, serviceRoot);
+ }
+
+ @Override
+ public URIBuilder appendKeySegment(final EdmEnumType enumType, final String memberName) {
+ return appendKeySegment(enumType.toUriLiteral(memberName));
+ }
+
+ @Override
+ public URIBuilder appendKeySegment(final Map<String, Pair<EdmEnumType, String>> enumValues,
+ final Map<String, Object> segmentValues) {
+
+ final Map<String, Object> values = new LinkedHashMap<String, Object>();
+ for (Map.Entry<String, Pair<EdmEnumType, String>> entry : enumValues.entrySet()) {
+ values.put(entry.getKey(), entry.getValue().getKey().toUriLiteral(entry.getValue().getValue()));
+ }
+ values.putAll(segmentValues);
+
+ return appendKeySegment(values);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
index d10c874..d6d5e36 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
@@ -54,7 +54,7 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
private final Configuration configuration = new ConfigurationImpl();
- private final FilterFactory filterFactory = new FilterFactoryImpl();
+ private final FilterFactory filterFactory = new FilterFactoryImpl(getServiceVersion());
private final ODataDeserializer deserializer = new ODataDeserializerImpl(getServiceVersion());
@@ -95,7 +95,7 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
@Override
public URIBuilder getURIBuilder(final String serviceRoot) {
- return new URIBuilderImpl(configuration, serviceRoot);
+ return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/c1b8976e/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
index bb12f1a..834f6f0 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
@@ -54,7 +54,7 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
private final Configuration configuration = new ConfigurationImpl();
- private final FilterFactory filterFactory = new FilterFactoryImpl();
+ private final FilterFactory filterFactory = new FilterFactoryImpl(getServiceVersion());
private final ODataDeserializer deserializer = new ODataDeserializerImpl(getServiceVersion());
@@ -94,7 +94,7 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
@Override
public URIBuilder getURIBuilder(final String serviceRoot) {
- return new URIBuilderImpl(serviceRoot);
+ return new URIBuilderImpl(getServiceVersion(), serviceRoot);
}
@Override