package open.dolphin.impl.lbtest;
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.*;
import java.text.MessageFormat;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import open.dolphin.client.AbstractChartDocument;
import open.dolphin.client.ClientContext;
import open.dolphin.client.GUIFactory;
import open.dolphin.client.NameValuePair;
import open.dolphin.delegater.LaboDelegater;
import open.dolphin.helper.DBTask;
import open.dolphin.infomodel.*;
import open.dolphin.project.Project;
import open.dolphin.table.ListTableModel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.Layer;
/**
* LaboTestBean
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*
*/
public class LaboTestBean extends AbstractChartDocument {
private static final int DEFAULT_DIVIDER_LOC = 210;
private static final int DEFAULT_DIVIDER_WIDTH = 10;
private static final int MAX_RESULT = 6;
private ListTableModel<LabTestRowObject> tableModel;
private JTable table;
private JPanel graphPanel;
private JComboBox extractionCombo;
private JTextField countField;
private LaboDelegater ldl;
private int dividerWidth;
private int dividerLoc;
// 1回の検索で得る抽出件数
private int maxResult = MAX_RESULT;
private boolean widthAdjusted;
//s.oh^ ラボテストの印刷
//private JButton printBtn;
//s.oh$
//s.oh^ ラボテストのPDF出力
private JFreeChart chart;
private JButton pdfBtn;
private JButton printPdfBtn; // ラボデータPDFの印刷
//s.oh$
// ラボデータの削除 2013/06/24
private List<NLaboModule> modules;
public LaboTestBean() {
String title = ClientContext.getMyBundle(LaboTestBean.class).getString("title.Document");
setTitle(title);
}
public int getMaxResult() {
return maxResult;
}
public void setMaxResult(int maxResult) {
this.maxResult = maxResult;
}
public void createTable(List<NLaboModule> moduleList) {
// 現在のデータをクリアする
if (tableModel != null && tableModel.getDataProvider() != null) {
tableModel.getDataProvider().clear();
}
// グラフもクリアする
graphPanel.removeAll();
graphPanel.validate();
// Table のカラムヘッダーを生成する
String[] header = new String[getMaxResult() + 1];
header[0] = ClientContext.getMyBundle(LaboTestBean.class).getString("name.firstColumn");
for (int col = 1; col < header.length; col++) {
header[col] = "";
}
if (modules!=null) {
modules.clear();
}
modules = moduleList;
// 結果がゼロであれば返る
if (modules == null || modules.isEmpty()) {
tableModel = new ListTableModel<>(header, 0);
table.setModel(tableModel);
setColumnWidth();
return;
}
// 検体採取日の降順なので昇順にソートする
//s.oh^ 2013/06/13 カラムの並び順
//Collections.sort(modules, new SampleDateComparator());
if(!Project.getBoolean("labtest.column.newest.left", false)) {
Collections.sort(modules, new SampleDateComparator());
}
//s.oh$
// テスト項目全てに対応する rowObject を生成する
List<LabTestRowObject> dataProvider = new ArrayList<>();
int moduleIndex = 0;
for (NLaboModule module : modules) {
// 検体採取日
header[moduleIndex+1] = module.getSampleDate();
// モジュールに含まれる検査項目
Collection<NLaboItem> c = module.getItems();
for (NLaboItem item : c) {
// RowObject を生成し dataProvider へ加える
// 最初のモジュールのテスト項目は無条件に加える
if (moduleIndex == 0) {
// row
LabTestRowObject row = new LabTestRowObject();
row.setLabCode(item.getLaboCode());
row.setGroupCode(item.getGroupCode());
row.setParentCode(item.getParentCode());
row.setItemCode(item.getItemCode());
row.setItemName(item.getItemName());
row.setUnit(item.getUnit());
row.setNormalValue(item.getNormalValue());
// valueを moduleIndex番目にセットする
LabTestValueObject value = new LabTestValueObject();
value.setSampleDate(module.getSampleDate());
value.setValue(item.getValue());
value.setOut(item.getAbnormalFlg());
value.setComment1(item.getComment1());
value.setComment2(item.getComment2());
row.addLabTestValueObjectAt(moduleIndex, value);
//
dataProvider.add(row);
continue;
}
// 二つ目のモジュールからは無かったら加える
boolean found = false;
for (LabTestRowObject rowObject : dataProvider) {
if (item.getItemCode().equals(rowObject.getItemCode())) {
found = true;
LabTestValueObject value = new LabTestValueObject();
value.setSampleDate(module.getSampleDate());
value.setValue(item.getValue());
value.setOut(item.getAbnormalFlg());
value.setComment1(item.getComment1());
value.setComment2(item.getComment2());
rowObject.addLabTestValueObjectAt(moduleIndex, value);
break;
}
}
if (!found) {
LabTestRowObject row = new LabTestRowObject();
row.setLabCode(item.getLaboCode());
row.setGroupCode(item.getGroupCode());
row.setParentCode(item.getParentCode());
row.setItemCode(item.getItemCode());
row.setItemName(item.getItemName());
row.setUnit(item.getUnit());
row.setNormalValue(item.getNormalValue());
//
LabTestValueObject value = new LabTestValueObject();
value.setSampleDate(module.getSampleDate());
value.setValue(item.getValue());
value.setOut(item.getAbnormalFlg());
value.setComment1(item.getComment1());
value.setComment2(item.getComment2());
row.addLabTestValueObjectAt(moduleIndex, value);
//
dataProvider.add(row);
}
}
moduleIndex++;
}
// dataProvider の要素 rowObject をソートする
Collections.sort(dataProvider);
// Table Model
tableModel = new ListTableModel<>(header, 0);
// 検査結果テーブルを生成する
table.setModel(tableModel);
setColumnWidth();
// dataProvider
tableModel.setDataProvider(dataProvider);
table.getTableHeader().addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
int index = table.getTableHeader().columnAtPoint(e.getPoint());
if (index==0) {
return;
}
final NLaboModule toDelete = modules.get(index-1);
JPopupMenu popup = new JPopupMenu();
String actionText = ClientContext.getMyBundle(LaboTestBean.class).getString("actionText.delete");
popup.add(new AbstractAction(actionText) {
@Override
public void actionPerformed(ActionEvent e) {
String date = toDelete.getSampleDate().replaceAll(" 00:00", "");
java.util.ResourceBundle bundle = ClientContext.getMyBundle(LaboTestBean.class);
String fmt = bundle.getString("messageFormat.deleteTest");
MessageFormat msf = new MessageFormat(fmt);
String msg = msf.format(new Object[]{date});
String optionDelete = bundle.getString("optionText.delete");
String[] options = {GUIFactory.getCancelButtonText(),optionDelete};
String title = bundle.getString("title.optionPane.delete");
int val = JOptionPane.showOptionDialog(
getUI(), msg, ClientContext.getFrameTitle(title),
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
switch(val) {
case 0:
break;
case 1:
deleteLabTest(toDelete.getId());
break;
}
}
});
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
}
/**
* Tableのカラム幅を調整する。
*/
private void setColumnWidth() {
//s.oh^ 2013/03/19 機能改善(カラムを同一横幅)
//// カラム幅を調整する
//if (!widthAdjusted) {
// table.getTableHeader().getColumnModel().getColumn(0).setPreferredWidth(180);
// table.getTableHeader().getColumnModel().getColumn(1).setPreferredWidth(100);
// table.getTableHeader().getColumnModel().getColumn(2).setPreferredWidth(100);
// table.getTableHeader().getColumnModel().getColumn(3).setPreferredWidth(100);
// table.getTableHeader().getColumnModel().getColumn(4).setPreferredWidth(100);
// table.getTableHeader().getColumnModel().getColumn(5).setPreferredWidth(100);
// widthAdjusted = true;
//}
}
/**
* GUIコンポーネントを初期化する。
*/
private void initialize() {
// Divider
dividerWidth = DEFAULT_DIVIDER_WIDTH;
dividerLoc = DEFAULT_DIVIDER_LOC;
JPanel controlPanel = createControlPanel();
graphPanel = new JPanel(new BorderLayout());
graphPanel.setPreferredSize(new Dimension(500, dividerLoc));
// 検査結果テーブルを生成する
table = new JTable();
// Rendererを設定する
LabTestRenderer rederer = new LabTestRenderer();
rederer.setTable(table);
rederer.setDefaultRenderer();
// 行高
table.setRowHeight(ClientContext.getHigherRowHeight());
// 行選択を可能にする
table.setRowSelectionAllowed(true);
table.getTableHeader().setReorderingAllowed(false);
//-----------------------------------------------
// Copy 機能を実装する
//-----------------------------------------------
java.util.ResourceBundle bundle = ClientContext.getMyBundle(LaboTestBean.class);
KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
String actionText = bundle.getString("actionText.copy");
final AbstractAction copyAction = new AbstractAction(actionText) {
@Override
public void actionPerformed(ActionEvent ae) {
copyRow();
}
};
actionText = bundle.getString("actionText.coloy.latest");
final AbstractAction copyLatestAction = new AbstractAction(actionText) {
@Override
public void actionPerformed(ActionEvent ae) {
copyLatest();
}
};
table.getInputMap().put(copy, "Copy");
table.getActionMap().put("Copy", copyLatestAction);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent me) {
mabeShowPopup(me);
}
@Override
public void mouseReleased(MouseEvent me) {
mabeShowPopup(me);
}
public void mabeShowPopup(MouseEvent e) {
if (!e.isPopupTrigger()) {
return;
}
int row = table.rowAtPoint(e.getPoint());
if (row < 0 ) {
return;
}
//s.oh^ 2013/10/08 ラボテスト
int[] selecteds = table.getSelectedRows();
if(selecteds == null || selecteds.length <= 0) {
return;
}
//s.oh$
JPopupMenu contextMenu = new JPopupMenu();
contextMenu.add(new JMenuItem(copyLatestAction));
contextMenu.add(new JMenuItem(copyAction));
contextMenu.show(e.getComponent(), e.getX(), e.getY());
}
});
// グラフ表示のリスナを登録する
ListSelectionModel m = table.getSelectionModel();
m.addListSelectionListener((ListSelectionEvent e) -> {
if (e.getValueIsAdjusting() == false) {
createAndShowGraph(table.getSelectedRows());
}
});
JScrollPane jScrollPane1 = new JScrollPane();
jScrollPane1.setViewportView(table);
jScrollPane1.setPreferredSize(new java.awt.Dimension(3, 600));
JPanel tablePanel = new JPanel(new BorderLayout(0, 7));
tablePanel.add(controlPanel, BorderLayout.SOUTH);
tablePanel.add(jScrollPane1, BorderLayout.CENTER);
// Lyouts
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, graphPanel, tablePanel);
splitPane.setDividerSize(dividerWidth);
splitPane.setContinuousLayout(false);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(dividerLoc);
getUI().setLayout(new BorderLayout());
getUI().add(splitPane, BorderLayout.CENTER);
getUI().setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
//s.oh^ 不具合修正
enter();
//s.oh$
}
@Override
public void start() {
initialize();
enter();
firstSearch();
}
@Override
public void stop() {
if (tableModel != null && tableModel.getDataProvider() != null) {
tableModel.getDataProvider().clear();
}
}
/**
* 選択されている行で直近のデータをコピーする。
*/
public void copyLatest() {
StringBuilder sb = new StringBuilder();
int numRows=table.getSelectedRowCount();
int[] rowsSelected=table.getSelectedRows();
for (int i = 0; i < numRows; i++) {
LabTestRowObject rdm = tableModel.getObject(rowsSelected[i]);
if (rdm != null) {
//s.oh^ 2013/06/13 カラムの並び順
//sb.append(rdm.toClipboardLatest()).append("\n");
if(!Project.getBoolean("labtest.column.newest.left", false)) {
sb.append(rdm.toClipboardLatest()).append("\n");
}else{
sb.append(rdm.toClipboardLatestReverse()).append("\n");
}
//s.oh$
}
}
if (sb.length() > 0) {
StringSelection stsel = new StringSelection(sb.toString());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stsel, stsel);
}
}
/**
* 選択されている行をコピーする。
*/
public void copyRow() {
StringBuilder sb = new StringBuilder();
int numRows=table.getSelectedRowCount();
int[] rowsSelected=table.getSelectedRows();
for (int i = 0; i < numRows; i++) {
LabTestRowObject rdm = tableModel.getObject(rowsSelected[i]);
if (rdm != null) {
sb.append(rdm.toClipboard()).append("\n");
}
}
if (sb.length() > 0) {
StringSelection stsel = new StringSelection(sb.toString());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stsel, stsel);
}
}
/**
* LaboTest の検索タスクをコールする。
*/
private void searchLaboTest(final int firstResult) {
final String pid = getContext().getPatient().getPatientId();
ldl = new LaboDelegater();
DBTask task = new DBTask<List<NLaboModule>, Void>(getContext()) {
@Override
protected List<NLaboModule> doInBackground() throws Exception {
List<NLaboModule> result = ldl.getLaboTest(pid, firstResult, getMaxResult());
return result;
}
@Override
protected void succeeded(List<NLaboModule> result) {
int moduleCount = result != null ? result.size() : 0;
// 全件表示修正^
//countField.setText(String.valueOf(moduleCount));
//s.oh^ 2014/08/04 ラボデータ表示不具合対応
//createTable(result);
createTable(checkLaboModules(result));
//s.oh$
}
};
task.execute();
}
//s.oh^ 2014/08/04 ラボデータ表示不具合対応
public List<NLaboModule> checkLaboModules(List<NLaboModule> modules) {
if(modules != null) {
for(int i = 0; i < modules.size(); i++) {
NLaboModule module = modules.get(i);
List<NLaboItem> items = new ArrayList<>();
for(int j = 0; j < module.getItems().size(); j++) {
NLaboItem item = module.getItems().get(j);
if(items.size() <= 0) {
items.add(item);
}else{
int addedIdx = -1;
boolean notadd = false;
for(int k = 0; k < items.size(); k++) {
NLaboItem addedItem = items.get(k);
if(item.getItemCode().equals(addedItem.getItemCode())) {
if(addedItem.getReportStatus()!= null && addedItem.getReportStatus().equals("E")) {
notadd = true;
}else{
items.remove(k);
addedIdx = k;
break;
}
}
}
if(!notadd) {
if(addedIdx >= 0) {
items.add(addedIdx, item);
}else{
items.add(item);
}
}
}
}
module.setItems(items);
}
}
return modules;
}
//s.oh$
// 全件表示修正^
private void firstSearch() {
//s.oh^ 2013/09/18 ラボデータの高速化
// final String pid = getContext().getPatient().getPatientId();
// ldl = new LaboDelegater();
//
// DBTask task = new DBTask<List<NLaboModule>, Void>(getContext()) {
//
// @Override
// protected List<NLaboModule> doInBackground() throws Exception {
// // 全件取得する maxResult=1000
// List<NLaboModule> modules = ldl.getLaboTest(pid, 0, 1000);
// return modules;
// }
//
// @Override
// protected void succeeded(List<NLaboModule> modules) {
//
// // 全件数
// int moduleCount = modules != null ? modules.size() : 0;
//
// // ComboBox へ表示するItemの数
// int itemCount = moduleCount/getMaxResult();
// if (moduleCount%getMaxResult()!=0) {
// itemCount+=1;
// }
//
// // Loopしてcomboboxへ加える
// for (int i=0; i < itemCount; i++) {
// int firstIndex = i*getMaxResult();
// int lastIndex = firstIndex+getMaxResult()-1;
// if (lastIndex>(moduleCount-1)) {
// lastIndex = moduleCount-1;
// }
// StringBuilder sb = new StringBuilder();
// if (i!=0) {
// sb.append(String.valueOf(firstIndex+1));
// sb.append("~");
// }
// sb.append(String.valueOf(lastIndex+1));
// sb.append("回分");
// String name = sb.toString();
// String value = String.valueOf(firstIndex);
// NameValuePair item = new NameValuePair(name, value);
// extractionCombo.addItem(item);
// }
// countField.setText(String.valueOf(moduleCount));
//
// // 最初の6回分を表示させる
// int cnt = moduleCount>=getMaxResult() ? getMaxResult() : moduleCount;
// List<NLaboModule> list = new ArrayList(cnt);
// for (int i=0; i <cnt; i++) {
// list.add(modules.get(i));
// }
// createTable(list);
// }
// };
//
// task.execute();
// 全件数
String pid = getContext().getPatient().getPatientId();
ldl = new LaboDelegater();
int moduleCount = Integer.parseInt(ldl.getLaboTestCount(pid));
// ComboBox へ表示するItemの数
int itemCount = moduleCount/getMaxResult();
if (moduleCount%getMaxResult()!=0) {
itemCount+=1;
}
// Loopしてcomboboxへ加える
for (int i=0; i < itemCount; i++) {
int firstIndex = i*getMaxResult();
int lastIndex = firstIndex+getMaxResult()-1;
if (lastIndex>(moduleCount-1)) {
lastIndex = moduleCount-1;
}
StringBuilder sb = new StringBuilder();
if (i!=0) {
sb.append(String.valueOf(firstIndex+1));
sb.append("~");
}
sb.append(String.valueOf(lastIndex+1));
String str = ClientContext.getMyBundle(LaboTestBean.class).getString("text.number");
sb.append(str);
String name = sb.toString();
String value = String.valueOf(firstIndex);
NameValuePair item = new NameValuePair(name, value);
extractionCombo.addItem(item);
}
countField.setText(String.valueOf(moduleCount));
//s.oh$
}
private void deleteLabTest(final long moduleId) {
final String pid = getContext().getPatient().getPatientId();
ldl = new LaboDelegater();
DBTask task = new DBTask<Integer, Void>(getContext()) {
@Override
protected Integer doInBackground() throws Exception {
int result = ldl.deleteLabTest(moduleId);
return result;
}
@Override
protected void succeeded(Integer result) {
if (extractionCombo.getSelectedIndex()==0) {
searchLaboTest(0);
} else {
extractionCombo.setSelectedIndex(0);
}
}
};
task.execute();
}
/**
* 検査結果テーブルで選択された行(検査項目)の折れ線グラフを生成する。
* 複数選択対応
* JFreeChart を使用する。
*/
private void createAndShowGraph(int[] selectedRows) {
if (selectedRows == null || selectedRows.length == 0) {
return;
}
//s.oh^ ラボテストのPDF出力
// 日本語が文字化けしないテーマ(必要な場合は有効にする)
//ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
//s.oh$
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 選択されている行(検査項目)をイテレートし、dataset へ値を設定する
for (int cnt = 0; cnt < selectedRows.length; cnt++) {
int row = selectedRows[cnt];
List<LabTestRowObject> dataProvider = tableModel.getDataProvider();
LabTestRowObject rowObj = dataProvider.get(row);
List<LabTestValueObject> values = rowObj.getValues();
//boolean valueIsNumber = true;
// 検体採取日ごとの値を設定する
// カラムの1番目から採取日がセットされている
for (int col = 1; col <= getMaxResult(); col++) {
String sampleTime = tableModel.getColumnName(col);
// 検体採取日="" -> 検査なし
if (sampleTime.equals("")) {
break;
}
LabTestValueObject value = values.get(col -1);
//masuda^ 中止された時などvalueがnullのときがある。そんなときはnull値にする。
try {
double val = Double.parseDouble(value.getValue());
dataset.setValue(val, rowObj.nameWithUnit(), sampleTime);
} catch (Exception e) {
dataset.setValue(null, rowObj.nameWithUnit(), sampleTime);
}
}
//masuda$
}
//s.oh^ ラボテストのPDF出力
//JFreeChart chart = ChartFactory.createLineChart(
chart = ChartFactory.createLineChart(
//s.oh$
//masuda^
//getGraphTitle(), // Title
//getXLabel(), // x-axis Label
null, null,
//masuda$
"", // y-axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Use tooltips
false // Configure chart to generate URLs?
);
// Win の文字化け
if (ClientContext.isWin()) {
//masuda^
//chart.getTitle().setFont(getWinFont());
//masuda$
chart.getLegend().setItemFont(getWinFont());
chart.getCategoryPlot().getDomainAxis().setLabelFont(getWinFont());
chart.getCategoryPlot().getDomainAxis().setTickLabelFont(getWinFont());
}
//masuda^
// 背景色を設定 薄くする
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(new Color(220, 220, 220));
// グラフにドットをつける
IgnoreNullLineRenderer renderer = new IgnoreNullLineRenderer();
plot.setRenderer(renderer);
// 選択した項目が一つならば基準範囲を表示する
if (selectedRows.length == 1) {
List<LabTestRowObject> dataProvider = tableModel.getDataProvider();
LabTestRowObject rowObj = dataProvider.get(selectedRows[0]);
String normalValue = rowObj.getNormalValue();
try {
String[] values = normalValue.split("-");
float low = Float.valueOf(values[0]);
float hi = Float.valueOf(values[1]);
IntervalMarker marker = new IntervalMarker(low, hi);
marker.setPaint(new Color(200, 230, 200));
plot.addRangeMarker(marker, Layer.BACKGROUND);
} catch (Exception e) {
}
}
//masuda$
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPopupMenu(null);
graphPanel.removeAll();
graphPanel.add(chartPanel, BorderLayout.CENTER);
graphPanel.validate();
}
//====================================================================
// private String getGraphTitle() {
// return ClientContext.isLinux() ? GRAPH_TITLE_LINUX : GRAPH_TITLE;
// }
//
// private String getXLabel() {
// return ClientContext.isLinux() ? X_AXIS_LABEL_LINUX : X_AXIS_LABEL;
// }
private Font getWinFont() {
ResourceBundle bundle = ClientContext.getMyBundle(LaboTestBean.class);
String fontName = bundle.getString("chart.fontName");
String fontSize = bundle.getString("chart.fontSize");
return new Font(fontName, Font.PLAIN, Integer.parseInt(fontSize));
}
//====================================================================
/**
* 抽出期間パネルを返す
*/
private JPanel createControlPanel() {
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
p.add(Box.createHorizontalStrut(7));
// 抽出期間コンボボックス
String labelText = ClientContext.getMyBundle(LaboTestBean.class).getString("labelText.past");
p.add(new JLabel(labelText));
p.add(Box.createRigidArea(new Dimension(5, 0)));
// 全件表示修正^
//extractionCombo = new JComboBox(periodObject);
extractionCombo = new JComboBox();
//s.oh^ 2014/08/13 コントロールサイズ調整
String nimbus = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";
String laf = UIManager.getLookAndFeel().getClass().getName();
if(!laf.equals(nimbus)) {
extractionCombo.setPreferredSize(new Dimension(130, 20));
}
//s.oh$
extractionCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
// 全件表示修正^
if (extractionCombo.getSelectedItem()!=null) {
NameValuePair pair = (NameValuePair)extractionCombo.getSelectedItem();
int firstResult = Integer.parseInt(pair.getValue());
searchLaboTest(firstResult);
}
}
}
});
JPanel comboPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
comboPanel.add(extractionCombo);
//s.oh^ ラボテストの印刷
//// comboPanelと同じグループのパネルに追加する
//comboPanel.add(Box.createRigidArea(new Dimension(10, 0)));
//printBtn = new JButton("リスト印刷");
//printBtn.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// LaboTestPrint print = new LaboTestPrint();
// if(table != null) {
// print.setTable(table);
// MessageFormat header = new MessageFormat(getContext().getPatient().getFullName() + " 様 カルテ");
// MessageFormat footer = new MessageFormat("ラボテスト: Page - {0}");
// String jobName = getContext().getContext().getPageFormat() + " by Dolphin";
// //print.printTable(null, 1, getContext().getPatient().getFullName());
// print.printTable(getContext().getContext().getPageFormat(), 1, jobName, header, footer);
// }
// }
//});
//comboPanel.add(printBtn);
//s.oh$
p.add(comboPanel);
// グル
p.add(Box.createHorizontalGlue());
// 件数フィールド
labelText = ClientContext.getMyBundle(LaboTestBean.class).getString("labelText.numRecords");
p.add(new JLabel(labelText));
p.add(Box.createRigidArea(new Dimension(5, 0)));
countField = new JTextField(2);
countField.setEditable(false);
JPanel countPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
countPanel.add(countField);
p.add(countPanel);
//s.oh^ ラボテストのPDF出力
// countPanelと同じグループのパネルに追加する
comboPanel.add(Box.createRigidArea(new Dimension(10, 0)));
String buttonText = ClientContext.getMyBundle(LaboTestBean.class).getString("buttonText.outputPdf");
pdfBtn = new JButton(buttonText);
pdfBtn.addActionListener((ActionEvent e) -> {
String path = createPDF(true);
});
JPanel outputPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0));
outputPanel.add(pdfBtn);
p.add(outputPanel); // ラボデータPDFの印刷
// ラボデータPDFの印刷
comboPanel.add(Box.createRigidArea(new Dimension(10, 0)));
buttonText = ClientContext.getMyBundle(LaboTestBean.class).getString("buttonText.printList");
printPdfBtn = new JButton(buttonText);
printPdfBtn.addActionListener((ActionEvent e) -> {
String path = createPDF(false);
LaboTestOutputPDF.printPDF(path);
});
outputPanel.add(printPdfBtn);
p.add(outputPanel);
//s.oh$
// スペース
p.add(Box.createHorizontalStrut(7));
return p;
}
//s.oh^ ラボテストのPDF出力
public void updateList() {
NameValuePair pair = (NameValuePair)extractionCombo.getSelectedItem();
int firstResult = Integer.parseInt(pair.getValue());
searchLaboTest(firstResult);
graphPanel.removeAll();
graphPanel.validate();
}
/**
* PDFの作成
* @return
*/
private String createPDF(boolean showDlg) {
if(showDlg) {
StringBuilder sb = new StringBuilder();
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
String dir = chooser.getSelectedFile().getPath();
sb.append(dir);
LaboTestOutputPDF pdf = new LaboTestOutputPDF(getContext().getPatient().getPatientId(), getContext().getPatient().getFullName(), new Date(), sb.toString(), table, chart);
return pdf.create();
}else{
//sb.append(ClientContext.getTempDirectory());
}
}else{
StringBuilder sb = new StringBuilder();
sb.append(ClientContext.getTempDirectory());
LaboTestOutputPDF pdf = new LaboTestOutputPDF(getContext().getPatient().getPatientId(), getContext().getPatient().getFullName(), null, sb.toString(), table, chart);
return pdf.create();
}
return null;
}
//s.oh$
}