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;
         }

Reply via email to