/*
* Copyright (C) 2008 Michael Romankiewicz
* microm at users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package net.sourceforge.squirrel_sql.plugins.firebirdmanager.gui;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.FirebirdManagerHelper;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.pref.FirebirdManagerPreferenceBean;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.pref.FirebirdManagerUsersPreferenceBean;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.pref.PreferencesManager;
import org.firebirdsql.gds.GDSException;
import org.firebirdsql.gds.IscSvcHandle;
import org.firebirdsql.management.FBUser;
import org.firebirdsql.management.FBUserManager;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
public class FirebirdManagerUserManagerFrame extends DialogWidget
implements IFirebirdManagerFrame, ActionListener, KeyListener, ListSelectionListener {
private static final long serialVersionUID = 7592543018317340170L;
private final String CR = System.getProperty("line.separator", "\n");
private final int TABLE_USERS_COL_USERNAME = 0;
private final int TABLE_USERS_COL_USERID = 1;
private final int TABLE_USERS_COL_GROUPID = 2;
private final int TABLE_USERS_COL_FIRSTNAME = 3;
private final int TABLE_USERS_COL_MIDDLENAME = 4;
private final int TABLE_USERS_COL_LASTNAME = 5;
private final int UNIQUE_USER = 0;
private final int USERNAME_EXISTS = 1;
private final int USERID_EXISTS = 2;
// variables
// ========================================================================
// non visible
// ------------------------------------------------------------------------
// Logger for this class
private final static ILogger log = LoggerController.createLogger(FirebirdManagerUserManagerFrame.class);
private static final StringManager stringManager = StringManagerFactory
.getStringManager(FirebirdManagerUserManagerFrame.class);
// global references
private FirebirdManagerPreferenceBean firebirdPreferencesBean;
// session preferences
private FirebirdManagerUsersPreferenceBean sessionPreferencesBean = null;
// display mode
private int mode = FirebirdManagerHelper.DISPLAY_MODE;
// read map with users
private Map<String,FBUser> mapUsers = null;
// usermanager of jaybird
private FBUserManager fbUserManager = new FBUserManager();
// handle of connected server
private IscSvcHandle iscSvcHandle = null;
// table data objects
private Vector<Vector<Object>> vecTableUsers = null;
private Vector<String> vecTableUsersHeader = null;
// visible (gui)
// ------------------------------------------------------------------------
private JButton btnNew = new JButton();
private JButton btnEdit = new JButton();
private JButton btnSave = new JButton();
private JButton btnCancel = new JButton();
private JButton btnDelete = new JButton();
private JTextField jtextfieldManagerUsername = new JTextField();
private JLabel lblManagerUsername = new JLabel();
private JLabel lblManagerPassword = new JLabel();
private JLabel lblManagerTitle = new JLabel();
private JLabel lblServer = new JLabel();
private JTextField jtextfieldServer = new JTextField();
private JLabel lblPort = new JLabel();
private JCheckBox jcheckboxConnectToServer = new JCheckBox();
private JTextField jtextfieldPort = new JTextField();
private JPasswordField jpasswordfieldManager = new JPasswordField();
private JTable jtableUsers = new JTable(new DefaultTableModel());
private JLabel lblUsername = new JLabel();
private JLabel lblPassword1 = new JLabel();
private JLabel lblPassword2 = new JLabel();
private JLabel lblFirstName = new JLabel();
private JTextField jtextfieldUsername = new JTextField();
private JLabel lblUserId = new JLabel();
private JLabel lblGroupId = new JLabel();
private JTextField jtextfieldUserId = new JTextField();
private JTextField jtextfieldGroupId = new JTextField();
private JTextField jtextfieldFirstName = new JTextField();
private JPasswordField jpasswordField1 = new JPasswordField();
private JPasswordField jpasswordField2 = new JPasswordField();
private JLabel lblMiddleName = new JLabel();
private JTextField jtextfieldMiddleName = new JTextField();
private JLabel lblLastName = new JLabel();
private JTextField jtextfieldLastName = new JTextField();
private IApplication _application;
/**
* Constructor
* @param application
*/
public FirebirdManagerUserManagerFrame(IApplication application) {
super("Firebird manager - " + stringManager.getString("usermanager.title"), true, true, true, true, application);
_application = application;
initLayout();
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
this.moveToFront();
}
private interface i18n {
// Labels
String LBL_BTN_NEW = stringManager.getString("global.lbl.btn.new");
String LBL_BTN_EDIT = stringManager.getString("global.lbl.btn.edit");
String LBL_BTN_SAVE = stringManager.getString("global.lbl.btn.save");
String LBL_BTN_CANCEL = stringManager.getString("global.lbl.btn.cancel");
String LBL_BTN_DELETE = stringManager.getString("global.lbl.btn.delete");
String LBL_MANAGER_TITLE = stringManager.getString("usermanager.lbl.manager.title");
String LBL_MANAGER_SERVER = stringManager.getString("usermanager.lbl.manager.server");
String LBL_MANAGER_PORT = stringManager.getString("usermanager.lbl.manager.port");
String LBL_MANAGER_CONECTED = stringManager.getString("usermanager.lbl.manager.connected");
String LBL_MANAGER_USERNAME = stringManager.getString("usermanager.lbl.manager.username");
String LBL_MANAGER_PASSWORD = stringManager.getString("usermanager.lbl.manager.password");
String LBL_USERS_USERNAME = stringManager.getString("usermanager.lbl.username");
String LBL_USERS_USERID = stringManager.getString("usermanager.lbl.userid");
String LBL_USERS_GROUPID = stringManager.getString("usermanager.lbl.groupid");
String LBL_USERS_PASSWORD = stringManager.getString("usermanager.lbl.password");
String LBL_USERS_PASSWORD_CONFIRM = stringManager.getString("usermanager.lbl.password.confirm");
String LBL_USERS_FIRSTNAME = stringManager.getString("usermanager.lbl.firstname");
String LBL_USERS_MIDDLENAME = stringManager.getString("usermanager.lbl.middlename");
String LBL_USERS_LASTNAME = stringManager.getString("usermanager.lbl.lastname");
// Tooltips and questions
String TOOLTIP_USERNAME = stringManager.getString("usermanager.tooltip.username");
String TOOLTIP_PASSWORD = stringManager.getString("usermanager.tooltip.password");
// Questions
String QUESTION_TITLE_DELETE_USER = stringManager.getString("rolemanager.question.title.delete.user");
String QUESTION_DELETE_USER = stringManager.getString("usermanager.question.delete.user");
// Errors
String ERROR_CANNOT_CONNECT_SERVER = stringManager.getString("usermanager.error.cannot.connect.server");
String ERROR_CANNOT_DISCONNECT_SERVER = stringManager.getString("usermanager.error.cannot.disconnect.server");
String ERROR_USERNAME_MISSING = stringManager.getString("usermanager.error.username.missing");
String ERROR_USERNAME_MAXLENGTH = stringManager.getString("usermanager.error.username.maxlength");
String ERROR_PASSWORD_MISSING = stringManager.getString("usermanager.error.password.missing");
String ERROR_PASSWORD_DIFFERENCES = stringManager.getString("usermanager.error.passwords.differences");
String ERROR_PASSWORD_MAXLENGTH = stringManager.getString("usermanager.error.password.maxlength");
String ERROR_NO_NUMBER = stringManager.getString("usermanager.error.no.number");
String ERROR_USERNAME_EXISTS = stringManager.getString("usermanager.error.username.exists");
String ERROR_USERID_EXISTS = stringManager.getString("usermanager.error.userid.exists");
String ERROR_SAVE_USER = stringManager.getString("usermanager.error.save.user");
String ERROR_DELETE_USER = stringManager.getString("usermanager.error.delete.user");
}
private void initLayout() {
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(createPanel(), BorderLayout.CENTER);
initVisualObjects();
readPreferences();
}
public void setFocusToFirstEmptyInputField() {
if (jtextfieldServer.getText().length() == 0) {
jtextfieldServer.requestFocusInWindow();
} else if (jtextfieldPort.getText().length() == 0) {
jtextfieldPort.requestFocusInWindow();
} else if (jtextfieldManagerUsername.getText().length() == 0) {
jtextfieldManagerUsername.requestFocusInWindow();
} else {
jpasswordfieldManager.requestFocusInWindow();
}
}
private JPanel createPanel() {
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:5DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE","CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:12DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
btnNew.setActionCommand("new");
btnNew.setName("btnNew");
btnNew.setText("new");
jpanel1.add(btnNew,cc.xy(2,4));
btnEdit.setActionCommand("edit");
btnEdit.setName("btnEdit");
btnEdit.setText("edit");
jpanel1.add(btnEdit,cc.xy(4,4));
btnSave.setActionCommand("save");
btnSave.setName("btnSave");
btnSave.setText("save");
jpanel1.add(btnSave,cc.xy(6,4));
btnCancel.setActionCommand("cancel");
btnCancel.setName("btnCancel");
btnCancel.setText("cancel");
jpanel1.add(btnCancel,cc.xy(8,4));
btnDelete.setActionCommand("delete");
btnDelete.setName("btnDelete");
btnDelete.setText("delete");
jpanel1.add(btnDelete,cc.xy(10,4));
jpanel1.add(createPanelConnectionData(),cc.xywh(2,2,11,1));
jpanel1.add(createPanelUserEdit(),cc.xywh(2,6,11,1));
return jpanel1;
}
public JPanel createPanelConnectionData() {
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout(
"FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:NONE,FILL:3DLU:GROW(1.0)",
"CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
jtextfieldManagerUsername.setName("jtextfieldManagerUsername");
jpanel1.add(jtextfieldManagerUsername, cc.xy(3, 5));
lblManagerUsername.setName("lblManagerUsername");
lblManagerUsername.setText("username");
jpanel1.add(lblManagerUsername, cc.xy(1, 5));
lblManagerPassword.setName("lblManagerPassword");
lblManagerPassword.setText("password");
jpanel1.add(lblManagerPassword, cc.xy(5, 5));
lblManagerTitle.setName("lblManagerTitle");
lblManagerTitle.setText("Connection parameter:");
jpanel1.add(lblManagerTitle, cc.xywh(1, 1, 8, 1));
lblServer.setName("lblServer");
lblServer.setText("server");
jpanel1.add(lblServer, cc.xy(1, 3));
jtextfieldServer.setName("jtextfieldServer");
jpanel1.add(jtextfieldServer, cc.xy(3, 3));
lblPort.setName("lblPort");
lblPort.setText("port");
jpanel1.add(lblPort, cc.xy(5, 3));
jtextfieldPort.setName("jtextfieldPort");
jpanel1.add(jtextfieldPort, cc.xy(7, 3));
jpasswordfieldManager.setName("jpasswordfieldManager");
jpanel1.add(jpasswordfieldManager, cc.xywh(7, 5, 2, 1));
jcheckboxConnectToServer.setActionCommand("connected to server");
jcheckboxConnectToServer.setName("jcheckboxConnectToServer");
jcheckboxConnectToServer.setText("connected to server");
jcheckboxConnectToServer.setHorizontalAlignment(JCheckBox.RIGHT);
jpanel1.add(jcheckboxConnectToServer, cc.xy(8, 3));
return jpanel1;
}
public JPanel createPanelUserEdit() {
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:NONE,FILL:DEFAULT:GROW(1.0)","CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
jtableUsers.setName("jtableUsers");
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(jtableUsers);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xywh(1,1,8,1));
lblUsername.setName("lblUsername");
lblUsername.setText("Username");
jpanel1.add(lblUsername,cc.xy(1,3));
lblPassword1.setName("lblPassword1");
lblPassword1.setText("Password");
jpanel1.add(lblPassword1,cc.xy(1,7));
lblPassword2.setName("lblPassword2");
lblPassword2.setText("Confirm password");
jpanel1.add(lblPassword2,cc.xy(1,9));
lblFirstName.setName("lblFirstName");
lblFirstName.setText("Firstname");
jpanel1.add(lblFirstName,cc.xy(1,11));
lblMiddleName.setName("lblMiddleName");
lblMiddleName.setText("Middle name");
jpanel1.add(lblMiddleName,cc.xy(1,13));
lblLastName.setName("lblLastName");
lblLastName.setText("Last name");
jpanel1.add(lblLastName,cc.xy(1,15));
jtextfieldUsername.setName("jtextfieldUsername");
jpanel1.add(jtextfieldUsername,cc.xywh(3,3,6,1));
jpasswordField1.setName("jpasswordField1");
jpanel1.add(jpasswordField1,cc.xywh(3,7,6,1));
jpasswordField2.setName("jpasswordField2");
jpanel1.add(jpasswordField2,cc.xywh(3,9,6,1));
jtextfieldFirstName.setName("jtextfieldFirstName");
jpanel1.add(jtextfieldFirstName,cc.xywh(3,11,6,1));
jtextfieldMiddleName.setName("jtextfieldMiddleName");
jpanel1.add(jtextfieldMiddleName,cc.xywh(3,13,6,1));
jtextfieldLastName.setName("jtextfieldLastName");
jpanel1.add(jtextfieldLastName,cc.xywh(3,15,6,1));
lblUserId.setName("lblUserId");
lblUserId.setText("user id");
jpanel1.add(lblUserId,cc.xy(1,5));
lblGroupId.setName("lblGroupId");
lblGroupId.setText("group id");
jpanel1.add(lblGroupId,cc.xy(5,5));
jtextfieldUserId.setName("jtextfieldUserId");
jpanel1.add(jtextfieldUserId,cc.xy(3,5));
jtextfieldGroupId.setName("jtextfieldGroupId");
jpanel1.add(jtextfieldGroupId,cc.xy(7,5));
return jpanel1;
}
private void initVisualObjects() {
btnNew.setText(i18n.LBL_BTN_NEW);
btnNew.setIcon(FirebirdManagerHelper.loadIcon("new22x22.png"));
btnNew.addActionListener(this);
btnEdit.setText(i18n.LBL_BTN_EDIT);
btnEdit.setIcon(FirebirdManagerHelper.loadIcon("edit22x22.png"));
btnEdit.addActionListener(this);
btnSave.setText(i18n.LBL_BTN_SAVE);
btnSave.setIcon(FirebirdManagerHelper.loadIcon("save22x22.png"));
btnSave.addActionListener(this);
btnCancel.setText(i18n.LBL_BTN_CANCEL);
btnCancel.setIcon(FirebirdManagerHelper.loadIcon("cancel22x22.png"));
btnCancel.addActionListener(this);
btnDelete.setText(i18n.LBL_BTN_DELETE);
btnDelete.setIcon(FirebirdManagerHelper.loadIcon("delete22x22.png"));
btnDelete.addActionListener(this);
lblManagerTitle.setText(i18n.LBL_MANAGER_TITLE);
lblServer.setText(i18n.LBL_MANAGER_SERVER);
lblPort.setText(i18n.LBL_MANAGER_PORT);
jcheckboxConnectToServer.setText(i18n.LBL_MANAGER_CONECTED);
jcheckboxConnectToServer.addActionListener(this);
lblManagerUsername.setText(i18n.LBL_MANAGER_USERNAME);
lblManagerPassword.setText(i18n.LBL_MANAGER_PASSWORD);
jpasswordfieldManager.addKeyListener(this);
jtableUsers.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jtableUsers.getSelectionModel().addListSelectionListener(this);
lblUsername.setText(i18n.LBL_USERS_USERNAME);
jtextfieldUsername.setToolTipText(i18n.TOOLTIP_USERNAME);
lblUserId.setText(i18n.LBL_USERS_USERID);
lblGroupId.setText(i18n.LBL_USERS_GROUPID);
lblPassword1.setText(i18n.LBL_USERS_PASSWORD);
jpasswordField1.setToolTipText(i18n.TOOLTIP_PASSWORD);
lblPassword2.setText(i18n.LBL_USERS_PASSWORD_CONFIRM);
jpasswordField2.setToolTipText(i18n.TOOLTIP_PASSWORD);
lblFirstName.setText(i18n.LBL_USERS_FIRSTNAME);
lblMiddleName.setText(i18n.LBL_USERS_MIDDLENAME);
lblLastName.setText(i18n.LBL_USERS_LASTNAME);
controlComponents(FirebirdManagerHelper.DISPLAY_MODE);
}
/**
* Set input fields with the last saved session preferences when exists
* <br>or otherwise with the global preferences
*/
private void readPreferences() {
firebirdPreferencesBean = PreferencesManager.getGlobalPreferences();
jtextfieldServer.setText(firebirdPreferencesBean.getServer());
jtextfieldPort.setText(firebirdPreferencesBean.getPort());
jtextfieldManagerUsername.setText(firebirdPreferencesBean.getUser());
// preferences from the last session
sessionPreferencesBean = (FirebirdManagerUsersPreferenceBean)PreferencesManager.loadPreferences(PreferencesManager.PREFERENCES_BEAN_USERS);
if (sessionPreferencesBean.getUser().length() > 0)
jtextfieldManagerUsername.setText(sessionPreferencesBean.getUser());
if (sessionPreferencesBean.getServer().length() > 0)
jtextfieldServer.setText(sessionPreferencesBean.getServer());
if (sessionPreferencesBean.getPort().length() > 0)
jtextfieldPort.setText(sessionPreferencesBean.getPort());
}
/**
* Save the session preferences
*/
private void saveSessionPreferences() {
sessionPreferencesBean.setUser(jtextfieldManagerUsername.getText());
sessionPreferencesBean.setServer(jtextfieldServer.getText());
sessionPreferencesBean.setPort(jtextfieldPort.getText());
PreferencesManager.savePreferences(sessionPreferencesBean, PreferencesManager.PREFERENCES_BEAN_USERS);
}
@SuppressWarnings("unchecked")
private void readUsers() {
try {
mapUsers = (Map<String,FBUser>)fbUserManager.getUsers();
} catch (Exception e) {
log.error(e.getLocalizedMessage());
}
Collection<FBUser> listUsers = (Collection<FBUser>)mapUsers.values();
vecTableUsers = new Vector<Vector<Object>>();
Vector<Object> vecRow = null;
for (Iterator iter = listUsers.iterator(); iter.hasNext();) {
FBUser fbUser = (FBUser) iter.next();
vecRow = new Vector<Object>();
vecRow.add(fbUser.getUserName());
vecRow.add(fbUser.getUserId());
vecRow.add(fbUser.getGroupId());
vecRow.add(fbUser.getFirstName());
vecRow.add(fbUser.getMiddleName());
vecRow.add(fbUser.getLastName());
vecTableUsers.add(vecRow);
}
if (vecTableUsersHeader == null) {
vecTableUsersHeader = new Vector<String>();
vecTableUsersHeader.add(i18n.LBL_USERS_USERNAME);
vecTableUsersHeader.add(i18n.LBL_USERS_USERID);
vecTableUsersHeader.add(i18n.LBL_USERS_GROUPID);
vecTableUsersHeader.add(i18n.LBL_USERS_FIRSTNAME);
vecTableUsersHeader.add(i18n.LBL_USERS_MIDDLENAME);
vecTableUsersHeader.add(i18n.LBL_USERS_LASTNAME);
}
((DefaultTableModel)jtableUsers.getModel()).setDataVector(vecTableUsers, vecTableUsersHeader);
}
private void selectUser() {
int row = jtableUsers.getSelectedRow();
if (row > -1) {
controlComponents(mode);
jtextfieldUsername.setText((String)jtableUsers.getValueAt(row, TABLE_USERS_COL_USERNAME));
jtextfieldUserId.setText("" + ((Integer)jtableUsers.getValueAt(row, TABLE_USERS_COL_USERID)).intValue());
jtextfieldGroupId.setText("" + ((Integer)jtableUsers.getValueAt(row, TABLE_USERS_COL_GROUPID)).intValue());
jtextfieldFirstName.setText((String)jtableUsers.getValueAt(row, TABLE_USERS_COL_FIRSTNAME));
jtextfieldMiddleName.setText((String)jtableUsers.getValueAt(row, TABLE_USERS_COL_MIDDLENAME));
jtextfieldLastName.setText((String)jtableUsers.getValueAt(row, TABLE_USERS_COL_LASTNAME));
} else {
initUserFields();
}
}
private void initUserFields() {
jtextfieldUsername.setText("");
jtextfieldUserId.setText("0");
jtextfieldGroupId.setText("0");
jtextfieldFirstName.setText("");
jtextfieldMiddleName.setText("");
jtextfieldLastName.setText("");
jpasswordField1.setText("");
jpasswordField2.setText("");
}
// controlling
// ------------------------------------------------------------------------
private void controlComponents(int mode) {
controlButton(mode);
controlFields(mode);
this.mode = mode;
}
private void controlButton(int mode) {
int rowUser = jtableUsers.getSelectedRow();
boolean sysdba = rowUser > -1
&& ((String)jtableUsers.getValueAt(rowUser, TABLE_USERS_COL_USERNAME)).equalsIgnoreCase("SYSDBA");
btnNew.setEnabled(jcheckboxConnectToServer.isSelected()
&& mode == FirebirdManagerHelper.DISPLAY_MODE);
btnEdit.setEnabled(jcheckboxConnectToServer.isSelected()
&& mode == FirebirdManagerHelper.DISPLAY_MODE
&& rowUser > -1);
btnSave.setEnabled(jcheckboxConnectToServer.isSelected()
&& mode != FirebirdManagerHelper.DISPLAY_MODE);
btnCancel.setEnabled(btnSave.isEnabled());
btnDelete.setEnabled(btnEdit.isEnabled()
&& !sysdba);
}
private void controlFields(int mode) {
boolean disconnected = iscSvcHandle == null;
jtextfieldServer.setEnabled(disconnected);
jtextfieldPort.setEnabled(disconnected);
jtextfieldManagerUsername.setEnabled(disconnected);
jpasswordfieldManager.setEnabled(disconnected);
jtableUsers.setEnabled(mode == FirebirdManagerHelper.DISPLAY_MODE);
jtextfieldUsername.setEnabled(mode == FirebirdManagerHelper.NEW_MODE);
jtextfieldUserId.setEnabled(jtextfieldUsername.isEnabled());
jtextfieldGroupId
.setEnabled(mode != FirebirdManagerHelper.DISPLAY_MODE);
jtextfieldFirstName.setEnabled(jtextfieldGroupId.isEnabled());
jtextfieldMiddleName.setEnabled(jtextfieldGroupId.isEnabled());
jtextfieldLastName.setEnabled(jtextfieldGroupId.isEnabled());
jpasswordField1.setEnabled(jtextfieldGroupId.isEnabled());
jpasswordField2.setEnabled(jtextfieldGroupId.isEnabled());
}
private void connectToServer() {
if (iscSvcHandle == null) {
fbUserManager.setHost(jtextfieldServer.getText());
fbUserManager.setPort(FirebirdManagerHelper.convertStringToIntDef(jtextfieldPort.getText(), 3050));
fbUserManager.setUser(jtextfieldManagerUsername.getText());
fbUserManager.setPassword(new String(jpasswordfieldManager.getPassword()));
try {
iscSvcHandle = fbUserManager.attachServiceManager(fbUserManager.getGds());
readUsers();
controlComponents(mode);
saveSessionPreferences();
} catch (GDSException e) {
JOptionPane.showMessageDialog(null, i18n.ERROR_CANNOT_CONNECT_SERVER);
log.error(i18n.ERROR_CANNOT_CONNECT_SERVER);
jcheckboxConnectToServer.setSelected(false);
}
}
}
private void disconnectFromServer() {
if (iscSvcHandle != null) {
try {
fbUserManager.detachServiceManager(fbUserManager.getGds(), iscSvcHandle);
iscSvcHandle = null;
// init user list
vecTableUsers = new Vector<Vector<Object>>();
((DefaultTableModel)jtableUsers.getModel()).setDataVector(vecTableUsers, vecTableUsersHeader);
controlComponents(mode);
} catch (GDSException e) {
JOptionPane.showMessageDialog(null, i18n.ERROR_CANNOT_DISCONNECT_SERVER);
log.error(i18n.ERROR_CANNOT_DISCONNECT_SERVER);
jcheckboxConnectToServer.setSelected(true);
}
}
}
// user checks
// ------------------------------------------------------------------------
private boolean isInputOK() {
StringBuffer bufError = new StringBuffer();
boolean focusSet = false;
if (jtextfieldUsername.getText().trim().length() == 0) {
bufError.append(i18n.ERROR_USERNAME_MISSING + CR);
jtextfieldUsername.requestFocusInWindow();
focusSet = true;
} else if (jtextfieldUsername.getText().trim().length() > 31) {
bufError.append(i18n.ERROR_USERNAME_MAXLENGTH + CR);
if (!focusSet) {
jtextfieldUsername.requestFocusInWindow();
focusSet = true;
}
}
if (jtextfieldUserId.getText().length() > 0) {
try {
Integer.parseInt(jtextfieldUserId.getText());
} catch (NumberFormatException e) {
bufError.append(i18n.ERROR_NO_NUMBER + CR);
if (!focusSet) {
jtextfieldUserId.requestFocusInWindow();
focusSet = true;
}
}
}
if (jtextfieldGroupId.getText().length() > 0) {
try {
Integer.parseInt(jtextfieldGroupId.getText());
} catch (NumberFormatException e) {
bufError.append(i18n.ERROR_NO_NUMBER + CR);
if (!focusSet) {
jtextfieldGroupId.requestFocusInWindow();
focusSet = true;
}
}
}
boolean pwRequired = mode == FirebirdManagerHelper.NEW_MODE
|| jpasswordField1.getPassword().length > 0
|| jpasswordField2.getPassword().length > 0;
if (pwRequired) {
if (jpasswordField1.getPassword().length == 0) {
bufError.append(i18n.ERROR_PASSWORD_MISSING + CR);
if (!focusSet) {
jpasswordField1.requestFocusInWindow();
focusSet = true;
}
} else {
if (jpasswordField2.getPassword().length == 0) {
bufError.append(i18n.ERROR_PASSWORD_MISSING + CR);
if (!focusSet) {
jpasswordField2.requestFocusInWindow();
focusSet = true;
}
} else {
if (!new String(jpasswordField1.getPassword()).equals(new String(jpasswordField2.getPassword()))) {
bufError.append(i18n.ERROR_PASSWORD_DIFFERENCES + CR);
if (!focusSet) {
jpasswordField1.requestFocusInWindow();
focusSet = true;
}
} else if (new String(jpasswordField1.getPassword()).length() > 31) {
bufError.append(i18n.ERROR_PASSWORD_MAXLENGTH + CR);
if (!focusSet) {
jpasswordField1.requestFocusInWindow();
focusSet = true;
}
}
}
}
}
if (mode == FirebirdManagerHelper.NEW_MODE) {
int uniqueUser = uniqueUser();
if (uniqueUser > UNIQUE_USER) {
if (uniqueUser == USERNAME_EXISTS) {
bufError.append(i18n.ERROR_USERNAME_EXISTS + CR);
} else if (uniqueUser == USERID_EXISTS) {
bufError.append(i18n.ERROR_USERID_EXISTS + CR);
}
if (!focusSet) {
jtextfieldUsername.requestFocusInWindow();
focusSet = true;
}
}
}
if (bufError.length() != 0) {
JOptionPane.showMessageDialog(_application.getMainFrame(), bufError.toString());
}
return bufError.length() == 0;
}
private int uniqueUser() {
int userId = FirebirdManagerHelper.convertStringToIntDef(jtextfieldUserId.getText(), -1);
for (int i = 0; i < jtableUsers.getRowCount(); i++) {
if (jtextfieldUsername.getText().equalsIgnoreCase((String)jtableUsers.getValueAt(i, TABLE_USERS_COL_USERNAME))) {
return USERNAME_EXISTS;
} else if (userId > 0
&& userId == ((Integer)jtableUsers.getValueAt(i, TABLE_USERS_COL_USERID)).intValue()) {
return USERID_EXISTS;
}
}
return UNIQUE_USER;
}
private FBUser fillUser() {
FBUser fbUser = new FBUser();
fbUser.setUserName(jtextfieldUsername.getText().trim());
fbUser.setUserId(FirebirdManagerHelper.convertStringToIntDef(jtextfieldUserId.getText(), 0));
fbUser.setGroupId(FirebirdManagerHelper.convertStringToIntDef(jtextfieldGroupId.getText(), 0));
if (mode == FirebirdManagerHelper.NEW_MODE
|| new String(jpasswordField1.getPassword()).trim().length() > 0) {
fbUser.setPassword(new String(jpasswordField1.getPassword()).trim());
}
fbUser.setFirstName(jtextfieldFirstName.getText());
fbUser.setMiddleName(jtextfieldMiddleName.getText());
fbUser.setLastName(jtextfieldLastName.getText());
return fbUser;
}
private boolean saveData() {
if (isInputOK()) {
try {
if (mode == FirebirdManagerHelper.NEW_MODE) {
fbUserManager.add(fillUser());
} else {
fbUserManager.update(fillUser());
}
readUsers();
return true;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, i18n.ERROR_SAVE_USER);
log.error(i18n.ERROR_SAVE_USER + CR + e.getLocalizedMessage());
}
}
return false;
}
private void deleteUser() {
int row = jtableUsers.getSelectedRow();
if (row > -1
&& JOptionPane.showConfirmDialog(null, i18n.QUESTION_DELETE_USER, i18n.QUESTION_TITLE_DELETE_USER,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
FBUser fbUser = mapUsers.get(jtextfieldUsername.getText());
try {
fbUserManager.delete(fbUser);
readUsers();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, i18n.ERROR_DELETE_USER);
log.error(i18n.ERROR_DELETE_USER + CR + e.getLocalizedMessage());
}
}
}
// ########################################################################
// ########## events
// ########################################################################
// ------------------------------------------------------------------------
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnNew) {
initUserFields();
controlComponents(FirebirdManagerHelper.NEW_MODE);
jtextfieldUsername.requestFocusInWindow();
} else if (e.getSource() == btnEdit) {
controlComponents(FirebirdManagerHelper.EDIT_MODE);
jtextfieldFirstName.requestFocusInWindow();
} else if (e.getSource() == btnSave) {
if (saveData()) {
controlComponents(FirebirdManagerHelper.DISPLAY_MODE);
}
} else if (e.getSource() == btnCancel) {
selectUser();
controlComponents(FirebirdManagerHelper.DISPLAY_MODE);
} else if (e.getSource() == btnDelete) {
deleteUser();
} else if (e.getSource() == jcheckboxConnectToServer) {
if (jcheckboxConnectToServer.isSelected()) {
connectToServer();
} else {
disconnectFromServer();
}
}
}
// ------------------------------------------------------------------------
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
if (e.getSource() == jpasswordfieldManager
&& !jcheckboxConnectToServer.isSelected()) {
jcheckboxConnectToServer.doClick();
}
}
}
public void keyReleased(KeyEvent e) {
}
// ------------------------------------------------------------------------
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()
&& e.getSource() == jtableUsers.getSelectionModel()) {
selectUser();
}
}
}