package open.dolphin.touch;
import java.io.IOException;
import java.io.StringWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import open.dolphin.infomodel.*;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
/**
*
* @author kazushi Minagawa.
*/
public class JSONStampBuilder {
public String build(InfoModel model) {
if (model==null) {
return null;
}
if (model instanceof BundleDolphin) {
return createBundleJSON(model);
} else if (model instanceof RegisteredDiagnosisModel) {
return createDiagnosisJSON(model);
} else if (model instanceof TextStampModel) {
return createTextStampJSON(model);
}
return null;
}
private String createBundleJSON(InfoModel model) {
BundleDolphin bundle = (BundleDolphin)model;
String className = bundle.getClassName(); // 診療行為名
String classCode = bundle.getClassCode(); // 診療行為コード
String classCodeSystem = bundle.getClassCodeSystem(); // コード体系
String admin = bundle.getAdmin(); // 用法
String adminCode = bundle.getAdminCode(); // 用法コード
String adminCodeSystem = bundle.getAdminCodeSystem(); // 用法コード体系
String adminMemo = bundle.getAdminMemo(); // 用法メモ
String bundleNumber = bundle.getBundleNumber(); // バンドル数
ClaimItem[] items = bundle.getClaimItem(); // バンドル構成品目
String memo = bundle.getMemo(); // メモ
String insurance = bundle.getInsurance(); // 保険種別
String orderName = bundle.getOrderName();
StringBuilder sb = new StringBuilder();
sb.append("{");
stringProp("className",className,sb,true);
stringProp("classCode",classCode,sb,true);
stringProp("classCodeSystem",classCodeSystem,sb,true);
stringProp("admin",admin,sb,true);
stringProp("adminCode",adminCode,sb,true);
stringProp("adminCodeSystem",adminCodeSystem,sb,true);
stringProp("adminMemo",adminMemo,sb,true);
stringProp("bundleNumber",bundleNumber,sb,true);
stringProp("memo",memo,sb,true);
stringProp("insurance",insurance,sb,true);
stringProp("orderName",orderName,sb,true);
sb.append(addQouteColon("claimItem")).append("[");
for (int i=0; i<items.length;i++) {
ClaimItem ci = items[i];
sb.append("{");
stringProp("name",ci.getName(),sb,true);
stringProp("code",ci.getCode(),sb,true);
stringProp("codeSystem",ci.getCodeSystem(),sb,true);
stringProp("classCode",ci.getClassCode(),sb,true);
stringProp("classCodeSystem",ci.getClassCodeSystem(),sb,true);
stringProp("number",ci.getNumber(),sb,true);
stringProp("unit",ci.getUnit(),sb,true);
stringProp("numberCode",ci.getNumberCode(),sb,true);
stringProp("numberCodeSystem",ci.getNumberCodeSystem(),sb,true);
stringProp("memo",ci.getMemo(),sb,true);
stringProp("ykzKbn",ci.getYkzKbn(),sb,false);
//s.oh^ 予防医学
if(sb.toString().lastIndexOf(",") == sb.toString().length() - 1) {
sb = sb.deleteCharAt(sb.length() - 1);
}
//s.oh$
sb.append("}");
if (!(i==items.length-1)) {
sb.append(",");
}
}
sb.append("]");
sb.append("}");
return sb.toString();
}
private String createDiagnosisJSON(InfoModel model) {
RegisteredDiagnosisModel rd = (RegisteredDiagnosisModel)model;
String diagnosis = rd.getDiagnosis();
String diagnosisCode = rd.getDiagnosisCode();
String diagnosisCodeSystem= rd.getDiagnosisCodeSystem();
StringBuilder sb = new StringBuilder();
sb.append("{");
stringProp("diagnosis",diagnosis,sb,true);
stringProp("diagnosisCode",diagnosisCode,sb,true);
stringProp("diagnosisCodeSystem",diagnosisCodeSystem,sb,false);
sb.append("}");
return sb.toString();
}
private String createTextStampJSON(InfoModel model) {
try {
TextStampModel tx = (TextStampModel)model;
//minagawa^
StringWriter sw = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(sw, tx);
String json = sw.toString();
sw.close();
//System.err.println(json);
return json;
//minagawa$
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
return null;
}
private void stringProp(String prop, String val, StringBuilder sb, boolean camma) {
if (prop!=null && val!=null) {
sb.append(addQoute(prop)).append(":").append(addQoute(val));
if (camma) {
sb.append(",");
}
}
}
private String addQouteColon(String val) {
if (val!=null) {
StringBuilder sb = new StringBuilder();
sb.append("\"").append(val).append("\":");
return sb.toString();
}
return null;
}
private String addQoute(String val) {
if (val!=null) {
StringBuilder sb = new StringBuilder();
sb.append("\"").append(val).append("\"");
return sb.toString();
}
return null;
}
}