package open.dolphin.impl.profile;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import open.dolphin.client.AbstractMainTool;
import open.dolphin.client.AddUser;
import open.dolphin.client.AutoKanjiListener;
import open.dolphin.client.AutoRomanListener;
import open.dolphin.client.ClientContext;
import open.dolphin.client.GUIFactory;
import open.dolphin.client.RegexConstrainedDocument;
import open.dolphin.delegater.UserDelegater;
import open.dolphin.helper.SimpleWorker;
import open.dolphin.infomodel.*;
import open.dolphin.project.Project;
import open.dolphin.table.ListTableModel;
import open.dolphin.table.StripeTableCellRenderer;
import open.dolphin.util.HashUtil;
/**
* AddUserPlugin
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public class AddUserImpl extends AbstractMainTool implements AddUser {
private final String TITLE;
private final String FACILITY_INFO;
private final String ADD_USER;
private final String LIST_USER;
private int index;
private JFrame frame;
// timerTask 関連
private SimpleWorker worker;
private javax.swing.Timer taskTimer;
private ProgressMonitor monitor;
private int delayCount;
private int maxEstimation = 120*1000; // 120 秒
private int delay = 300; // 300 mmsec
/** Creates a new instance of AddUserService */
public AddUserImpl() {
super();
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
TITLE = bundle.getString("title.window");
FACILITY_INFO = bundle.getString("title.editFacilityINfo");
ADD_USER = bundle.getString("title.addInternalUser");
LIST_USER = bundle.getString("title.listUsers");
setName(TITLE);
}
@Override
public void setStartIndex(int index) {
this.index = index;
}
public void setFrame(JFrame frame) {
this.frame = frame;
}
public JFrame getFrame() {
return frame;
}
@Override
public void start() {
Runnable awt = () -> {
// Super Class で Frame を初期化する
String title = ClientContext.getFrameTitle(getName());
JFrame frm = new JFrame(title);
setFrame(frm);
frm.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frm.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
stop();
}
});
// Component を生成する
AddUserPanel ap = new AddUserPanel();
FacilityInfoPanel fp = new FacilityInfoPanel();
UserListPanel mp = new UserListPanel();
JTabbedPane tabbedPane = new JTabbedPane();
// 順番変更は可能か
tabbedPane.addTab(FACILITY_INFO, fp);
tabbedPane.addTab(ADD_USER, ap);
tabbedPane.addTab(LIST_USER, mp);
fp.get();
tabbedPane.setSelectedIndex(index);
// Frame に加える
getFrame().getContentPane().add(tabbedPane, BorderLayout.CENTER);
getFrame().pack();
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
int x = (size.width - getFrame().getPreferredSize().width) / 2;
int y = (size.height - getFrame().getPreferredSize().height) / 3;
getFrame().setLocation(x, y);
getFrame().setVisible(true);
};
SwingUtilities.invokeLater(awt);
}
@Override
public void stop() {
getFrame().setVisible(false);
getFrame().dispose();
}
public void toFront() {
if (getFrame() != null) {
getFrame().toFront();
}
}
/**
* 施設(医療機関)情報を変更するクラス。
*/
protected class FacilityInfoPanel extends JPanel {
// View
private final FacilityEditorView view;
// 更新等のボタン
private final JButton updateBtn;
private final JButton clearBtn;
private final JButton closeBtn;
private boolean hasInitialized;
public FacilityInfoPanel() {
// GUI生成
view = new FacilityEditorView();
DocumentListener dl = new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
}
@Override
public void insertUpdate(DocumentEvent e) {
checkButton();
}
@Override
public void removeUpdate(DocumentEvent e) {
checkButton();
}
};
// 医療機関ID
view.getFacilityId().setEnabled(false);
// 名称
view.getFacilityName().getDocument().addDocumentListener(dl);
view.getFacilityName().addFocusListener(AutoKanjiListener.getInstance());
// 郵便番号
view.getZipField1().getDocument().addDocumentListener(dl);
view.getZipField1().addFocusListener(AutoRomanListener.getInstance());
view.getZipField2().getDocument().addDocumentListener(dl);
view.getZipField2().addFocusListener(AutoRomanListener.getInstance());
// 住所
view.getAddressField().getDocument().addDocumentListener(dl);
view.getAddressField().addFocusListener(AutoKanjiListener.getInstance());
// 電話番号
view.getAreaField().getDocument().addDocumentListener(dl);
view.getAreaField().addFocusListener(AutoRomanListener.getInstance());
view.getCityField().getDocument().addDocumentListener(dl);
view.getCityField().addFocusListener(AutoRomanListener.getInstance());
view.getNumberField().getDocument().addDocumentListener(dl);
view.getNumberField().addFocusListener(AutoRomanListener.getInstance());
// FAX
view.getAreaFieldFax().getDocument().addDocumentListener(dl);
view.getAreaFieldFax().addFocusListener(AutoRomanListener.getInstance());
view.getCityFieldFax().getDocument().addDocumentListener(dl);
view.getCityFieldFax().addFocusListener(AutoRomanListener.getInstance());
view.getNumberFieldFax().getDocument().addDocumentListener(dl);
view.getNumberFieldFax().addFocusListener(AutoRomanListener.getInstance());
// URL
view.getUrlField().getDocument().addDocumentListener(dl);
view.getUrlField().addFocusListener(AutoRomanListener.getInstance());
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
updateBtn = new JButton(bundle.getString("actionText.update"));
updateBtn.setEnabled(false);
updateBtn.addActionListener((ActionEvent e) -> {
update();
});
clearBtn = new JButton(bundle.getString("actionText.revert"));
clearBtn.setEnabled(false);
clearBtn.addActionListener((ActionEvent e) -> {
get();
});
closeBtn = new JButton(bundle.getString("actionText.close"));
closeBtn.addActionListener((ActionEvent e) -> {
stop();
});
JPanel btnPanel;
if (ClientContext.isMac()) {
btnPanel = GUIFactory.createCommandButtonPanel(new JButton[]{clearBtn, closeBtn, updateBtn});
} else {
btnPanel = GUIFactory.createCommandButtonPanel(new JButton[]{updateBtn, clearBtn, closeBtn});
}
this.setLayout(new BorderLayout(0, 11));
this.add(view, BorderLayout.CENTER);
this.add(btnPanel, BorderLayout.SOUTH);
this.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
}
public final void get() {
UserModel user = Project.getUserModel();
FacilityModel facility = user.getFacilityModel();
if (facility.getFacilityId() != null) {
view.getFacilityId().setText(facility.getFacilityId());
}
if (facility.getFacilityName() != null) {
view.getFacilityName().setText(facility.getFacilityName());
}
if (facility.getZipCode() != null) {
String val = facility.getZipCode();
try {
StringTokenizer st = new StringTokenizer(val, "-");
if (st.hasMoreTokens()) {
view.getZipField1().setText(st.nextToken());
view.getZipField2().setText(st.nextToken());
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
if (facility.getAddress() != null) {
view.getAddressField().setText(facility.getAddress());
}
if (facility.getTelephone() != null) {
String val = facility.getTelephone();
try {
String[] cmp = val.split("-");
view.getAreaField().setText(cmp[0]);
view.getCityField().setText(cmp[1]);
view.getNumberField().setText(cmp[2]);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
if (facility.getFacsimile() != null) {
String val = facility.getFacsimile();
try {
String[] cmp = val.split("-");
view.getAreaFieldFax().setText(cmp[0]);
view.getCityFieldFax().setText(cmp[1]);
view.getNumberFieldFax().setText(cmp[2]);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
if (facility.getUrl() != null) {
view.getUrlField().setText(facility.getUrl());
}
hasInitialized = true;
}
private void checkButton() {
if (!hasInitialized) {
return;
}
boolean nameEmpty = view.getFacilityName().getText().trim().equals("");
boolean fidEmpty = view.getFacilityId().getText().trim().equals("");
boolean zip1Empty = view.getZipField1().getText().trim().equals("");
boolean zip2Empty = view.getZipField2().getText().trim().equals("");
boolean addressEmpty = view.getAddressField().getText().trim().equals("");
boolean areaEmpty = view.getAreaField().getText().trim().equals("");
boolean cityEmpty = view.getCityField().getText().trim().equals("");
boolean numberEmpty = view.getNumberField().getText().trim().equals("");
if (nameEmpty && fidEmpty && zip1Empty && zip2Empty && addressEmpty
&& areaEmpty && cityEmpty && numberEmpty) {
if (clearBtn.isEnabled()) {
clearBtn.setEnabled(false);
}
} else {
if (!clearBtn.isEnabled()) {
clearBtn.setEnabled(true);
}
}
// 施設名フィールドが空の場合
if (nameEmpty) {
if (updateBtn.isEnabled()) {
updateBtn.setEnabled(false);
}
return;
}
// 施設名フィールドは空ではない
if (!updateBtn.isEnabled()) {
updateBtn.setEnabled(true);
}
}
private void update() {
final UserModel user = Project.getUserModel();
// ディタッチオブジェクトが必要である
FacilityModel facility = user.getFacilityModel();
// 医療機関コードは変更できない
// 施設名
String val = view.getFacilityName().getText().trim();
if (!val.equals("")) {
facility.setFacilityName(val);
}
// 郵便番号
val = view.getZipField1().getText().trim();
String val2 = view.getZipField2().getText().trim();
if ((!val.equals("")) && (!val2.equals(""))) {
facility.setZipCode(val + "-" + val2);
}
// 住所
val = view.getAddressField().getText().trim();
if (!val.equals("")) {
facility.setAddress(val);
}
// 電話番号
val = view.getAreaField().getText().trim();
val2 = view.getCityField().getText().trim();
String val3 = view.getNumberField().getText().trim();
if ((!val.equals("")) && (!val2.equals("")) && (!val3.equals(""))) {
facility.setTelephone(val + "-" + val2 + "-" + val3);
}
// Fax番号
val = view.getAreaFieldFax().getText().trim();
val2 = view.getCityFieldFax().getText().trim();
val3 = view.getNumberFieldFax().getText().trim();
if ((!val.equals("")) && (!val2.equals("")) && (!val3.equals(""))) {
facility.setFacsimile(val + "-" + val2 + "-" + val3);
}
// URL
val = view.getUrlField().getText().trim();
if (!val.equals("")) {
facility.setUrl(val);
}
// 登録日
// 変更しない
// タスクを実行する
final UserDelegater udl = new UserDelegater();
worker = new SimpleWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("updateUser doInBackground");
int cnt = udl.updateFacility(user);
return cnt > 0;
}
@Override
protected void succeeded(Boolean result) {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("updateUser succeeded");
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
String msg = bundle.getString("message.updatedFacilityInfo");
JOptionPane.showMessageDialog(getFrame(),
msg,
ClientContext.getFrameTitle(getName()),
JOptionPane.INFORMATION_MESSAGE);
}
@Override
protected void cancelled() {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("updateUser cancelled");
}
@Override
protected void failed(java.lang.Throwable cause) {
JOptionPane.showMessageDialog(getFrame(),
cause.getMessage(),
ClientContext.getFrameTitle(getName()),
JOptionPane.WARNING_MESSAGE);
java.util.logging.Logger.getLogger(this.getClass().getName()).warning("updateUser failed");
java.util.logging.Logger.getLogger(this.getClass().getName()).warning(cause.getCause().getMessage());
java.util.logging.Logger.getLogger(this.getClass().getName()).warning(cause.getMessage());
}
@Override
protected void startProgress() {
delayCount = 0;
taskTimer.start();
}
@Override
protected void stopProgress() {
taskTimer.stop();
monitor.close();
taskTimer = null;
monitor = null;
}
};
Component c = getFrame();
String message = null;
ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
String note = bundle.getString("task.default.updateMessage");
maxEstimation = Integer.parseInt(bundle.getString("task.default.maxEstimation"));
delay = Integer.parseInt(bundle.getString("task.default.delay"));
monitor = new ProgressMonitor(c, message, note, 0, maxEstimation / delay);
taskTimer = new Timer(delay, (ActionEvent e) -> {
delayCount++;
if (monitor.isCanceled() && (!worker.isCancelled())) {
worker.cancel(true);
} else {
monitor.setProgress(delayCount);
}
});
worker.execute();
}
}
/**
* ユーザリストを取得するクラス。名前がいけない。
*/
protected class UserListPanel extends JPanel {
private ListTableModel<UserModel> tableModel;
private JTable table;
private final JButton getButton;
private final JButton deleteButton;
private final JButton cancelButton;
public UserListPanel() {
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
String line = bundle.getString("columnNames.userListTable");
String[] columns = line.split(",");
// ユーザテーブル
tableModel = new ListTableModel<UserModel>(columns, 0) {
// 編集不可
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
// オブジェクトをテーブルに表示する
@Override
public Object getValueAt(int row, int col) {
UserModel entry = getObject(row);
if (entry == null) {
return null;
}
String ret = null;
switch (col) {
case 0:
ret = entry.idAsLocal();
break;
case 1:
ret = entry.getSirName();
break;
case 2:
ret = entry.getGivenName();
break;
case 3:
ret = entry.getLicenseModel().getLicenseDesc();
break;
case 4:
ret = entry.getDepartmentModel().getDepartmentDesc();
break;
}
return ret;
}
};
table = new JTable(tableModel);
// Selection を設定する
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionAllowed(true);
table.setToolTipText(bundle.getString("toolTipText.deleteSelectedUser"));
// renderer
StripeTableCellRenderer rederer = new StripeTableCellRenderer();
rederer.setTable(table);
rederer.setDefaultRenderer();
ListSelectionModel m = table.getSelectionModel();
m.addListSelectionListener((ListSelectionEvent e) -> {
if (e.getValueIsAdjusting() == false) {
// 削除ボタンをコントロールする
// 医療資格が other 以外は削除できない
int index1 = table.getSelectedRow();
UserModel entry = tableModel.getObject(index1);
if (entry!=null) {
controleDelete(entry);
}
}
});
// Layout
JScrollPane scroller = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroller.getViewport().setPreferredSize(new Dimension(480,200));
getButton = new JButton(bundle.getString("actionText.listUsers"));
getButton.setEnabled(true);
//getButton.setMnemonic('L');
getButton.addActionListener((ActionEvent e) -> {
getUsers();
});
deleteButton = new JButton(bundle.getString("actionText.delete"));
deleteButton.setEnabled(false);
//deleteButton.setMnemonic('D');
deleteButton.addActionListener((ActionEvent e) -> {
deleteUser();
});
deleteButton.setToolTipText(bundle.getString("toolTipText.deleteBtn"));
cancelButton = new JButton(bundle.getString("actionText.close"));
cancelButton.addActionListener((ActionEvent e) -> {
stop();
});
//cancelButton.setMnemonic('C');
JPanel btnPanel;
if (ClientContext.isMac()) {
btnPanel = GUIFactory.createCommandButtonPanel(new JButton[]{deleteButton, cancelButton, getButton});
} else {
btnPanel = GUIFactory.createCommandButtonPanel(new JButton[]{getButton, deleteButton, cancelButton});
}
this.setLayout(new BorderLayout(0, 17));
this.add(scroller, BorderLayout.CENTER);
this.add(btnPanel, BorderLayout.SOUTH);
this.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
//s.oh^ 2013/01/22 表示時にリストを取得するように変更
getUsers();
//s.oh$
}
/**
* 医療資格が other 以外は削除できない。
* @param user
*/
private void controleDelete(UserModel user) {
boolean isMe = user.getId() == Project.getUserModel().getId();
deleteButton.setEnabled(!isMe);
}
/**
* 施設内の全ユーザを取得する。
*/
private void getUsers() {
final UserDelegater udl = new UserDelegater();
worker = new SimpleWorker<List<UserModel>, Void>() {
@Override
protected List<UserModel> doInBackground() throws Exception {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("getUsers doInBackground");
ArrayList<UserModel> result = udl.getAllUser();
return result;
}
@Override
protected void succeeded(List<UserModel> results) {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("getUsers succeeded");
//s.oh^ 2013/01/21 メンテユーザの非表示
//tableModel.setDataProvider(results);
ArrayList<UserModel> list = new ArrayList<>();
for(UserModel model : results) {
if(model.getUserId().endsWith("lscmainte")) {
}else{
list.add(model);
}
}
tableModel.setDataProvider(list);
//s.oh$
}
@Override
protected void cancelled() {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("getUsers cancelled");
}
@Override
protected void failed(java.lang.Throwable cause) {
JOptionPane.showMessageDialog(getFrame(),
cause.getMessage(),
ClientContext.getFrameTitle(getName()),
JOptionPane.WARNING_MESSAGE);
java.util.logging.Logger.getLogger(this.getClass().getName()).warning("getUsers failed");
java.util.logging.Logger.getLogger(this.getClass().getName()).warning(cause.getCause().getMessage());
java.util.logging.Logger.getLogger(this.getClass().getName()).warning(cause.getMessage());
}
@Override
protected void startProgress() {
delayCount = 0;
taskTimer.start();
}
@Override
protected void stopProgress() {
taskTimer.stop();
monitor.close();
taskTimer = null;
monitor = null;
}
};
Component c = getFrame();
String message = null;
ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
String note = bundle.getString("task.default.searchMessage");
maxEstimation = Integer.parseInt(bundle.getString("task.default.maxEstimation"));
delay = Integer.parseInt(bundle.getString("task.default.delay"));
monitor = new ProgressMonitor(c, message, note, 0, maxEstimation / delay);
taskTimer = new Timer(delay, (ActionEvent e) -> {
delayCount++;
if (monitor.isCanceled() && (!worker.isCancelled())) {
worker.cancel(true);
} else {
monitor.setProgress(delayCount);
}
});
worker.execute();
}
/**
* 選択したユーザを削除する。
*
*/
private void deleteUser() {
int row = table.getSelectedRow();
UserModel entry = (UserModel) tableModel.getObject(row);
if (entry == null) {
return;
}
//
// 作成したドキュメントも削除するかどうかを選ぶ
//
boolean deleteDoc = true;
if (entry.getLicenseModel().getLicense().equals("doctor")) {
deleteDoc = false;
}
final UserDelegater udl = new UserDelegater();
final String deleteId = entry.getUserId();
worker = new SimpleWorker<List<UserModel>, Void>() {
@Override
protected List<UserModel> doInBackground() throws Exception {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("deleteUser doInBackground");
ArrayList<UserModel> result = null;
if (udl.deleteUser(deleteId) > 0) {
result = udl.getAllUser();
}
return result;
}
@Override
protected void succeeded(List<UserModel> results) {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("deleteUser succeeded");
//s.oh^ 2013/01/21 メンテユーザの非表示
//tableModel.setDataProvider(results);
ArrayList<UserModel> list = new ArrayList<>();
for(UserModel model : results) {
if(model.getUserId().endsWith("lscmainte")) {
}else{
list.add(model);
}
}
tableModel.setDataProvider(list);
//s.oh$
String msg = ClientContext.getMyBundle(AddUserImpl.class).getString("message.deletedUser");
JOptionPane.showMessageDialog(getFrame(),
msg,
ClientContext.getFrameTitle(getName()),
JOptionPane.INFORMATION_MESSAGE);
}
@Override
protected void cancelled() {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("deleteUser cancelled");
}
@Override
protected void failed(java.lang.Throwable cause) {
JOptionPane.showMessageDialog(getFrame(),
cause.getMessage(),
ClientContext.getFrameTitle(getName()),
JOptionPane.WARNING_MESSAGE);
java.util.logging.Logger.getLogger(this.getClass().getName()).warning("deleteUser failed");
java.util.logging.Logger.getLogger(this.getClass().getName()).warning(cause.getCause().getMessage());
java.util.logging.Logger.getLogger(this.getClass().getName()).warning(cause.getMessage());
}
@Override
protected void startProgress() {
delayCount = 0;
taskTimer.start();
}
@Override
protected void stopProgress() {
taskTimer.stop();
monitor.close();
taskTimer = null;
monitor = null;
}
};
Component c = getFrame();
String message = null;
ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
String note = bundle.getString("task.default.deleteMessage");
maxEstimation = Integer.parseInt(bundle.getString("task.default.maxEstimation"));
delay = Integer.parseInt(bundle.getString("task.default.delay"));
monitor = new ProgressMonitor(c, message, note, 0, maxEstimation / delay);
taskTimer = new Timer(delay, (ActionEvent e) -> {
delayCount++;
if (monitor.isCanceled() && (!worker.isCancelled())) {
worker.cancel(true);
} else {
monitor.setProgress(delayCount);
}
});
worker.execute();
}
}
/**
* 施設内ユーザ登録クラス。
*/
protected class AddUserPanel extends JPanel {
// cn 氏名(sn & ' ' & givenName)
private final LicenseModel[] licenses; // 職種(MML0026)
private final DepartmentModel[] depts; // 診療科(MML0028)
// JTextField description;
private final JButton okButton;
private final JButton cancelButton;
private boolean ok;
// UserId と Password の長さ
private final int[] userIdLength; // min,max
private final int[] passwordLength; // min,max
private final String idPassPattern;
private final String usersRole; // user に与える role 名
private AddUserView view;
public AddUserPanel() {
view = new AddUserView();
userIdLength = ClientContext.getIntArray("addUser.userId.length");
passwordLength = ClientContext.getIntArray("addUser.password.length");
usersRole = ClientContext.getString("addUser.user.roleName");
idPassPattern = ClientContext.getString("addUser.pattern.idPass");
// DocumentListener
DocumentListener dl = new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
}
@Override
public void insertUpdate(DocumentEvent e) {
checkButton();
}
@Override
public void removeUpdate(DocumentEvent e) {
checkButton();
}
};
JTextField uid = view.getUid();
uid.addFocusListener(AutoRomanListener.getInstance());
uid.getDocument().addDocumentListener(dl);
uid.setDocument(new RegexConstrainedDocument(idPassPattern));
//s.oh^ 不具合修正
uid.enableInputMethods(false);
//s.oh$
uid.addActionListener((ActionEvent e) -> {
view.getUserPassword1().requestFocus();
});
JTextField userPassword1 = view.getUserPassword1();
userPassword1.addFocusListener(AutoRomanListener.getInstance());
userPassword1.getDocument().addDocumentListener(dl);
userPassword1.setDocument(new RegexConstrainedDocument(idPassPattern));
userPassword1.addActionListener((ActionEvent e) -> {
view.getUserPassword2().requestFocus();
});
JTextField userPassword2 = view.getUserPassword2();
userPassword2.addFocusListener(AutoRomanListener.getInstance());
userPassword2.getDocument().addDocumentListener(dl);
userPassword2.setDocument(new RegexConstrainedDocument(idPassPattern));
userPassword2.addActionListener((ActionEvent e) -> {
view.getSn().requestFocus();
});
JTextField sn = view.getSn();
sn.addFocusListener(AutoKanjiListener.getInstance());
sn.getDocument().addDocumentListener(dl);
sn.addActionListener((ActionEvent e) -> {
view.getGivenName().requestFocus();
});
JTextField givenName = view.getGivenName();
givenName.addFocusListener(AutoKanjiListener.getInstance());
givenName.getDocument().addDocumentListener(dl);
givenName.addActionListener((ActionEvent e) -> {
view.getEmailField().requestFocus();
});
JTextField emailField = view.getEmailField();
emailField.addFocusListener(AutoRomanListener.getInstance());
emailField.getDocument().addDocumentListener(dl);
emailField.addActionListener((ActionEvent e) -> {
view.getMayakuField().requestFocus();
});
// 麻薬
JTextField mayaku = view.getMayakuField();
mayaku.addFocusListener(AutoRomanListener.getInstance());
mayaku.getDocument().addDocumentListener(dl);
mayaku.addActionListener((ActionEvent e) -> {
view.getUid().requestFocus();
});
// 医療資格
licenses = ClientContext.getLicenseModel();
view.getLicenseCombo().setModel(new DefaultComboBoxModel(licenses));
// 診察科
depts = ClientContext.getDepartmentModel();
view.getDeptCombo().setModel(new DefaultComboBoxModel(depts));
ActionListener al = (ActionEvent e) -> {
addUserEntry();
};
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
okButton = new JButton(bundle.getString("actionText.add"));
okButton.addActionListener(al);
okButton.setEnabled(false);
cancelButton = new JButton(bundle.getString("actionText.close"));
cancelButton.addActionListener((ActionEvent e) -> {
stop();
});
JPanel btnPanel;
if (ClientContext.isMac()) {
btnPanel = GUIFactory.createCommandButtonPanel(new JButton[]{cancelButton, okButton});
} else {
btnPanel = GUIFactory.createCommandButtonPanel(new JButton[]{okButton, cancelButton});
}
this.setLayout(new BorderLayout(0, 17));
this.add(view, BorderLayout.CENTER);
this.add(btnPanel, BorderLayout.SOUTH);
this.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
}
private void addUserEntry() {
if (!userIdOk()) {
return;
}
if (!passwordOk()) {
return;
}
String userId = view.getUid().getText().trim();
String pass = new String(view.getUserPassword1().getPassword());
UserModel loginUser = Project.getUserModel();
String facilityId = loginUser.getFacilityModel().getFacilityId();
String hashPass = HashUtil.MD5(pass);
final UserModel user = new UserModel();
StringBuilder sb = new StringBuilder(facilityId);
sb.append(IInfoModel.COMPOSITE_KEY_MAKER);
sb.append(userId);
user.setUserId(sb.toString());
user.setPassword(hashPass);
user.setSirName(view.getSn().getText().trim());
user.setGivenName(view.getGivenName().getText().trim());
user.setCommonName(user.getSirName() + " " + user.getGivenName());
// 施設情報
// 管理者のものを使用する
user.setFacilityModel(Project.getUserModel().getFacilityModel());
// 医療資格
int index = view.getLicenseCombo().getSelectedIndex();
user.setLicenseModel(licenses[index]);
// 診療科
index = view.getDeptCombo().getSelectedIndex();
user.setDepartmentModel(depts[index]);
// MemberType
// 管理者のものを使用する
user.setMemberType(Project.getUserModel().getMemberType());
// RegisteredDate
if (Project.getUserModel().getMemberType().equals("ASP_TESTER")) {
user.setRegisteredDate(Project.getUserModel().getRegisteredDate());
} else {
user.setRegisteredDate(new Date());
}
// Email
user.setEmail(view.getEmailField().getText().trim());
// 麻薬
String value = (!view.getMayakuField().getText().trim().equals(""))
? (view.getMayakuField().getText().trim())
: null;
user.setUseDrugId(value);
// Role = user
RoleModel rm = new RoleModel();
rm.setRole(usersRole);
user.addRole(rm);
rm.setUserModel(user);
rm.setUserId(user.getUserId()); // 必要
// タスクを実行する
final UserDelegater udl = new UserDelegater();
worker = new SimpleWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("addUserEntry doInBackground");
int cnt = udl.addUser(user);
return true;
}
@Override
protected void succeeded(Boolean results) {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("addUserEntry succeeded");
String msg = ClientContext.getMyBundle(AddUserImpl.class).getString("message.addedUser");
JOptionPane.showMessageDialog(getFrame(),
msg,
ClientContext.getFrameTitle(getName()),
JOptionPane.INFORMATION_MESSAGE);
}
@Override
protected void cancelled() {
java.util.logging.Logger.getLogger(this.getClass().getName()).fine("addUserEntry cancelled");
}
@Override
protected void failed(java.lang.Throwable cause) {
String msg = ClientContext.getMyBundle(AddUserImpl.class).getString("warning.dupuricatedID");
JOptionPane.showMessageDialog(getFrame(),
msg,
ClientContext.getFrameTitle(getName()),
JOptionPane.WARNING_MESSAGE);
java.util.logging.Logger.getLogger(this.getClass().getName()).warning("addUserEntry failed");
}
@Override
protected void startProgress() {
delayCount = 0;
taskTimer.start();
}
@Override
protected void stopProgress() {
taskTimer.stop();
monitor.close();
taskTimer = null;
monitor = null;
}
};
Component c = getFrame();
String message = null;
ResourceBundle bundle = ClientContext.getMyBundle(AddUserImpl.class);
String note = bundle.getString("task.default.addMessage");
maxEstimation = Integer.parseInt(bundle.getString("task.default.maxEstimation"));
delay = Integer.parseInt(bundle.getString("task.default.delay"));
monitor = new ProgressMonitor(c, message, note, 0, maxEstimation / delay);
taskTimer = new Timer(delay, (ActionEvent e) -> {
delayCount++;
if (monitor.isCanceled() && (!worker.isCancelled())) {
worker.cancel(true);
} else {
monitor.setProgress(delayCount);
}
});
worker.execute();
}
private boolean userIdOk() {
String userId = view.getUid().getText().trim();
if (userId.equals("")) {
return false;
}
int len = userId.length();
return (len >= userIdLength[0]);
}
private boolean passwordOk() {
String passwd1 = new String(view.getUserPassword1().getPassword());
String passwd2 = new String(view.getUserPassword2().getPassword());
if (passwd1.equals("") || passwd2.equals("")) {
return false;
}
if ((passwd1.length() < passwordLength[0]) || (passwd2.length() < passwordLength[0])) {
return false;
}
return passwd1.equals(passwd2);
}
private void checkButton() {
boolean userOk = userIdOk();
boolean passwordOk = passwordOk();
boolean snOk = !view.getSn().getText().trim().equals("");
boolean givenOk = !view.getGivenName().getText().trim().equals("");
boolean emailOk = !view.getEmailField().getText().trim().equals("");
boolean newOk = (userOk && passwordOk && snOk && givenOk && emailOk);
if (ok != newOk) {
ok = newOk;
okButton.setEnabled(ok);
}
}
}
}