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();