Repository: ignite Updated Branches: refs/heads/ignite-3345 [created] 970b01a66
IGNITE-3345 WIP REST: Implemented support for java build-in types for get/put operations. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/970b01a6 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/970b01a6 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/970b01a6 Branch: refs/heads/ignite-3345 Commit: 970b01a6675c10a25d5cf591ac3ab4511b2c2a5e Parents: f897370 Author: Alexey Kuznetsov <[email protected]> Authored: Sat Feb 17 11:21:22 2018 +0700 Committer: Alexey Kuznetsov <[email protected]> Committed: Sat Feb 17 11:21:22 2018 +0700 ---------------------------------------------------------------------- .../http/jetty/GridJettyRestHandler.java | 75 +++++++++++++++++--- 1 file changed, 64 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/970b01a6/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java index b7f0d45..f13a196 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java @@ -27,6 +27,8 @@ import java.io.InputStreamReader; import java.io.LineNumberReader; import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; +import java.sql.Date; +import java.sql.Timestamp; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; @@ -386,6 +388,51 @@ public class GridJettyRestHandler extends AbstractHandler { } } + private Object convert(String type, Object obj) { + if (F.isEmpty(type) || obj == null) + return obj; + + String s = (String)obj; + + switch (type.toLowerCase()) { + case "boolean": + return Boolean.valueOf(s); + + case "byte": + return Byte.valueOf(s); + + case "short": + return Short.valueOf(s); + + case "int": + case "integer": + return Integer.valueOf(s); + + case "long": + return Long.valueOf(s); + + case "float": + return Float.valueOf(s); + + case "double": + return Double.valueOf(s); + + case "date": + return Date.valueOf(s); + + case "timestamp": + return Timestamp.valueOf(s); + + case "UUID": + return UUID.fromString(s); + + default: + // No-op. + } + + return obj; + } + /** * Creates REST request. * @@ -451,13 +498,18 @@ public class GridJettyRestHandler extends AbstractHandler { GridRestCacheRequest restReq0 = new GridRestCacheRequest(); String cacheName = (String)params.get("cacheName"); - restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName); - restReq0.key(params.get("key")); - restReq0.value(params.get("val")); - restReq0.value2(params.get("val2")); - Object val1 = params.get("val1"); + String keyType = (String)params.get("keyType"); + String valType = (String)params.get("valueType"); + + restReq0.key(convert(keyType, params.get("key"))); + + restReq0.value(convert(valType, params.get("val"))); + + restReq0.value2(convert(valType, params.get("val2"))); + + Object val1 = convert(valType, params.get("val1")); if (val1 != null) restReq0.value(val1); @@ -467,8 +519,8 @@ public class GridJettyRestHandler extends AbstractHandler { if (cmd == CACHE_GET_ALL || cmd == CACHE_PUT_ALL || cmd == CACHE_REMOVE_ALL || cmd == CACHE_CONTAINS_KEYS) { - List<Object> keys = values("k", params); - List<Object> vals = values("v", params); + List<Object> keys = values(keyType, "k", params); + List<Object> vals = values(valType, "v", params); if (keys.size() < vals.size()) throw new IgniteCheckedException("Number of keys must be greater or equals to number of values."); @@ -513,7 +565,7 @@ public class GridJettyRestHandler extends AbstractHandler { restReq0.taskId((String)params.get("id")); restReq0.taskName((String)params.get("name")); - restReq0.params(values("p", params)); + restReq0.params(values(null, "p", params)); restReq0.async(Boolean.parseBoolean((String)params.get("async"))); @@ -565,7 +617,7 @@ public class GridJettyRestHandler extends AbstractHandler { restReq0.sqlQuery((String)params.get("qry")); - restReq0.arguments(values("arg", params).toArray()); + restReq0.arguments(values(null, "arg", params).toArray()); restReq0.typeName((String)params.get("type")); @@ -698,11 +750,12 @@ public class GridJettyRestHandler extends AbstractHandler { /** * Gets values referenced by sequential keys, e.g. {@code key1...keyN}. * + * @param type Optional value type. * @param keyPrefix Key prefix, e.g. {@code key} for {@code key1...keyN}. * @param params Parameters map. * @return Values. */ - protected List<Object> values(String keyPrefix, Map<String, Object> params) { + protected List<Object> values(String type, String keyPrefix, Map<String, Object> params) { assert keyPrefix != null; List<Object> vals = new LinkedList<>(); @@ -711,7 +764,7 @@ public class GridJettyRestHandler extends AbstractHandler { String key = keyPrefix + i; if (params.containsKey(key)) - vals.add(params.get(key)); + vals.add(convert(type, params.get(key))); else break; }
