You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2015/08/26 12:32:30 UTC

[2/3] ignite git commit: # GG-1223 Fix serialization GridCacheSqlMetadata, GridCacheSqlIndexMetadata for metadata.

# GG-1223 Fix serialization GridCacheSqlMetadata, GridCacheSqlIndexMetadata for metadata.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bd067772
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bd067772
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bd067772

Branch: refs/heads/ignite-843
Commit: bd06777237a50f0d41758cfd8a129f9b10727841
Parents: 3cbe58c
Author: Andrey <an...@gridgain.com>
Authored: Wed Aug 26 17:24:01 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Aug 26 17:24:01 2015 +0700

----------------------------------------------------------------------
 .../http/jetty/GridJettyJsonConfig.java         | 142 +++++++++++++++----
 1 file changed, 118 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/bd067772/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java
----------------------------------------------------------------------
diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java
index 8d00249..8cd9cb4 100644
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java
@@ -19,7 +19,9 @@ package org.apache.ignite.internal.processors.rest.protocols.http.jetty;
 
 import net.sf.json.*;
 import net.sf.json.processors.*;
+import org.apache.ignite.internal.processors.cache.query.*;
 
+import java.text.*;
 import java.util.*;
 
 /**
@@ -33,63 +35,155 @@ public class GridJettyJsonConfig extends JsonConfig {
         registerJsonValueProcessor(UUID.class, new UUIDToStringJsonProcessor());
         registerJsonValueProcessor(Date.class, new DateToStringJsonProcessor());
         registerJsonValueProcessor(java.sql.Date.class, new DateToStringJsonProcessor());
+
+        registerJsonBeanProcessor(GridCacheSqlMetadata.class, new GridCacheSqlMetadataBeanProcessor());
+        registerJsonValueProcessor(GridCacheSqlIndexMetadata.class, new GridCacheSqlIndexMetadataToJson());
+
+        setJsonBeanProcessorMatcher(new GridJettyJsonBeanProcessorMatcher());
+        setJsonValueProcessorMatcher(new GridJettyJsonValueProcessorMatcher());
     }
 
     /**
-     * Helper class for simple to-string conversion for the beans.
+     * Helper class for simple to-string conversion for {@link UUID}.
      */
     private static class UUIDToStringJsonProcessor implements JsonValueProcessor {
         /** {@inheritDoc} */
         @Override public Object processArrayValue(Object val, JsonConfig jsonCfg) {
+            if (val == null)
+                return new JSONObject(true);
+
             if (val instanceof UUID)
                 return val.toString();
 
-            if (val instanceof UUID[]) {
-                UUID[] uuids = (UUID[])val;
+            throw new UnsupportedOperationException("Serialize value to json is not supported: " + val);
+        }
 
-                String[] result = new String[uuids.length];
+        /** {@inheritDoc} */
+        @Override public Object processObjectValue(String key, Object val, JsonConfig jsonCfg) {
+            return processArrayValue(val, jsonCfg);
+        }
+    }
 
-                for (int i = 0; i < uuids.length; i++)
-                    result[i] = uuids[i] == null ? null : uuids[i].toString();
+    /**
+     * Helper class for simple to-string conversion for {@link Date}.
+     */
+    private static class DateToStringJsonProcessor implements JsonValueProcessor {
+        private final DateFormat enUsFormat
+            =  DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.US);
 
-                return result;
-            }
+        /** {@inheritDoc} */
+        @Override public synchronized Object processArrayValue(Object val, JsonConfig jsonCfg) {
+            if (val == null)
+                return new JSONObject(true);
+            
+            if (val instanceof Date)
+                return enUsFormat.format(val);
 
-            throw new UnsupportedOperationException("Serialize array to string is not supported: " + val);
+            throw new UnsupportedOperationException("Serialize value to json is not supported: " + val);
         }
 
         /** {@inheritDoc} */
-        @Override public Object processObjectValue(String key, Object val, JsonConfig jsonCfg) {
-            return val == null ? null : val.toString();
+        @Override public synchronized Object processObjectValue(String key, Object val, JsonConfig jsonCfg) {
+            return processArrayValue(val, jsonCfg);
         }
     }
 
     /**
-     * Helper class for simple to-string conversion for the beans.
+     * Helper class for simple to-json conversion for {@link GridCacheSqlMetadata}.
      */
-    private static class DateToStringJsonProcessor implements JsonValueProcessor {
+    private static class GridCacheSqlMetadataBeanProcessor implements JsonBeanProcessor {
         /** {@inheritDoc} */
-        @Override public Object processArrayValue(Object val, JsonConfig jsonCfg) {
-            if (val instanceof Date)
-                return val.toString();
+        @Override public JSONObject processBean(Object bean, JsonConfig jsonCfg) {
+            if (bean == null)
+                return new JSONObject(true);
+
+            if (bean instanceof GridCacheSqlMetadata) {
+                GridCacheSqlMetadata r = (GridCacheSqlMetadata) bean;
+
+                return new JSONObject()
+                    .element("cacheName", r.cacheName(), jsonCfg)
+                    .element("types", r.types(), jsonCfg)
+                    .element("keyClasses", r.keyClasses(), jsonCfg)
+                    .element("valClasses", r.valClasses(), jsonCfg)
+                    .element("fields", r.fields(), jsonCfg)
+                    .element("indexes", r.indexes(), jsonCfg);
+            }
 
-            if (val instanceof Date[]) {
-                Date[] dates = (Date[])val;
+            throw new UnsupportedOperationException("Serialize bean to json is not supported: " + bean);
+        }
+    }
 
-                String[] result = new String[dates.length];
+    /**
+     * Helper class for simple to-json conversion for {@link GridCacheSqlIndexMetadata}.
+     */
+    private static class GridCacheSqlIndexMetadataToJson implements JsonValueProcessor {
+        /** {@inheritDoc} */
+        @Override public Object processArrayValue(Object val, JsonConfig jsonCfg) {
+            if (val == null)
+                return new JSONObject(true);
 
-                for (int i = 0; i < dates.length; i++)
-                    result[i] = dates[i] == null ? null : dates[i].toString();
+            if (val instanceof GridCacheSqlIndexMetadata) {
+                GridCacheSqlIndexMetadata r = (GridCacheSqlIndexMetadata) val;
 
-                return result;
+                return new JSONObject()
+                    .element("name", r.name())
+                    .element("fields", r.fields())
+                    .element("descendings", r.descendings())
+                    .element("unique", r.unique());
             }
 
             throw new UnsupportedOperationException("Serialize array to string is not supported: " + val);
         }
 
         /** {@inheritDoc} */
-        @Override public Object processObjectValue(String key, Object val, JsonConfig jsonConfig) {
-            return val == null ? null : val.toString();
+        @Override public Object processObjectValue(String key, Object value, JsonConfig jsonCfg) {
+            return processArrayValue(value, jsonCfg);
+        }
+    }
+
+    /**
+     * Class for finding a matching JsonBeanProcessor. Matches the target class with instanceOf.
+     */
+    private static final class GridJettyJsonBeanProcessorMatcher extends JsonBeanProcessorMatcher {
+        /** {@inheritDoc} */
+        @Override public Object getMatch(Class target, Set keys) {
+            if (target == null || keys == null)
+                return null;
+
+            if (keys.contains(target))
+                return target;
+
+            for (Object key : keys) {
+                Class<?> clazz = (Class<?>) key;
+
+                if (clazz.isAssignableFrom(target))
+                    return key;
+            }
+
+            return null;
+        }
+    }
+
+    /**
+     * Class for finding a matching JsonValueProcessor. Matches the target class with instanceOf.
+     */
+    private static final class GridJettyJsonValueProcessorMatcher extends JsonValueProcessorMatcher {
+        /** {@inheritDoc} */
+        @Override public Object getMatch(Class target, Set keys) {
+            if (target == null || keys == null)
+                return null;
+
+            if (keys.contains(target))
+                return target;
+
+            for (Object key : keys) {
+                Class<?> clazz = (Class<?>) key;
+
+                if (clazz.isAssignableFrom(target))
+                    return key;
+            }
+
+            return null;
         }
     }
 }