package foundation.json;
|
|
import java.io.UnsupportedEncodingException;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.text.DateFormat;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.List;
|
|
public class JSONBuilder implements IJSONWriter, IJSONProvider {
|
|
private StringBuilder writer;
|
private boolean encodeActive;
|
private boolean lowerNameActive;
|
private boolean empty;
|
private boolean nameReady;
|
private String operator;
|
|
public JSONBuilder() {
|
writer = new StringBuilder();
|
empty = true;
|
nameReady = false;
|
encodeActive = true;
|
lowerNameActive = true;
|
}
|
|
public void beginObject() {
|
if (!nameReady && !empty) {
|
writer.append(", ");
|
}
|
|
writer.append("{");
|
empty = true;
|
nameReady = false;
|
}
|
|
public void beginObject(String name) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
if (name != null) {
|
writer.append("\"" + formatName(name) + "\": {");
|
}
|
else {
|
writer.append("{");
|
}
|
|
empty = true;
|
}
|
|
public void endObject() {
|
writer.append("}");
|
empty = false;
|
nameReady = false;
|
}
|
|
public void beginArray() {
|
if (!nameReady && !empty) {
|
writer.append(", ");
|
}
|
|
writer.append("[");
|
empty = true;
|
nameReady = false;
|
}
|
|
public void beginArray(String name) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
if (name != null) {
|
writer.append("\"" + formatName(name) + "\": [");
|
}
|
else {
|
writer.append("[");
|
}
|
|
empty = true;
|
nameReady = false;
|
}
|
|
public void endArray() {
|
writer.append("]");
|
empty = false;
|
nameReady = false;
|
}
|
|
public void write(String name, String value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": \"" + formatValue(value) + "\"");
|
empty = false;
|
}
|
|
@Override
|
public void write(String value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatValue(value) + "\"");
|
empty = false;
|
}
|
|
public void write(String name, Integer value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": " + String.valueOf(value));
|
empty = false;
|
}
|
|
@Override
|
public void write(Integer value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append(String.valueOf(value));
|
empty = false;
|
}
|
|
public void write(String name, Double value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": " + String.valueOf(value));
|
empty = false;
|
}
|
|
@Override
|
public void write(Double value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append(String.valueOf(value));
|
empty = false;
|
}
|
|
public void write(String name, Long value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": " + String.valueOf(value));
|
empty = false;
|
}
|
|
@Override
|
public void write(Long value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append(String.valueOf(value));
|
empty = false;
|
}
|
|
public void write(String name, BigDecimal value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": " + String.valueOf(value));
|
empty = false;
|
}
|
|
@Override
|
public void write(BigDecimal value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append(String.valueOf(value));
|
empty = false;
|
}
|
|
public void write(String name, boolean value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": " + (value ? "true" : "false"));
|
empty = false;
|
}
|
|
@Override
|
public void write(boolean value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append((value ? "true" : "false"));
|
empty = false;
|
}
|
|
public void write(String name, Date value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + formatName(name) + "\": \"" + value + "\"");
|
empty = false;
|
}
|
|
public void write(String name, Date value, String fomater) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
if (value == null) {
|
writer.append("\"" + formatName(name) + "\": null");
|
empty = false;
|
return;
|
}
|
|
DateFormat dateFormat = new SimpleDateFormat(fomater);
|
String result = dateFormat.format(value);
|
|
writer.append("\"" + formatName(name) + "\": \"" + result + "\"");
|
empty = false;
|
}
|
|
@Override
|
public void write(Date value) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append("\"" + value + "\"");
|
empty = false;
|
}
|
|
public void write(String name, IJSONProvider jsonProvider) {
|
writeName(name);
|
|
if (jsonProvider == null) {
|
writeNull();
|
return;
|
}
|
|
jsonProvider.writeJSON(this);
|
}
|
|
public void write(String name, List<? extends IJSONProvider> list) {
|
writeName(name);
|
|
if (list == null) {
|
writeNull();
|
return;
|
}
|
|
beginArray();
|
|
for (IJSONProvider json: list) {
|
json.writeJSON(this);
|
}
|
|
endArray();
|
}
|
|
public void write(IJSONProvider jsonProvider) {
|
if (jsonProvider == null) {
|
writeNull();
|
return;
|
}
|
|
jsonProvider.writeJSON(this);
|
}
|
|
public void writeJSON(String name, String json) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
if (name != null) {
|
writer.append("\"" + formatName(name) + "\": " + json);
|
}
|
else {
|
writer.append(json);
|
}
|
|
empty = false;
|
}
|
|
public void writeNull(String name) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
if (name != null) {
|
writer.append("\"" + formatName(name) + "\": null");
|
}
|
else {
|
writer.append("null");
|
}
|
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeName(String name) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
if (name != null) {
|
writer.append("\"" + formatName(name) + "\": ");
|
}
|
|
nameReady = true;
|
}
|
|
public void writeValue(String value) {
|
writer.append("\"" + formatValue(value) + "\"");
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeValue(int value) {
|
writer.append(String.valueOf(value));
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeValue(BigDecimal value) {
|
writer.append(String.valueOf(value));
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeValue(boolean value) {
|
writer.append(value ? "true" : "false");
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeValue(Date value) {
|
writer.append("\"" + value + "\"");
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeNull() {
|
writer.append("null");
|
empty = false;
|
nameReady = false;
|
}
|
|
public void writeJSON(String json) {
|
if (!empty) {
|
writer.append(", ");
|
}
|
|
writer.append(json);
|
empty = false;
|
nameReady = false;
|
}
|
|
private String formatName(String name) {
|
if (name == null) {
|
return "empty";
|
}
|
|
if (!lowerNameActive) {
|
return name;
|
}
|
|
return name.toLowerCase();
|
}
|
|
public String formatValue(String value) {
|
String result = "";
|
|
if (value == null) {
|
return result;
|
}
|
|
if (!encodeActive) {
|
return value;
|
}
|
|
try {
|
result = URLEncoder.encode(value, "UTF-8");
|
result = result.replace("+", "%20");
|
}
|
catch (Exception e) {
|
result = value;
|
}
|
|
return result;
|
}
|
|
public void flush() {
|
|
}
|
|
public void close() {
|
|
}
|
|
public String toString() {
|
return writer.toString();
|
}
|
|
public byte[] getBytes() throws UnsupportedEncodingException {
|
String result = toString();
|
return result.getBytes("UTF-8");
|
}
|
|
@Override
|
public void checkEmpty() {
|
if (!empty) {
|
writer.append(", ");
|
}
|
}
|
|
@Override
|
public String getOperator() {
|
return operator;
|
}
|
|
public void setOperator(String operator) {
|
this.operator = operator;
|
}
|
|
public boolean isEncodeActive() {
|
return encodeActive;
|
}
|
|
public void setEncodeActive(boolean encodeActive) {
|
this.encodeActive = encodeActive;
|
}
|
|
public boolean isLowerNameActive() {
|
return lowerNameActive;
|
}
|
|
public void setLowerNameActive(boolean lowerNameActive) {
|
this.lowerNameActive = lowerNameActive;
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.writeJSON(this.writer.toString());
|
}
|
|
@Override
|
public void write(String name, Object value) {
|
// TODO Auto-generated method stub
|
|
}
|
}
|