package open.dolphin.client;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import open.dolphin.infomodel.ActivityModel;
import open.dolphin.table.StripeTableCellRenderer;
/**
*
* @author Kazushi Minagawa. Digital Globe, Inc.
*/
public final class AboutActivities {
// 行数
private static final int rowCount = 9;
// 統計値のカラム幅
private final int columnWidth = 100;
// 当月(as title)
private final String targetMonth;
// カラム名
private final String[] columnNames;
// Activityモデル
private final ActivityModel[] am;
// 行見出し配列
private final String[] rowProperties;
private JDialog dialog;
public AboutActivities(ActivityModel[] am) {
this.am = am;
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AboutActivities.class);
String simpleDateFormat = bundle.getString("dateFormat.column");
targetMonth = new SimpleDateFormat(simpleDateFormat).format(new Date());
// 行見出し
rowProperties = bundle.getString("rowItems.activity").split(",");
columnNames = new String[am.length+1];
columnNames[0] = "";
int lastIndex = columnNames.length-1;
columnNames[lastIndex] = bundle.getString("columnName.total");
columnNames[--lastIndex] = bundle.getString("columnName.thisMonth");
lastIndex-=1;
for (int col=0; col < lastIndex; col++) {
if (am[col].getFromDate()!=null) {
SimpleDateFormat sdf = new SimpleDateFormat(simpleDateFormat);
columnNames[col+1] = sdf.format(am[col].getFromDate());
}
}
}
public void start() {
SwingUtilities.invokeLater(() -> {
createAndShowGUI();
});
}
private void createAndShowGUI() {
AbstractTableModel model = new AbstractTableModel() {
@Override
public int getRowCount() {
return rowCount;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public Object getValueAt(int row, int col) {
String ret = null;
switch (row) {
case 0:
ret = col==0 ? rowProperties[0] : stringFromLong(am[col-1].getNumOfPatients());
break;
case 1:
ret = col==0 ? rowProperties[1] : stringFromLong(am[col-1].getNumOfPatientVisits());
break;
case 2:
ret = col==0 ? rowProperties[2] : stringFromLong(am[col-1].getNumOfKarte());
break;
case 3:
ret = col==0 ? rowProperties[3] : stringFromLong(am[col-1].getNumOfImages());
break;
case 4:
ret = col==0 ? rowProperties[4] : stringFromLong(am[col-1].getNumOfAttachments());
break;
case 5:
ret = col==0 ? rowProperties[5] : stringFromLong(am[col-1].getNumOfDiagnosis());
break;
case 6:
ret = col==0 ? rowProperties[6] : stringFromLong(am[col-1].getNumOfLetters());
break;
case 7:
ret = col==0 ? rowProperties[7] : stringFromLong(am[col-1].getNumOfLabTests());
break;
case 8:
ret = col==0 ? rowProperties[8] : col!=am.length ? "---" : stringFromLong(am[am.length-1].getNumOfUsers());
break;
}
return ret;
}
};
JTable table = new JTable(model);
table.setRowSelectionAllowed(false);
table.setCellSelectionEnabled(false);
table.setFocusable(false);
StripeTableCellRenderer c0r = new StripeTableCellRenderer();
c0r.setHorizontalAlignment(SwingConstants.RIGHT);
c0r.setTable(table);
for (int col=0; col<columnNames.length; col++) {
table.getColumnModel().getColumn(col).setCellRenderer(c0r);
}
table.getColumnModel().getColumn(0).setPreferredWidth(120);
for (int col=1; col<columnNames.length; col++) {
table.getColumnModel().getColumn(col).setPreferredWidth(columnWidth);
}
table.setIntercellSpacing(new Dimension(5,5));
table.setRowHeight(ClientContext.getMoreHigherRowHeight());
table.setBorder(BorderFactory.createEtchedBorder());
String actionText = ClientContext.getMyBundle(AboutActivities.class).getString("actionText.close");
JButton done = new JButton(actionText);
done.addActionListener((ActionEvent ae) -> {
dialog.setVisible(false);
dialog.dispose();
});
// 集計月を表示するパネル
JLabel titleLabel = new JLabel(targetMonth, SwingConstants.CENTER);
JPanel titleP = new JPanel(new FlowLayout(FlowLayout.CENTER));
titleP.add(titleLabel);
// Table panel
JPanel tablePanel = new JPanel(new BorderLayout());
tablePanel.add(table.getTableHeader(), BorderLayout.NORTH);
tablePanel.add(table, BorderLayout.CENTER);
// コマンドパネル
JPanel btnPanel = new JPanel();
btnPanel.setBackground(Color.white);
btnPanel.setOpaque(true);
btnPanel.add(done);
// Dialogの content panel
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBackground(Color.white);
contentPane.setOpaque(true);
contentPane.add(titleP, BorderLayout.NORTH);
contentPane.add(tablePanel,BorderLayout.CENTER);
contentPane.add(btnPanel, BorderLayout.SOUTH);
contentPane.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
String title = ClientContext.getMyBundle(AboutActivities.class).getString("title.window");
dialog = new JDialog(new JFrame(), ClientContext.getFrameTitle(title), true);
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setContentPane(contentPane);
dialog.getRootPane().setDefaultButton(done);
dialog.pack();
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int n = ClientContext.isMac() ? 3 : 2;
int x = (screen.width - dialog.getPreferredSize().width) / 2;
int y = (screen.height - dialog.getPreferredSize().height) / n;
dialog.setLocation(x, y);
dialog.setVisible(true);
}
private String stringFromLong(long l) {
return NumberFormat.getNumberInstance().format(l);
}
}