#ignite-964: wip
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/80bd452c Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/80bd452c Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/80bd452c Branch: refs/heads/ignite-964 Commit: 80bd452c985d685169f7ca8bc4bd264e0f4d33ca Parents: ea50ebb Author: ivasilinets <[email protected]> Authored: Tue Jun 30 18:53:10 2015 +0300 Committer: ivasilinets <[email protected]> Committed: Tue Jun 30 18:53:10 2015 +0300 ---------------------------------------------------------------------- .../processors/scripting/JSONCacheObject.java | 78 ------------- .../http/jetty/GridJettyRestHandler.java | 53 ++++++--- .../protocols/http/jetty/JSONCacheObject.java | 111 +++++++++++++++++++ 3 files changed, 149 insertions(+), 93 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/80bd452c/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java deleted file mode 100644 index 46067d7..0000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal.processors.scripting; - -import java.util.*; - -/** - * Json cache object. - */ -public class JSONCacheObject { - /** Fields map. */ - private Map<String, Object> fields = new HashMap<>(); - - /** - * @param key Field name. - * @param val Field value. - */ - public void addField(String key, Object val) { - fields.put(key, val); - } - - /** - * @param key Field name. - * @return Field value. - */ - public Object getField(String key) { - return fields.get(key); - } - - /** - * @return Fields key set. - */ - public Set<String> keys() { - return fields.keySet(); - } - - /** {@inheritDoc} */ - @Override public int hashCode() { - //TODO: - return fields.hashCode(); - } - - /** {@inheritDoc} */ - @Override public boolean equals(Object obj) { - if (obj == null || !(obj instanceof JSONCacheObject)) - return false; - - JSONCacheObject obj0 = (JSONCacheObject) obj; - - if (fields.size() != obj0.fields.size()) - return false; - - for (String key : obj0.keys()) { - if (!fields.containsKey(key)) - return false; - - if (!obj0.getField(key).equals(getField(key))) - return false; - } - - return true; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/80bd452c/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 6327c88..f7b1db8 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 @@ -358,28 +358,28 @@ public class GridJettyRestHandler extends AbstractHandler { if (req.getHeader("JSONObject") != null) { if (cmd == CACHE_PUT_ALL) { - StringBuilder builder = new StringBuilder(); + JSONObject o =parseRequest(req); - Scanner reader = null; + int i = 1; - try { - reader = new Scanner(req.getReader()); - } - catch (IOException e) { - throw new IgniteCheckedException(e); - } + Map<Object, Object> map = U.newHashMap(o.keySet().size()); - while (reader.hasNext()) - builder.append(reader.next() + "\n"); + while (o.get("k" + i) != null) { + Object key = o.get("k" + i); - JSONObject o = JSONObject.fromObject(builder.toString()); + Object val = o.get("val" + i); - restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName); + if (key instanceof JSONObject) + key = new JSONCacheObject((JSONObject)key); - Map<Object, Object> map = U.newHashMap(o.keySet().size()); + if (val instanceof JSONObject) + val = new JSONCacheObject((JSONObject)val); - for (Object k : o.keySet()) - map.put(k, o.get(k)); + map.put(key, val); + i++; + } + + restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName); restReq0.values(map); } @@ -732,4 +732,27 @@ public class GridJettyRestHandler extends AbstractHandler { return null; } + + /** + * @param req Request. + * @return JSON object. + * @throws IgniteCheckedException If failed. + */ + private JSONObject parseRequest(HttpServletRequest req) throws IgniteCheckedException{ + StringBuilder builder = new StringBuilder(); + + Scanner reader = null; + + try { + reader = new Scanner(req.getReader()); + } + catch (IOException e) { + throw new IgniteCheckedException(e); + } + + while (reader.hasNext()) + builder.append(reader.next() + "\n"); + + return JSONObject.fromObject(builder.toString()); + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/80bd452c/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/JSONCacheObject.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/JSONCacheObject.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/JSONCacheObject.java new file mode 100644 index 0000000..9bcd419 --- /dev/null +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/JSONCacheObject.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.processors.rest.protocols.http.jetty; + +import net.sf.json.*; + +import java.util.*; + +/** + * Json cache object. + */ +public class JSONCacheObject { + /** Fields map. */ + private Map<Object, Object> fields = new HashMap<>(); + + public JSONCacheObject() { + + } + + public JSONCacheObject(JSONObject o) { + for (Object key : o.keySet()) + addField(toSimpleObject(key), toSimpleObject(o.get(key))); + } + + private Object toSimpleObject(Object o) { + if (o instanceof JSONObject) { + JSONObject o1 = (JSONObject)o; + JSONCacheObject res = new JSONCacheObject(); + + for (Object key : o1.keySet()) + res.addField(toSimpleObject(key), toSimpleObject(o1.get(key))); + + return res; + } + else if (o instanceof JSONArray) { + JSONArray o1 = (JSONArray) o; + List<Object> val = new ArrayList<>(); + for (Object v : o1) + val.add(toSimpleObject(v)); + + return val; + } + + return o; + } + + /** + * @param key Field name. + * @param val Field value. + */ + public void addField(Object key, Object val) { + fields.put(key, val); + } + + /** + * @param key Field name. + * @return Field value. + */ + public Object getField(Object key) { + return fields.get(key); + } + + /** + * @return Fields key set. + */ + public Set<Object> keys() { + return fields.keySet(); + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + //TODO: + return fields.hashCode(); + } + + /** {@inheritDoc} */ + @Override public boolean equals(Object obj) { + if (obj == null || !(obj instanceof JSONCacheObject)) + return false; + + JSONCacheObject obj0 = (JSONCacheObject) obj; + + if (fields.size() != obj0.fields.size()) + return false; + + for (Object key : obj0.keys()) { + if (!fields.containsKey(key)) + return false; + + if (!obj0.getField(key).equals(getField(key))) + return false; + } + + return true; + } +}
