package open.dolphin.impl.pinfo;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.print.PrinterException;
import java.util.Date;
import javax.swing.*;
import javax.swing.event.DocumentListener;
import open.dolphin.client.AbstractChartDocument;
import open.dolphin.client.AutoKanjiListener;
import open.dolphin.client.BundleTransferHandler;
import open.dolphin.client.ClientContext;
import open.dolphin.client.CutCopyPasteAdapter;
import open.dolphin.client.GUIConst;
import open.dolphin.delegater.DocumentDelegater;
import open.dolphin.infomodel.PatientFreeDocumentModel;
/**
* サマリー対応
*
* @author S.Oh@Life Sciences Computing Corporation.
*/
public class FreeDocument extends AbstractChartDocument {
// Title
// private static final String TITLE = "サマリー";
private boolean dirty;
private JPanel freeDocPanel;
private JTextArea freeDocArea;
private PatientFreeDocumentModel model;
/**
* Creates new FreeDocument
*/
public FreeDocument() {
String title = ClientContext.getMyBundle(FreeDocument.class).getString("title.document");
setTitle(title);
}
private void initialize() {
freeDocArea = new JTextArea();
freeDocArea.putClientProperty("karteCompositor", this);
freeDocArea.setLineWrap(true);
freeDocArea.setMargin(new java.awt.Insets(3, 3, 2, 2));
freeDocArea.addFocusListener(AutoKanjiListener.getInstance());
//freeDocArea.setEnabled(!getContext().isReadOnly());
freeDocArea.setEditable(!getContext().isReadOnly());
freeDocPanel = new JPanel(new BorderLayout());
final JScrollPane scroller = new JScrollPane(freeDocArea);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if(scroller != null) {
scroller.getVerticalScrollBar().setValue(0);
}
freeDocArea.setCaretPosition(0);
}
});
freeDocArea.setTransferHandler(new TransferHandler() {
@Override
public boolean importData(TransferHandler.TransferSupport support) {
return false;
}
});
freeDocPanel.add(scroller, BorderLayout.CENTER);
Dimension size = freeDocPanel.getPreferredSize();
int h = size.height;
int w = 268;
size = new Dimension(w, h);
freeDocPanel.setMinimumSize(size);
freeDocPanel.setMaximumSize(size);
setUI(freeDocPanel);
DocumentDelegater ddl = new DocumentDelegater();
try {
model = ddl.getPatientFreeDocument(getContext().getPatient().getPatientId());
} catch (Exception ex) {
} catch (Throwable ex) {
}
if(model == null) {
model = new PatientFreeDocumentModel();
}
freeDocArea.setText(model.getComment());
freeDocArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(javax.swing.event.DocumentEvent e) {
dirtySet();
}
@Override
public void removeUpdate(javax.swing.event.DocumentEvent e) {
dirtySet();
}
@Override
public void changedUpdate(javax.swing.event.DocumentEvent e) {
}
});
// TransferHandlerを設定する
freeDocArea.setTransferHandler(new BundleTransferHandler(getContext().getChartMediator(), freeDocArea));
if(!getContext().isReadOnly()) {
freeDocArea.addMouseListener(CutCopyPasteAdapter.getInstance());
}
enter();
}
private void dirtySet() {
dirty = true;
}
@Override
public void start() {
initialize();
}
@Override
public void stop() {
save();
}
@Override
public void enter() {
super.enter();
getContext().enabledAction(GUIConst.ACTION_NEW_KARTE, false); // 新規カルテ
getContext().enabledAction(GUIConst.ACTION_NEW_DOCUMENT, false); // 新規文書
getContext().enabledAction(GUIConst.ACTION_MODIFY_KARTE, false); // 修正
getContext().enabledAction(GUIConst.ACTION_DELETE, false); // 削除
getContext().enabledAction(GUIConst.ACTION_PRINT, false); // 印刷
getContext().enabledAction(GUIConst.ACTION_ASCENDING, false); // 昇順
getContext().enabledAction(GUIConst.ACTION_DESCENDING, false); // 降順
getContext().enabledAction(GUIConst.ACTION_SHOW_MODIFIED, false); // 修正履歴表示
getContext().enabledAction(GUIConst.ACTION_SEND_CLAIM, false); // CLAIM送信
getContext().enabledAction(GUIConst.ACTION_CREATE_PRISCRIPTION, false); // 処方箋印刷
getContext().enabledAction(GUIConst.ACTION_CHECK_INTERACTION, false); // 併用禁忌チェック
}
@Override
public boolean isDirty() {
// if (stateMgr != null) {
// return stateMgr.isDirtyState();
// } else {
// return super.isDirty();
// }
return false;
}
/**
* 患者情報を更新する。
*/
@Override
public void save() {
if (!dirty || getContext().isReadOnly()) {
return;
}
if (model == null) {
model = new PatientFreeDocumentModel();
}
Date confirmed = new Date();
model.setFacilityPatId(getContext().getPatient().getPatientId());
model.setConfirmed(confirmed);
model.setComment(freeDocArea.getText());
final DocumentDelegater ddl = new DocumentDelegater();
Runnable r = new Runnable() {
@Override
public void run() {
try {
ddl.updatePatientFreeDocument(model);
model = null;
//context = null;
} catch (Exception e) {
}
}
};
Thread t = new Thread(r);
t.setPriority(Thread.NORM_PRIORITY);
t.start();
}
@Override
public void print() {
if(freeDocArea != null && freeDocArea.getText().length() > 0) {
try {
freeDocArea.print();
} catch (PrinterException ex) {
}
}
}
}