// オブジェクトの値を設定する
@Override
public void setValueAt(Object value, int row, int col) {
RegisteredDiagnosisModel rd = (RegisteredDiagnosisModel) getObject(row);
if (value == null || rd == null) return;
String status = rd.getStatus();
if (status != null && status.equals(DiagnosisDocument.ORCA_RECORD)) return;
// value = DELETED_RECORD で呼ばれた場合は DELETED_RECORD をセットする
if (DiagnosisDocument.DELETED_RECORD.equals(value)) {
// undo 用に保存
offerQueue(undoMap, rd);
// rd 書き換え
rd.setStatus(DiagnosisDocument.DELETED_RECORD);
update(row, rd);
return;
}
// DELETED_RECORD フラグが立っていたらポップアップ編集も不可
if (DiagnosisDocument.DELETED_RECORD.equals(rd.getStatus())) {
Toolkit.getDefaultToolkit().beep();
return;
}
switch (col) {
case DiagnosisDocument.DIAGNOSIS_COL:
// JTextField から入ってきた String 分は無視
if (value instanceof DiagnosisLiteModel) {
DiagnosisLiteModel newDiag = (DiagnosisLiteModel) value;
// 変更されていたら更新する
if (!rd.getDiagnosis().equals(newDiag.getDiagnosisDesc()) || !rd.getDiagnosisCode().equals(newDiag.getDiagnosisDesc())) {
// undo 用に保存
offerQueue(undoMap, rd);
// rd 書き換え
rd.setDiagnosis(newDiag.getDiagnosisDesc());
rd.setDiagnosisCode(newDiag.getDiagnosisCode());
update(row, rd);
}
}
break;
case DiagnosisDocument.CATEGORY_COL:
// JComboBox から選択
String saveCategory = rd.getCategory();
DiagnosisCategoryModel dcm = (DiagnosisCategoryModel) value;
String test = dcm.getDiagnosisCategory();
test = test != null && (!test.equals("")) ? test : null;
if (saveCategory != null) {
if (test != null) {
if (!test.equals(saveCategory)) {
// undo 用に保存
offerQueue(undoMap, rd);
rd.setCategory(dcm.getDiagnosisCategory());
rd.setCategoryDesc(dcm.getDiagnosisCategoryDesc());
rd.setCategoryCodeSys(dcm.getDiagnosisCategoryCodeSys());
update(row, rd);
}
} else {
// undo 用に保存
offerQueue(undoMap, rd);
rd.setDiagnosisCategoryModel(null);
update(row, rd);
}
} else {
if (test != null) {
// undo 用に保存
offerQueue(undoMap, rd);
rd.setCategory(dcm.getDiagnosisCategory());
rd.setCategoryDesc(dcm.getDiagnosisCategoryDesc());
rd.setCategoryCodeSys(dcm.getDiagnosisCategoryCodeSys());
update(row, rd);
}
}
break;
case DiagnosisDocument.OUTCOME_COL:
// JComboBox から選択
String saveOutcome = rd.getOutcome();
DiagnosisOutcomeModel dom = (DiagnosisOutcomeModel) value;
test = dom.getOutcome();
test = test != null && (!test.equals("")) ? test : null;
if (saveOutcome != null) {
if (test != null) {
if (!saveOutcome.equals(test)) {
// undo 用に保存
offerQueue(undoMap, rd);
rd.setOutcome(dom.getOutcome());
rd.setOutcomeDesc(dom.getOutcomeDesc());
rd.setOutcomeCodeSys(dom.getOutcomeCodeSys());
// 疾患終了日を入れる
if (Project.getPreferences().getBoolean("autoOutcomeInput", false)) {
String val = rd.getEndDate();
if (val == null || val.equals("")) {
// 転帰日の自動入力の基準日を,lastVisit にする
GregorianCalendar gc = new GregorianCalendar(lastVisitYmd[0], lastVisitYmd[1], lastVisitYmd[2]);
int offset = Project.getPreferences().getInt(Project.OFFSET_OUTCOME_DATE, -7);
gc.add(Calendar.DAY_OF_MONTH, offset);
gc.add(Calendar.DAY_OF_MONTH, offset);
String today = MMLDate.getDate(gc);
rd.setEndDate(today);
}
}
update(row, rd);
}
} else {
// 転帰が消去された場合は新規病名として登録し直すことにした
RegisteredDiagnosisModel newRd = new RegisteredDiagnosisModel();
newRd.setDiagnosis(rd.getDiagnosis());
newRd.setDiagnosisCode(rd.getDiagnosisCode());
newRd.setDiagnosisCodeSystem(rd.getDiagnosisCodeSystem());
newRd.setCategory(rd.getCategory());
newRd.setCategoryDesc(rd.getCategoryDesc());
newRd.setCategoryCodeSys(rd.getCategoryCodeSys());
insert(newRd);
}
} else {
if (test != null) {