This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 34f4cc2  [NO ISSUE][OTH] Make IAType IJsonSerializable
34f4cc2 is described below

commit 34f4cc2495529d5d69d7a0f0a7bb7445ba5f3083
Author: Ali Alsuliman <ali.al.solai...@gmail.com>
AuthorDate: Mon Feb 25 22:11:16 2019 -0800

    [NO ISSUE][OTH] Make IAType IJsonSerializable
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    This change is to make Asterix types IJsonSerializable.
    
    Change-Id: I26b57494da1c63497b63ceb0d4172b5768d3a614
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/3228
    Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
    Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Murtadha Hubail <mhub...@apache.org>
---
 .../asterix/app/io/PersistedResourceRegistry.java  |  12 ++
 .../apache/asterix/om/types/AOrderedListType.java  |  14 ++
 .../org/apache/asterix/om/types/ARecordType.java   |  39 ++++
 .../org/apache/asterix/om/types/AUnionType.java    |  28 +++
 .../asterix/om/types/AUnorderedListType.java       |  14 ++
 .../asterix/om/types/AbstractCollectionType.java   |  25 ++-
 .../asterix/om/types/AbstractComplexType.java      |   9 +
 .../org/apache/asterix/om/types/BuiltinType.java   | 231 +++++++++++++++++++++
 .../java/org/apache/asterix/om/types/IAType.java   |   3 +-
 9 files changed, 373 insertions(+), 2 deletions(-)

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
index d4c217b..11d1b26 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
@@ -59,6 +59,11 @@ import 
org.apache.asterix.metadata.utils.SecondaryCorrelatedTreeIndexOperationsH
 import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
 import org.apache.asterix.om.pointables.nonvisitor.AListPointable;
 import org.apache.asterix.om.pointables.nonvisitor.ARecordPointable;
+import org.apache.asterix.om.types.AOrderedListType;
+import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.AUnionType;
+import org.apache.asterix.om.types.AUnorderedListType;
+import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.runtime.compression.CompressionManager;
 import org.apache.asterix.runtime.utils.RuntimeComponentsProvider;
 import 
org.apache.asterix.transaction.management.opcallbacks.PrimaryIndexOperationTrackerFactory;
@@ -250,6 +255,13 @@ public class PersistedResourceRegistry implements 
IPersistedResourceRegistry {
         REGISTERED_CLASSES.put("UTF8WordTokenFactory", 
UTF8WordTokenFactory.class);
         REGISTERED_CLASSES.put("RTreePolicyType", RTreePolicyType.class);
 
+        // IAType
+        REGISTERED_CLASSES.put("BuiltinType", BuiltinType.class);
+        REGISTERED_CLASSES.put("AOrderedListType", AOrderedListType.class);
+        REGISTERED_CLASSES.put("ARecordType", ARecordType.class);
+        REGISTERED_CLASSES.put("AUnionType", AUnionType.class);
+        REGISTERED_CLASSES.put("AUnorderedListType", AUnorderedListType.class);
+
         //ICompressorDecompressorFactory
         
CompressionManager.registerCompressorDecompressorsFactoryClasses(REGISTERED_CLASSES);
     }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
index 7cb383f..097b4a7 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
@@ -19,7 +19,11 @@
 package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -84,4 +88,14 @@ public class AOrderedListType extends AbstractCollectionType 
{
         type.set("item-type", itemType.toJSON());
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws 
HyracksDataException {
+        return convertToJson(registry, getClass(), serialVersionUID);
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry 
registry, JsonNode json)
+            throws HyracksDataException {
+        return convertToObject(registry, json, true);
+    }
 }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
index 1c04986..b91b4ae 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
@@ -33,7 +33,12 @@ import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.utils.NonTaggedFormatUtil;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -47,6 +52,11 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 public class ARecordType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
+    private static final JavaType SET = 
OBJECT_MAPPER.getTypeFactory().constructCollectionType(Set.class, String.class);
+    private static final String IS_OPEN = "isOpen";
+    private static final String FIELD_NAMES = "fieldNames";
+    private static final String FIELD_TYPES = "fieldTypes";
+    private static final String ADDITIONAL_FIELDS = "additionalFieldNames";
     private final String[] fieldNames;
     private final IAType[] fieldTypes;
     private final Map<String, Integer> fieldNameToIndexMap = new HashMap<>();
@@ -372,6 +382,35 @@ public class ARecordType extends AbstractComplexType {
         return type;
     }
 
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws 
HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(getClass(), 
serialVersionUID);
+        addToJson(jsonObject);
+        jsonObject.put(IS_OPEN, isOpen);
+        jsonObject.putPOJO(FIELD_NAMES, fieldNames);
+        jsonObject.putPOJO(ADDITIONAL_FIELDS, allPossibleAdditionalFieldNames);
+        ArrayNode fieldTypesArray = OBJECT_MAPPER.createArrayNode();
+        for (int i = 0; i < fieldTypes.length; i++) {
+            fieldTypesArray.add(fieldTypes[i].toJson(registry));
+        }
+        jsonObject.set(FIELD_TYPES, fieldTypesArray);
+        return jsonObject;
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry 
registry, JsonNode json)
+            throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        boolean isOpen = json.get(IS_OPEN).asBoolean();
+        String[] fieldNames = 
OBJECT_MAPPER.convertValue(json.get(FIELD_NAMES), String[].class);
+        Set<String> additionalFields = 
OBJECT_MAPPER.convertValue(json.get(ADDITIONAL_FIELDS), SET);
+        ArrayNode fieldTypesNode = (ArrayNode) json.get(FIELD_TYPES);
+        IAType[] fieldTypes = new IAType[fieldTypesNode.size()];
+        for (int i = 0; i < fieldTypesNode.size(); i++) {
+            fieldTypes[i] = (IAType) 
registry.deserialize(fieldTypesNode.get(i));
+        }
+        return new ARecordType(typeName, fieldNames, fieldTypes, isOpen, 
additionalFields);
+    }
+
     public List<IAType> getFieldTypes(List<List<String>> fields) throws 
AlgebricksException {
         List<IAType> typeList = new ArrayList<>();
         for (List<String> field : fields) {
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
index f8ae7f8..7ef18d4 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
@@ -23,7 +23,11 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -32,6 +36,7 @@ public class AUnionType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
     private static final int OPTIONAL_TYPE_INDEX_IN_UNION_LIST = 0;
+    private static final String UNION_LIST_FIELD = "unionList";
     private final List<IAType> unionList;
 
     public AUnionType(List<IAType> unionList, String typeName) {
@@ -223,4 +228,27 @@ public class AUnionType extends AbstractComplexType {
         type.set("fields", fields);
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws 
HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(getClass(), 
serialVersionUID);
+        addToJson(jsonObject);
+        ArrayNode fieldTypesArray = OBJECT_MAPPER.createArrayNode();
+        for (int i = 0; i < unionList.size(); i++) {
+            fieldTypesArray.add(unionList.get(i).toJson(registry));
+        }
+        jsonObject.set(UNION_LIST_FIELD, fieldTypesArray);
+        return jsonObject;
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry 
registry, JsonNode json)
+            throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        ArrayNode unionListJson = (ArrayNode) json.get(UNION_LIST_FIELD);
+        List<IAType> unionList = new ArrayList<>();
+        for (int i = 0; i < unionListJson.size(); i++) {
+            unionList.add((IAType) registry.deserialize(unionListJson.get(i)));
+        }
+        return new AUnionType(unionList, typeName);
+    }
 }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
index 8d088f7..0b458dd 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
@@ -19,7 +19,11 @@
 package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -84,4 +88,14 @@ public class AUnorderedListType extends 
AbstractCollectionType {
         type.set("item-type", itemType.toJSON());
         return type;
     }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) throws 
HyracksDataException {
+        return convertToJson(registry, getClass(), serialVersionUID);
+    }
+
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry 
registry, JsonNode json)
+            throws HyracksDataException {
+        return convertToObject(registry, json, false);
+    }
 }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
index f6f10f4..1b2b8fe 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractCollectionType.java
@@ -18,10 +18,17 @@
  */
 package org.apache.asterix.om.types;
 
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractCollectionType extends AbstractComplexType {
 
     private static final long serialVersionUID = 1L;
-
+    private static final String ITEM_TYPE_FIELD = "itemType";
     protected IAType itemType;
 
     AbstractCollectionType(IAType itemType, String typeName) {
@@ -59,4 +66,20 @@ public abstract class AbstractCollectionType extends 
AbstractComplexType {
     public boolean containsType(IAType type) {
         return isTyped() && itemType.getTypeName().equals(type.getTypeName());
     }
+
+    protected JsonNode convertToJson(IPersistedResourceRegistry registry, 
Class<? extends IJsonSerializable> clazz,
+            long version) throws HyracksDataException {
+        final ObjectNode jsonObject = registry.getClassIdentifier(clazz, 
version);
+        addToJson(jsonObject);
+        jsonObject.set(ITEM_TYPE_FIELD, itemType.toJson(registry));
+        return jsonObject;
+    }
+
+    protected static IJsonSerializable 
convertToObject(IPersistedResourceRegistry registry, JsonNode json,
+            boolean ordered) throws HyracksDataException {
+        String typeName = json.get(TYPE_NAME_FIELD).asText();
+        JsonNode itemTypeJson = json.get(ITEM_TYPE_FIELD);
+        IAType itemType = (IAType) registry.deserialize(itemTypeJson);
+        return ordered ? new AOrderedListType(itemType, typeName) : new 
AUnorderedListType(itemType, typeName);
+    }
 }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
index f8b1d60..16f83f5 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
@@ -20,9 +20,14 @@ package org.apache.asterix.om.types;
 
 import org.apache.asterix.om.base.IAObject;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractComplexType implements IAType {
 
     private static final long serialVersionUID = 1L;
+    protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    protected static final String TYPE_NAME_FIELD = "typeName";
     protected String typeName;
 
     public AbstractComplexType(String typeName) {
@@ -45,5 +50,9 @@ public abstract class AbstractComplexType implements IAType {
         return object instanceof IAObject && deepEqual((IAObject) object);
     }
 
+    protected void addToJson(final ObjectNode json) {
+        json.put(TYPE_NAME_FIELD, typeName);
+    }
+
     public abstract boolean containsType(IAType type);
 }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
index 2e48127..4fc146f 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
@@ -18,14 +18,20 @@
  */
 package org.apache.asterix.om.types;
 
+import static org.apache.asterix.om.types.ATypeTag.VALUE_TYPE_MAPPING;
+
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.io.IJsonSerializable;
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public abstract class BuiltinType implements IAType {
 
     private static final long serialVersionUID = 1L;
+    private static final String TAG_FIELD = "tag";
 
     public abstract static class LowerCaseConstructorType extends BuiltinType {
         private static final long serialVersionUID = 1L;
@@ -62,6 +68,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -90,6 +101,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -118,6 +134,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -146,6 +167,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -174,6 +200,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -202,6 +233,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -230,6 +266,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -258,6 +299,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -286,6 +332,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -314,6 +365,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -342,6 +398,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -370,6 +431,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -398,6 +464,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -426,6 +497,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -454,6 +530,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -482,6 +563,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -510,6 +596,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -538,6 +629,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -566,6 +662,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             return null;
         }
@@ -591,6 +692,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -619,6 +725,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -647,6 +758,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -675,6 +791,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -703,6 +824,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectNode type = new ObjectMapper().createObjectNode();
             type.put("type", "AGEOMETRY");
@@ -730,6 +856,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -758,6 +889,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -786,6 +922,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -813,6 +954,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -846,6 +992,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -879,6 +1030,11 @@ public abstract class BuiltinType implements IAType {
         }
 
         @Override
+        public JsonNode toJson(IPersistedResourceRegistry registry) {
+            return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+        }
+
+        @Override
         public ObjectNode toJSON() {
             ObjectMapper om = new ObjectMapper();
             ObjectNode type = om.createObjectNode();
@@ -925,4 +1081,79 @@ public abstract class BuiltinType implements IAType {
         return getType().getTypeTag().serialize();
     }
 
+    private static JsonNode convertToJson(IPersistedResourceRegistry registry, 
short tag, long version) {
+        ObjectNode jsonNode = registry.getClassIdentifier(BuiltinType.class, 
version);
+        jsonNode.put(TAG_FIELD, tag);
+        return jsonNode;
+    }
+
+    @SuppressWarnings("squid:S1172") // unused parameter
+    public static IJsonSerializable fromJson(IPersistedResourceRegistry 
registry, JsonNode json) {
+        byte tag = (byte) json.get(TAG_FIELD).shortValue();
+        ATypeTag typeTag = VALUE_TYPE_MAPPING[tag];
+        switch (typeTag) {
+            case TYPE:
+                return ALL_TYPE;
+            case TINYINT:
+                return AINT8;
+            case SMALLINT:
+                return AINT16;
+            case INTEGER:
+                return AINT32;
+            case BIGINT:
+                return AINT64;
+            case FLOAT:
+                return AFLOAT;
+            case DOUBLE:
+                return ADOUBLE;
+            case STRING:
+                return ASTRING;
+            case BINARY:
+                return ABINARY;
+            case MISSING:
+                return AMISSING;
+            case NULL:
+                return ANULL;
+            case BOOLEAN:
+                return ABOOLEAN;
+            case TIME:
+                return ATIME;
+            case DATE:
+                return ADATE;
+            case DATETIME:
+                return ADATETIME;
+            case DURATION:
+                return ADURATION;
+            case YEARMONTHDURATION:
+                return AYEARMONTHDURATION;
+            case DAYTIMEDURATION:
+                return ADAYTIMEDURATION;
+            case INTERVAL:
+                return AINTERVAL;
+            case POINT:
+                return APOINT;
+            case POINT3D:
+                return APOINT3D;
+            case LINE:
+                return ALINE;
+            case POLYGON:
+                return APOLYGON;
+            case GEOMETRY:
+                return AGEOMETRY;
+            case CIRCLE:
+                return ACIRCLE;
+            case RECTANGLE:
+                return ARECTANGLE;
+            case BITARRAY:
+                return ABITARRAY;
+            case UUID:
+                return AUUID;
+            case ANY:
+                return ANY;
+            case SHORTWITHOUTTYPEINFO:
+                return SHORTWITHOUTTYPEINFO;
+            default:
+                throw new IllegalStateException();
+        }
+    }
 }
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
index aa9ce99..0e6cc4f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
@@ -21,8 +21,9 @@ package org.apache.asterix.om.types;
 import java.io.Serializable;
 
 import org.apache.asterix.om.base.IAObject;
+import org.apache.hyracks.api.io.IJsonSerializable;
 
-public interface IAType extends IAObject, Serializable {
+public interface IAType extends IAObject, Serializable, IJsonSerializable {
 
     public ATypeTag getTypeTag();
 

Reply via email to