ASTERIXDB-1714: Eliminate dependency on org.json
Change-Id: Ie9c5400fd134ae75d43385255af7794e968b1c7e
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1392
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
BAD: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <tillw@apache.org>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/pom.xml b/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/pom.xml
index dccbcb1..2fa86b4 100644
--- a/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/pom.xml
+++ b/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/pom.xml
@@ -48,9 +48,12 @@
<version>2.2.1</version>
</dependency>
<dependency>
- <groupId>org.json</groupId>
- <artifactId>json</artifactId>
- <type>jar</type>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
</dependency>
</dependencies>
</project>
diff --git a/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java b/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java
index d7479bc..909edc3 100644
--- a/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java
+++ b/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java
@@ -33,7 +33,6 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
-import org.json.JSONException;
/**
* @goal generate-record-manager
@@ -95,8 +94,6 @@
type.addToMap(typeMap);
} catch (FileNotFoundException fnfe) {
throw new MojoExecutionException("could not find type description file " + inputFiles[i], fnfe);
- } catch (JSONException jse) {
- throw new MojoExecutionException("could not parse type description file " + inputFiles[i], jse);
} catch (IOException e) {
throw new MojoExecutionException("error closing type description file " + inputFiles[i], e);
}
diff --git a/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java b/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java
index 6702a8f..d322371 100644
--- a/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java
+++ b/asterixdb/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java
@@ -19,26 +19,41 @@
package org.apache.asterix.recordmanagergenerator;
+import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.json.JSONTokener;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
public class RecordType {
enum Type {
- BYTE (1, "byte", "get", "put", "(byte)0xde", "TypeUtil.Byte.append", "TypeUtil.Byte.appendFixed"),
- SHORT (2, "short", "getShort", "putShort", "(short)0xdead", "TypeUtil.Short.append", "TypeUtil.Short.appendFixed"),
- INT (4, "int", "getInt", "putInt", "0xdeadbeef", "TypeUtil.Int.append", "TypeUtil.Int.appendFixed"),
- GLOBAL(8, "long", "getLong", "putLong", "0xdeadbeefdeadbeefl", "TypeUtil.Global.append", "TypeUtil.Global.appendFixed");
+ BYTE(1, "byte", "get", "put", "(byte)0xde", "TypeUtil.Byte.append", "TypeUtil.Byte.appendFixed"),
+ SHORT(
+ 2,
+ "short",
+ "getShort",
+ "putShort",
+ "(short)0xdead",
+ "TypeUtil.Short.append",
+ "TypeUtil.Short.appendFixed"),
+ INT(4, "int", "getInt", "putInt", "0xdeadbeef", "TypeUtil.Int.append", "TypeUtil.Int.appendFixed"),
+ GLOBAL(
+ 8,
+ "long",
+ "getLong",
+ "putLong",
+ "0xdeadbeefdeadbeefl",
+ "TypeUtil.Global.append",
+ "TypeUtil.Global.appendFixed");
- Type(int size, String javaType, String bbGetter, String bbSetter, String deadMemInitializer, String appender, String tabAppender) {
+ Type(int size, String javaType, String bbGetter, String bbSetter, String deadMemInitializer, String appender,
+ String tabAppender) {
this.size = size;
this.javaType = javaType;
this.bbGetter = bbGetter;
@@ -73,10 +88,10 @@
this.accessible = accessible;
}
- public static Field fromJSON(JSONObject obj) throws JSONException {
- String name = obj.getString("name");
- Type type = parseType(obj.getString("type"));
- String initial = obj.optString("initial", null);
+ public static Field fromJSON(JsonNode obj) {
+ String name = obj.get("name").asText();
+ Type type = parseType(obj.get("type").asText());
+ String initial = obj.get("initial") == null ? null : obj.get("initial").asText();
return new Field(name, type, initial, -1, true);
}
@@ -96,7 +111,7 @@
String methodName(String prefix) {
String words[] = name.split(" ");
- assert(words.length > 0);
+ assert words.length > 0;
StringBuilder sb = new StringBuilder(prefix);
for (int j = 0; j < words.length; ++j) {
String word = words[j];
@@ -108,11 +123,8 @@
StringBuilder appendMemoryManagerGetMethod(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
- sb.append("public ")
- .append(type.javaType)
- .append(' ')
- .append(methodName("get"))
- .append("(int slotNum) {\n");
+ sb.append("public ").append(type.javaType).append(' ').append(methodName("get"))
+ .append("(int slotNum) {\n");
sb = indent(sb, indent, level + 1);
sb.append("final Buffer buf = buffers.get(slotNum / NO_SLOTS);\n");
sb = indent(sb, indent, level + 1);
@@ -120,11 +132,8 @@
sb = indent(sb, indent, level + 1);
sb.append("final ByteBuffer b = buf.bb;\n");
sb = indent(sb, indent, level + 1);
- sb.append("return b.")
- .append(type.bbGetter)
- .append("((slotNum % NO_SLOTS) * ITEM_SIZE + ")
- .append(offsetName())
- .append(");\n");
+ sb.append("return b.").append(type.bbGetter).append("((slotNum % NO_SLOTS) * ITEM_SIZE + ")
+ .append(offsetName()).append(");\n");
sb = indent(sb, indent, level);
sb.append("}\n");
return sb;
@@ -132,19 +141,13 @@
StringBuilder appendMemoryManagerSetMethod(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
- sb.append("public void ")
- .append(methodName("set"))
- .append("(int slotNum, ")
- .append(type.javaType)
- .append(" value) {\n");
+ sb.append("public void ").append(methodName("set")).append("(int slotNum, ").append(type.javaType)
+ .append(" value) {\n");
sb = indent(sb, indent, level + 1);
sb.append("final ByteBuffer b = buffers.get(slotNum / NO_SLOTS).bb;\n");
sb = indent(sb, indent, level + 1);
- sb.append("b.")
- .append(type.bbSetter)
- .append("((slotNum % NO_SLOTS) * ITEM_SIZE + ")
- .append(offsetName())
- .append(", value);\n");
+ sb.append("b.").append(type.bbSetter).append("((slotNum % NO_SLOTS) * ITEM_SIZE + ").append(offsetName())
+ .append(", value);\n");
sb = indent(sb, indent, level);
sb.append("}\n");
return sb;
@@ -152,23 +155,18 @@
StringBuilder appendArenaManagerGetMethod(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
- sb.append("public ")
- .append(type.javaType)
- .append(' ')
- .append(methodName("get"))
- .append("(long slotNum) {\n");
+ sb.append("public ").append(type.javaType).append(' ').append(methodName("get"))
+ .append("(long slotNum) {\n");
if (initial != null) {
- sb = indent(sb, indent, level + 1);
- sb.append("if (TRACK_ALLOC_ID) checkAllocId(slotNum);\n");
+ sb = indent(sb, indent, level + 1);
+ sb.append("if (TRACK_ALLOC_ID) checkAllocId(slotNum);\n");
}
sb = indent(sb, indent, level + 1);
sb.append("final int arenaId = TypeUtil.Global.arenaId(slotNum);\n");
sb = indent(sb, indent, level + 1);
sb.append("final int localId = TypeUtil.Global.localId(slotNum);\n");
sb = indent(sb, indent, level + 1);
- sb.append("return get(arenaId).")
- .append(methodName("get"))
- .append("(localId);\n");
+ sb.append("return get(arenaId).").append(methodName("get")).append("(localId);\n");
sb = indent(sb, indent, level);
sb.append("}\n");
return sb;
@@ -176,23 +174,18 @@
StringBuilder appendArenaManagerSetMethod(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
- sb.append("public void ")
- .append(methodName("set"))
- .append("(long slotNum, ")
- .append(type.javaType)
- .append(" value) {\n");
+ sb.append("public void ").append(methodName("set")).append("(long slotNum, ").append(type.javaType)
+ .append(" value) {\n");
if (initial != null) {
- sb = indent(sb, indent, level + 1);
- sb.append("if (TRACK_ALLOC_ID) checkAllocId(slotNum);\n");
+ sb = indent(sb, indent, level + 1);
+ sb.append("if (TRACK_ALLOC_ID) checkAllocId(slotNum);\n");
}
sb = indent(sb, indent, level + 1);
sb.append("final int arenaId = TypeUtil.Global.arenaId(slotNum);\n");
sb = indent(sb, indent, level + 1);
sb.append("final int localId = TypeUtil.Global.localId(slotNum);\n");
sb = indent(sb, indent, level + 1);
- sb.append("get(arenaId).")
- .append(methodName("set"))
- .append("(localId, value);\n");
+ sb.append("get(arenaId).").append(methodName("set")).append("(localId, value);\n");
sb = indent(sb, indent, level);
sb.append("}\n");
return sb;
@@ -200,11 +193,7 @@
StringBuilder appendInitializers(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
- sb.append("bb.")
- .append(type.bbSetter)
- .append("(slotNum * ITEM_SIZE + ")
- .append(offsetName())
- .append(", ");
+ sb.append("bb.").append(type.bbSetter).append("(slotNum * ITEM_SIZE + ").append(offsetName()).append(", ");
if (initial != null) {
sb.append(initial);
} else {
@@ -219,17 +208,11 @@
return sb;
}
sb = indent(sb, indent, level);
- sb.append("if (bb.")
- .append(type.bbGetter)
- .append("(itemOffset + ")
- .append(offsetName())
- .append(") == ")
- .append(type.deadMemInitializer)
- .append(") {\n");
+ sb.append("if (bb.").append(type.bbGetter).append("(itemOffset + ").append(offsetName()).append(") == ")
+ .append(type.deadMemInitializer).append(") {\n");
sb = indent(sb, indent, level + 1);
- sb.append("String msg = \"invalid value in field ")
- .append(offsetName())
- .append(" of slot \" + TypeUtil.Global.toString(slotNum);\n");
+ sb.append("String msg = \"invalid value in field ").append(offsetName())
+ .append(" of slot \" + TypeUtil.Global.toString(slotNum);\n");
sb = indent(sb, indent, level + 1);
sb.append("throw new IllegalStateException(msg);\n");
sb = indent(sb, indent, level);
@@ -239,7 +222,7 @@
String offsetName() {
String words[] = name.split(" ");
- assert(words.length > 0);
+ assert (words.length > 0);
StringBuilder sb = new StringBuilder(words[0].toUpperCase());
for (int j = 1; j < words.length; ++j) {
sb.append("_").append(words[j].toUpperCase());
@@ -271,18 +254,17 @@
addField("next free slot", Type.INT, "-1", false);
}
- public static RecordType read(Reader reader) throws JSONException {
- JSONTokener tok = new JSONTokener(reader);
- JSONObject obj = new JSONObject(tok);
- return fromJSON(obj);
+ public static RecordType read(Reader reader) throws IOException {
+ ObjectNode node = new ObjectMapper().readValue(reader, ObjectNode.class);
+ return fromJSON(node);
}
- public static RecordType fromJSON(JSONObject obj) throws JSONException {
- RecordType result = new RecordType(obj.getString("name"));
- JSONArray fields = obj.getJSONArray("fields");
- for (int i = 0; i < fields.length(); ++i) {
- JSONObject field = fields.getJSONObject(i);
- result.fields.add(Field.fromJSON(field));
+ public static RecordType fromJSON(ObjectNode obj) {
+ RecordType result = new RecordType(obj.get("name").asText());
+ JsonNode fields = obj.get("fields");
+ for (int i = 0; i < fields.size(); i++) {
+ JsonNode n = fields.get(i);
+ result.fields.add(Field.fromJSON(n));
}
return result;
}
@@ -298,7 +280,7 @@
}
private void addField(String name, Type type, String initial, boolean accessible) {
- if (! modifiable) {
+ if (!modifiable) {
throw new IllegalStateException("cannot modify type anmore");
}
fields.add(new Field(name, type, initial, -1, accessible));
@@ -319,7 +301,9 @@
field.offset = totalSize;
final int size = field.type.size;
totalSize += size;
- if (size > alignment) alignment = size;
+ if (size > alignment) {
+ alignment = size;
+ }
}
if (totalSize % alignment != 0) {
totalSize = ((totalSize / alignment) + 1) * alignment;
@@ -340,17 +324,12 @@
StringBuilder appendConstants(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
- sb.append("public static int ITEM_SIZE = ")
- .append(totalSize)
- .append(";\n");
+ sb.append("public static int ITEM_SIZE = ").append(totalSize).append(";\n");
for (int i = 0; i < fields.size(); ++i) {
final Field field = fields.get(i);
sb = indent(sb, indent, level);
- sb.append("public static int ")
- .append(field.offsetName())
- .append(" = ")
- .append(field.offset).append("; // size: ")
- .append(field.type.size).append("\n");
+ sb.append("public static int ").append(field.offsetName()).append(" = ").append(field.offset)
+ .append("; // size: ").append(field.type.size).append("\n");
}
return sb;
}
@@ -366,22 +345,14 @@
for (int i = 0; i < fields.size(); ++i) {
final Field field = fields.get(i);
sb = indent(sb, indent, level);
- sb.append("sb.append(\"")
- .append(padRight(field.name, maxNameWidth))
- .append(" | \");\n");
+ sb.append("sb.append(\"").append(padRight(field.name, maxNameWidth)).append(" | \");\n");
sb = indent(sb, indent, level);
sb.append("for (int i = 0; i < NO_SLOTS; ++i) {\n");
sb = indent(sb, indent, level + 1);
- sb.append(field.type.javaType)
- .append(" value = bb.")
- .append(field.type.bbGetter)
- .append("(i * ITEM_SIZE + ")
- .append(field.offsetName())
- .append(");\n");
+ sb.append(field.type.javaType).append(" value = bb.").append(field.type.bbGetter)
+ .append("(i * ITEM_SIZE + ").append(field.offsetName()).append(");\n");
sb = indent(sb, indent, level + 1);
- sb.append("sb = ")
- .append(field.type.tabAppender)
- .append("(sb, value);\n");
+ sb.append("sb = ").append(field.type.tabAppender).append("(sb, value);\n");
sb = indent(sb, indent, level + 1);
sb.append("sb.append(\" | \");\n");
sb = indent(sb, indent, level);