package org.exist.util.serializer.json;
import java.io.IOException;
import java.io.Writer;
public class JSONValue extends JSONNode {
public final static String NAME_VALUE = "#text";
private String content = null;
public JSONValue(String content) {
super(Type.VALUE_TYPE, NAME_VALUE);
this.content = escape(content);
}
public JSONValue() {
super(Type.VALUE_TYPE, NAME_VALUE);
}
public void addContent(String str) {
if (content == null)
content = str;
else
content += str;
}
@Override
public void serialize(Writer writer, boolean isRoot) throws IOException {
if (getNextOfSame() != null) {
writer.write("[");
JSONNode next = this;
while (next != null) {
next.serializeContent(writer);
next = next.getNextOfSame();
if (next != null)
writer.write(", ");
}
writer.write("]");
} else
serializeContent(writer);
}
@Override
public void serializeContent(Writer writer) throws IOException {
if (getSerializationType() != SerializationType.AS_LITERAL)
writer.write('"');
writer.write(content);
if (getSerializationType() != SerializationType.AS_LITERAL)
writer.write('"');
}
protected static String escape(String str) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
switch (ch) {
case '\n':
builder.append("\\n");
break;
case '\r':
break;
case '"':
builder.append("\\\"");
break;
default:
builder.append(ch);
break;
}
}
return builder.toString();
}
}