package com.owent.xresloader.data.dst;
import com.owent.xresloader.ProgramOptions;
import com.owent.xresloader.data.err.ConvException;
import com.owent.xresloader.scheme.SchemeConf;
import org.json.JSONArray;
import org.json.JSONObject;
import java.nio.charset.Charset;
import java.util.HashMap;
/**
* Created by owentou on 2014/10/10.
*/
public class DataDstJson extends DataDstJava {
@Override
public boolean init() {
return true;
}
/**
* @return 协议处理器名字
*/
public String name() {
return "json";
}
@Override
public final byte[] build(DataDstImpl compiler) throws ConvException {
JSONArray wrapper = new JSONArray();
DataDstJava.DataDstObject data_obj = build_data(compiler);
wrapper.put(data_obj.header);
wrapper.put(data_obj.body);
String encoded = wrapper.toString(ProgramOptions.getInstance().prettyIndent);
// 带编码的输出
String encoding = SchemeConf.getInstance().getKey().getEncoding();
if (null == encoding || encoding.isEmpty())
return encoded.getBytes();
return encoded.getBytes(Charset.forName(encoding));
}
@Override
public final DataDstWriterNode compile() {
ProgramOptions.getLoger().error("json can not be protocol description.");
return null;
}
/**
* 转储常量数据
* @return 常量数据,不支持的时候返回空
*/
public final byte[] dumpConst(HashMap<String, Object> data) {
JSONObject wrapper = null;
if (null != data) {
wrapper = new JSONObject(data);
} else {
wrapper = new JSONObject();
}
String encoded = wrapper.toString(ProgramOptions.getInstance().prettyIndent);
// 带编码的输出
String encoding = SchemeConf.getInstance().getKey().getEncoding();
if (null == encoding || encoding.isEmpty())
return encoded.getBytes();
return encoded.getBytes(Charset.forName(encoding));
}
}