📄 usermanagerpanel.java
字号:
// user download limit
JLabel jDownloadLab = new JLabel("Max. Download (bytes/sec) :: ");
jDownloadLab.setHorizontalAlignment(JLabel.RIGHT);
jDownloadLab.setForeground(Color.black);
gc.gridx = 0;
gc.gridy = ++yindex;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
topPanel.add(jDownloadLab, gc);
m_downloadLst = new JComboBox(BYTE_RATES);
m_downloadLst.setPreferredSize(new Dimension(130, 22));
m_downloadLst.setEditable(true);
gc.gridx = 1;
gc.gridy = yindex;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
topPanel.add(m_downloadLst, gc);
JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
add(btnPanel, BorderLayout.SOUTH);
// save user
JButton saveBtn = new JButton("Save");
saveBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
save();
}
});
btnPanel.add(saveBtn);
// delete user
JButton deleteBtn = new JButton("Delete");
deleteBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
delete();
}
});
btnPanel.add(deleteBtn);
// reload user data
JButton reloadBtn = new JButton("Reload");
reloadBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
refresh(m_fconfig);
}
});
btnPanel.add(reloadBtn);
}
/**
* Generate random password.
*/
private void generatePassword() {
StringBuffer sb = new StringBuffer(8);
for(int i=0; i<8; i++) {
int charType = PASS_GEN.nextInt(3);
switch (charType) {
// number
case 0:
sb.append( (char)('0' + PASS_GEN.nextInt(10)) );
break;
// uppercase character
case 1:
sb.append( (char)('A' + PASS_GEN.nextInt(26)) );
break;
// lowercase character
case 2:
sb.append( (char)('a' + PASS_GEN.nextInt(26)) );
break;
}
}
String password = sb.toString();
int option = JOptionPane.showConfirmDialog(this,
"Generated password: " + password,
"Password Generation",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE);
if(option == JOptionPane.OK_OPTION) {
m_passwordTxt.setText(password);
m_retypePasswordTxt.setText(password);
m_passwordChkBox.setSelected(true);
}
}
/**
* Refresh the panel - set the ftp config.
*/
public void refresh(IFtpConfig config) {
m_fconfig = config;
m_userLst.removeAllItems();
if(m_fconfig == null) {
return;
}
UserManager userManager = m_fconfig.getUserManager();
try {
Iterator userIt = userManager.getAllUserNames().iterator();
boolean hasUser = false;
while(userIt.hasNext()) {
hasUser = true;
m_userLst.addItem(userIt.next());
}
if(hasUser) {
m_userLst.setSelectedIndex(0);
}
}
catch(Exception ex) {
ex.printStackTrace();
GuiUtils.showErrorMessage(this, "Cannot load user list.");
}
}
/**
* List selection changed.
*/
public void actionPerformed(ActionEvent e) {
Object selVal = m_userLst.getSelectedItem();
try {
if(selVal != null) {
String userName = selVal.toString();
User user = m_fconfig.getUserManager().getUserByName(userName);
if (user == null) {
GuiUtils.showErrorMessage(this, userName + " : does not exist.");
refresh(m_fconfig);
}
else {
// populate UI components
m_nameTxt.setText(user.getName());
m_passwordTxt.setText("");
m_retypePasswordTxt.setText("");
m_passwordChkBox.setSelected(false);
m_directoryTxt.setText(user.getHomeDirectory());
m_enabledChkBox.setSelected(user.getEnabled());
m_writeChkBox.setSelected(user.getWritePermission());
setIdleTimeCombo(m_idleLst, user.getMaxIdleTime());
setByteRateCombo(m_uploadLst, user.getMaxUploadRate());
setByteRateCombo(m_downloadLst, user.getMaxDownloadRate());
}
}
}
catch(FtpException ex) {
GuiUtils.showErrorMessage(this, "Cannot fetch user information : " + selVal);
}
}
/**
* Save user.
*/
private void save() {
// check user name field
String userName = m_nameTxt.getText().trim();
if(userName.equals("")) {
GuiUtils.showErrorMessage(this, "Please enter an user name");
return;
}
try {
BaseUser user = new BaseUser();
user.setName(userName);
if(setPassword(user)) {
user.setHomeDirectory(new File(m_directoryTxt.getText()).getCanonicalPath());
user.setEnabled(m_enabledChkBox.isSelected());
user.setWritePermission(m_writeChkBox.isSelected());
user.setMaxIdleTime(getMaxIdleTime(m_uploadLst));
user.setMaxUploadRate(getBytesTransferRate(m_uploadLst));
user.setMaxDownloadRate(getBytesTransferRate(m_downloadLst));
m_fconfig.getUserManager().save(user);
refresh(m_fconfig);
GuiUtils.showInformationMessage(this, "Saved user - " + user.getName());
}
}
catch(Exception ex) {
GuiUtils.showErrorMessage(this, ex.getMessage());
}
}
/**
* Set password if necessary.
*/
private boolean setPassword(BaseUser usr) throws FtpException {
String userName = usr.getName();
boolean bNewUser = !m_fconfig.getUserManager().doesExist(userName);
boolean bPassSet = m_passwordChkBox.isSelected();
String password = new String(m_passwordTxt.getPassword());
String repassword = new String(m_retypePasswordTxt.getPassword());
boolean bAnonymous = userName.equals("anonymous");
// new user
if( bNewUser && (!bPassSet) && (!bAnonymous) ) {
GuiUtils.showErrorMessage(this, "New user - password required");
return false;
}
// password set
if( bPassSet && (!password.equals(repassword)) && (!bAnonymous) ) {
GuiUtils.showErrorMessage(this, "Password entries are not equal");
return false;
}
// set password if necessary
if(bPassSet && (!bAnonymous)) {
usr.setPassword(password);
}
else {
usr.setPassword(null);
}
return true;
}
/**
* Get max bytes/sec.
*/
private int getBytesTransferRate(JComboBox combo) {
int rate = 0;
Object selObj = combo.getSelectedItem();
if (!selObj.equals(BYTE_RATES[0])) {
try {
rate = Integer.parseInt(selObj.toString());
}
catch(NumberFormatException ex) {
GuiUtils.showErrorMessage(this, ex.getMessage());
}
}
return rate;
}
/**
* Get max idle time in sec.
*/
private int getMaxIdleTime(JComboBox combo) {
int sec = 0;
Object selObj = combo.getSelectedItem();
if (!selObj.equals(IDLE_SECONDS[0])) {
try {
sec = Integer.parseInt(selObj.toString());
}
catch(NumberFormatException ex) {
GuiUtils.showErrorMessage(this, ex.getMessage());
}
}
return sec;
}
/**
* Set byte transfer rate combo.
*/
private void setByteRateCombo(JComboBox combo, int rate) {
Object selItem = new Integer(rate);
if (rate == 0) {
selItem = BYTE_RATES[0];
}
combo.setSelectedItem(selItem);
}
/**
* Set idle time combo.
*/
private void setIdleTimeCombo(JComboBox combo, int idle) {
Object selItem = new Integer(idle);
if (idle == 0){
selItem = IDLE_SECONDS[0];
}
combo.setSelectedItem(selItem);
}
/**
* Delete user.
*/
private void delete() {
Object selVal = m_userLst.getSelectedItem();
if(selVal == null) {
return;
}
String userName = selVal.toString();
if(!GuiUtils.getConfirmation(this, "Do you really want to delete user " + userName + "?")) {
return;
}
try {
m_fconfig.getUserManager().delete(userName);
refresh(m_fconfig);
GuiUtils.showInformationMessage(this, "Deleted user - " + userName);
}
catch(Exception ex) {
GuiUtils.showErrorMessage(this, "User delete error : " + userName);
}
}
/**
* Can this panel be displayed.
*/
public boolean canBeDisplayed() {
return (m_fconfig != null);
}
/**
* String representation of this panel.
*/
public String toString() {
return "Users";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -