final DocumentDelegater ddl = new DocumentDelegater();
final DocumentModel saveModel = model;
final Chart chart = this.getContext();
DBTask task = new DBTask<String>(chart) {
@Override
protected String doInBackground() throws Exception {
logger.debug("KarteSaveTask doInBackground");
String ret = null;
ddl.putKarte(saveModel);
if (ddl.isNoError()) {
if (sendClaim) {
if (Project.getProjectStub().isUseOrcaApi()) {
OrcaApi api = OrcaApi.getInstance();
api.setContext(getContext());
api.send(saveModel);
} else {
claimSender.send(saveModel);
}
}
if (sendMml) {
sendMml(saveModel);
}
} else {
ret = ddl.getErrorMessage();
}
return ret;
}
@Override
protected void succeeded(String errMsg) {
logger.debug("KarteSaveTask succeeded");
if (ddl.isNoError()) {
// 印刷
int copies = params.getPrintCount();
if (copies > 0) {
printPanel2(chart.getContext().getPageFormat(), copies, false);
}
// 編集不可に設定する
soaPane.setEditableProp(false);
if (getMode() == DOUBLE_MODE) pPane.setEditableProp(false);
// 状態遷移する
stateMgr.setSaved(true);
// Chart の状態を設定する
// Chart.setChartState しておけば,ChartImpl の fireChanged で PVT にも同じく反映される
// 今日のカルテをセーブした場合のみ chartState を変更する
// 今日受診していて,過去のカルテを修正しただけなのに診察完了になってしまうのを防ぐ
DocInfoModel docInfo = model.getDocInfo();
boolean isTodaysKarte = MMLDate.getDateTime("yyyy-MM-dd").equals(docInfo.getFirstConfirmDateTrimTime());
if (isTodaysKarte) {
if (docInfo.getStatus().equals(STATUS_TMP)) {
chart.setChartState(KarteState.OPEN_TEMP);
} else if (docInfo.getStatus().equals(STATUS_FINAL)) {
chart.setChartState(KarteState.OPEN_SAVE);
}
}
// 文書履歴の更新を通知する
chart.getDocumentHistory().getDocumentHistory(docInfo.getFirstConfirmDateTrimTime());
// save が終了したことを EditorFrame に知らせる
boundSupport.firePropertyChange(KarteEditor.SAVE_DONE, false, true);
} else {
// errMsg を処理する
// エラーを表示する
JFrame parent = chart.getFrame();
String title = ClientContext.getString("karte.task.saveTitle");
JOptionPane.showMessageDialog(parent,
errMsg,
ClientContext.getFrameTitle(title),
JOptionPane.WARNING_MESSAGE);
}
}
};
task.execute();
}