package org.exist.util.serializer.json; import java.io.IOException; import java.io.Writer; public abstract class JSONNode { protected final static String ANONYMOUS_OBJECT = "#anonymous"; public static enum SerializationType { AS_STRING, AS_ARRAY, AS_LITERAL }; public static enum Type { OBJECT_TYPE, VALUE_TYPE, SIMPLE_PROPERTY_TYPE }; private Type type; private String name; private SerializationType writeAs = SerializationType.AS_STRING; private JSONNode next = null; private JSONNode nextOfSame = null; public JSONNode(Type type, String name) { this.type = type; this.name = name; } public abstract void serialize(Writer writer, boolean isRoot) throws IOException; public abstract void serializeContent(Writer writer) throws IOException; public Type getType() { return type; } public boolean isNamed() { return getName() != ANONYMOUS_OBJECT; } public boolean isArray() { return getNextOfSame() != null || getSerializationType() == SerializationType.AS_ARRAY; } public SerializationType getSerializationType() { return writeAs; } public void setSerializationType(SerializationType type) { writeAs = type; } public JSONNode getNextOfSame() { return nextOfSame; } public void setNextOfSame(JSONNode nextOfSame) { if (this.nextOfSame == null) this.nextOfSame = nextOfSame; else { JSONNode current = this.nextOfSame; while (current.nextOfSame != null) { current = current.nextOfSame; } current.nextOfSame = nextOfSame; } } public void setNext(JSONNode next) { this.next = next; } public JSONNode getNext() { return next; } public String getName() { return name; } public void setName(String name) { this.name = name; } }