/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: ProjectManagementTab.java
*
* Copyright (c) 2005 Sun Microsystems and Static Free Software
*
* Electric(tm) 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 3 of the License, or
* (at your option) any later version.
*
* Electric(tm) 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 Electric(tm); see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, Mass 02111-1307, USA.
*/
package com.sun.electric.tool.user.dialogs.options;
import com.sun.electric.tool.project.Project;
import com.sun.electric.tool.project.Users;
import com.sun.electric.tool.user.dialogs.EDialog;
import com.sun.electric.tool.user.dialogs.OpenFile;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
/**
* Class to handle the "Project Management" tab of the Preferences dialog.
*/
public class ProjectManagementTab extends PreferencePanel
{
private String initialRepository;
private String initialUserName;
private JList userList;
private DefaultListModel userModel;
private boolean authorized;
/** Creates new form ProjectManagement Options */
public ProjectManagementTab(Frame parent, boolean modal)
{
super(parent, modal);
initComponents();
if (Users.LOWSECURITY)
{
projectManagement.remove(usersPanelMidSecurity);
repositoryPanel.remove(midWarning);
} else
{
projectManagement.remove(usersPanelLowSecurity);
deleteButton.setEnabled(false);
addButton.setEnabled(false);
}
pack();
}
/** return the panel to use for user preferences. */
public JPanel getUserPreferencesPanel() { return projectManagement; }
/** return the name of this preferences tab. */
public String getName() { return "Project Management"; }
/**
* Method called at the start of the dialog.
* Caches current values and displays them in the Project Management tab.
*/
public void init()
{
initialRepository = Project.getRepositoryLocation();
repositoryTextArea.setText(initialRepository);
initialUserName = Project.getCurrentUserName();
if (Users.LOWSECURITY)
{
if (initialUserName.length() == 0) initialUserName = System.getProperty("user.name");
userName.setText(initialUserName);
} else
{
if (initialUserName.length() == 0) initialUserName = "NOBODY LOGGED IN";
currentUserLabel.setText("Logged-in user: " + initialUserName);
userModel = new DefaultListModel();
userList = new JList(userModel);
userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
userListPane.setViewportView(userList);
userList.clearSelection();
userModel.clear();
for(Iterator<String> it = Users.getUsers(); it.hasNext(); )
{
String user = it.next();
userModel.addElement(user);
}
userList.setSelectedIndex(0);
}
}
/**
* Method called when the "OK" panel is hit.
* Updates any changed fields in the General tab.
*/
public void term()
{
String currRepository = repositoryTextArea.getText();
if (!currRepository.equals(initialRepository))
Project.setRepositoryLocation(currRepository);
if (Users.LOWSECURITY)
{
String uName = userName.getText();
if (!uName.equals(initialUserName))
Project.setCurrentUserName(uName);
}
}
/**
* Method called when the factory reset is requested.
*/
public void reset()
{
if (!Project.getFactoryRepositoryLocation().equals(Project.getRepositoryLocation()))
Project.setRepositoryLocation(Project.getFactoryRepositoryLocation());
if (!Project.getFactoryCurrentUserName().equals(Project.getCurrentUserName()))
Project.setCurrentUserName(Project.getFactoryCurrentUserName());
}
/**
* This class displays a dialog for password-related operations.
*/
private static class PasswordDialog extends EDialog
{
private static final int NEWUSER = 1;
private static final int CHANGEPASSWORD = 2;
private static final int LOGINUSER = 3;
private static final int DELETEUSER = 4;
private static final int AUTHORIZE = 5;
private static final int RENAMEAUTHPASS = 6;
private int operation;
private String userName;
private JTextField userNameField;
private JPasswordField password, confirm, oldPassword;
private boolean didCancel;
/** Creates new form for password-related inquiries */
private PasswordDialog(int operation, String userName)
{
super(null, true);
this.operation = operation;
this.userName = userName;
initComponents();
setVisible(true);
}
public boolean cancelled() { return didCancel; }
public String getUserName() { return userNameField.getText(); }
public String getPassword() { return new String(password.getPassword()); }
protected void escapePressed() { exit(false); }
private void exit(boolean goodButton)
{
didCancel = !goodButton;
if (goodButton)
{
switch (operation)
{
case NEWUSER:
// validate the dialog
String name = userNameField.getText().trim();
if (name.length() == 0)
{
JOptionPane.showMessageDialog(this, "You must type a user name", "Blank User Name", JOptionPane.ERROR_MESSAGE);
userNameField.selectAll();
return;
}
if (Users.isExistingUser(name))
{
JOptionPane.showMessageDialog(this, "User " + name + " already exists. Choose another name",
"User Name Exists", JOptionPane.ERROR_MESSAGE);
userNameField.selectAll();
return;
}
String pass = new String(password.getPassword());
String conf = new String(confirm.getPassword());
if (!pass.equals(conf))
{
JOptionPane.showMessageDialog(this, "Confirmed password does not match original password",
"Confirmation Error", JOptionPane.ERROR_MESSAGE);
confirm.selectAll();
return;
}
break;
case CHANGEPASSWORD:
// validate the dialog
String givenPassword = new String(oldPassword.getPassword()).trim();
String encryptedPassword = Users.getEncryptedPassword(userName);
String encryptedGivenPassword = Users.encryptPassword(givenPassword);
if (!encryptedGivenPassword.equals(encryptedPassword))
{
JOptionPane.showMessageDialog(this, "Incorrect password given for user " + userName,
"Invalid Password", JOptionPane.ERROR_MESSAGE);
oldPassword.selectAll();
return;
}
pass = new String(password.getPassword());
conf = new String(confirm.getPassword());
if (!pass.equals(conf))
{
JOptionPane.showMessageDialog(this, "Confirmed password does not match new password",
"Confirmation Error", JOptionPane.ERROR_MESSAGE);
confirm.selectAll();
return;
}
break;
case LOGINUSER:
// validate the dialog
givenPassword = new String(password.getPassword()).trim();
encryptedPassword = Users.getEncryptedPassword(userName);
encryptedGivenPassword = Users.encryptPassword(givenPassword);
if (!encryptedGivenPassword.equals(encryptedPassword))
{
JOptionPane.showMessageDialog(this, "Incorrect password given for user " + userName,
"Invalid Password", JOptionPane.ERROR_MESSAGE);
password.selectAll();
return;
}
break;
case AUTHORIZE:
// validate the dialog
givenPassword = new String(password.getPassword()).trim();
encryptedPassword = Project.getAuthorizationPassword();
if (!givenPassword.equals(encryptedPassword))
{
JOptionPane.showMessageDialog(this, "Incorrect administrator password",
"Invalid Password", JOptionPane.ERROR_MESSAGE);
password.selectAll();
return;
}
break;
case RENAMEAUTHPASS:
// validate the dialog
givenPassword = new String(oldPassword.getPassword()).trim();
encryptedPassword = Project.getAuthorizationPassword();
if (!givenPassword.equals(encryptedPassword))
{
JOptionPane.showMessageDialog(this, "Incorrect administrator password",
"Invalid Password", JOptionPane.ERROR_MESSAGE);
oldPassword.selectAll();
return;
}
pass = new String(password.getPassword());
conf = new String(confirm.getPassword());
if (!pass.equals(conf))
{
JOptionPane.showMessageDialog(this, "Confirmed password does not match new password",
"Confirmation Error", JOptionPane.ERROR_MESSAGE);
confirm.selectAll();
return;
}
break;
}
}
setVisible(false);
dispose();
}
private void initComponents()
{
getContentPane().setLayout(new GridBagLayout());
setName("");
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt) { exit(false); }
});
switch (operation)
{
case NEWUSER:
setTitle("Create New User");
JLabel lab1 = new JLabel("User name:");
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab1, gbc);
userNameField = new JTextField("");
userNameField.setColumns(20);
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(userNameField, gbc);
JLabel lab2 = new JLabel("Password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab2, gbc);
password = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(password, gbc);
JLabel lab3 = new JLabel("Confirm password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 2;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab3, gbc);
confirm = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 2;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(confirm, gbc);
break;
case CHANGEPASSWORD:
setTitle("Change Password");
lab1 = new JLabel("Old Password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab1, gbc);
oldPassword = new JPasswordField("");
oldPassword.setColumns(20);
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(oldPassword, gbc);
lab2 = new JLabel("New Password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab2, gbc);
password = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(password, gbc);
lab3 = new JLabel("Confirm new password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 2;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab3, gbc);
confirm = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 2;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(confirm, gbc);
break;
case LOGINUSER:
setTitle("Login");
lab1 = new JLabel("User name:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab1, gbc);
lab2 = new JLabel(userName);
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(lab2, gbc);
lab3 = new JLabel("Password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab3, gbc);
password = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(password, gbc);
break;
case DELETEUSER:
setTitle("Delete User");
lab1 = new JLabel("Click OK to delete user: \"" + userName + "\"");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab1, gbc);
break;
case AUTHORIZE:
setTitle("Authorize");
lab3 = new JLabel("Administrator password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab3, gbc);
password = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(password, gbc);
break;
case RENAMEAUTHPASS:
setTitle("Change Authorization Password");
lab1 = new JLabel("Old Authorization Password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab1, gbc);
oldPassword = new JPasswordField("");
oldPassword.setColumns(20);
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 0;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(oldPassword, gbc);
lab2 = new JLabel("New Authorization Password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab2, gbc);
password = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(password, gbc);
lab3 = new JLabel("Confirm new password:");
gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 2;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(lab3, gbc);
confirm = new JPasswordField("");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 2;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.insets = new Insets(4, 4, 4, 4);
getContentPane().add(confirm, gbc);
break;
}
// control buttons
JButton cancel = new JButton("Cancel");
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 3;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(cancel, gbc);
cancel.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) { exit(false); }
});
JButton ok = new JButton("OK");
gbc = new GridBagConstraints();
gbc.gridx = 1; gbc.gridy = 3;
gbc.insets = new java.awt.Insets(4, 4, 4, 4);
getContentPane().add(ok, gbc);
ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) { exit(true); }
});
getRootPane().setDefaultButton(ok);
pack();
}
}
private void reloadUsers()
{
userModel.clear();
for(Iterator<String> it = Users.getUsers(); it.hasNext(); )
{
String userName = it.next();
userModel.addElement(userName);
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents()
{
java.awt.GridBagConstraints gridBagConstraints;
projectManagement = new javax.swing.JPanel();
repositoryPanel = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
browseButton = new javax.swing.JButton();
repositoryTextArea = new javax.swing.JTextArea();
midWarning = new javax.swing.JLabel();
usersPanelMidSecurity = new javax.swing.JPanel();
currentUserLabel = new javax.swing.JLabel();
userListPane = new javax.swing.JScrollPane();
jLabel5 = new javax.swing.JLabel();
jPanel1 = new javax.swing.JPanel();
deleteButton = new javax.swing.JButton();
addButton = new javax.swing.JButton();
authorizeButton = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
loginButton = new javax.swing.JButton();
passwordButton = new javax.swing.JButton();
usersPanelLowSecurity = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
userName = new javax.swing.JTextField();
getContentPane().setLayout(new java.awt.GridBagLayout());
setTitle("Project Management");
setName("");
addWindowListener(new java.awt.event.WindowAdapter()
{
public void windowClosing(java.awt.event.WindowEvent evt)
{
closeDialog(evt);
}
});
projectManagement.setLayout(new java.awt.GridBagLayout());
repositoryPanel.setLayout(new java.awt.GridBagLayout());
repositoryPanel.setBorder(new javax.swing.border.TitledBorder("Repository"));
jLabel1.setText("The repository contains the latest version of your circuit,");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 1, 4);
repositoryPanel.add(jLabel1, gridBagConstraints);
jLabel4.setText("Currently:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
repositoryPanel.add(jLabel4, gridBagConstraints);
jLabel6.setText("a history of changes to each cell, and the user database.");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 1, 4);
repositoryPanel.add(jLabel6, gridBagConstraints);
jLabel7.setText("It must be a directory that everyone can access (on a network).");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 4, 4);
repositoryPanel.add(jLabel7, gridBagConstraints);
browseButton.setText("Browse");
browseButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
browseButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
repositoryPanel.add(browseButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridheight = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
repositoryPanel.add(repositoryTextArea, gridBagConstraints);
midWarning.setText("When changing the repository location, restart the dialog to see users.");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
repositoryPanel.add(midWarning, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.25;
projectManagement.add(repositoryPanel, gridBagConstraints);
usersPanelMidSecurity.setLayout(new java.awt.GridBagLayout());
currentUserLabel.setText("Logged-in user:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelMidSecurity.add(currentUserLabel, gridBagConstraints);
userListPane.setPreferredSize(new java.awt.Dimension(100, 150));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridheight = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelMidSecurity.add(userListPane, gridBagConstraints);
jLabel5.setText("Users:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelMidSecurity.add(jLabel5, gridBagConstraints);
jPanel1.setLayout(new java.awt.GridBagLayout());
jPanel1.setBorder(new javax.swing.border.TitledBorder("Administration"));
deleteButton.setText("Delete User");
deleteButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
deleteButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
jPanel1.add(deleteButton, gridBagConstraints);
addButton.setText("Add User...");
addButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
addButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
jPanel1.add(addButton, gridBagConstraints);
authorizeButton.setText("Authorize...");
authorizeButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
authorizeButtonActionPerformed(evt);
}
});
jPanel1.add(authorizeButton, new java.awt.GridBagConstraints());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
usersPanelMidSecurity.add(jPanel1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelMidSecurity.add(jSeparator1, gridBagConstraints);
loginButton.setText("Login");
loginButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
loginButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelMidSecurity.add(loginButton, gridBagConstraints);
passwordButton.setText("Change Password");
passwordButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
passwordButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelMidSecurity.add(passwordButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.75;
projectManagement.add(usersPanelMidSecurity, gridBagConstraints);
usersPanelLowSecurity.setLayout(new java.awt.GridBagLayout());
jLabel3.setText("User Name:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelLowSecurity.add(jLabel3, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
usersPanelLowSecurity.add(userName, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
projectManagement.add(usersPanelLowSecurity, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
getContentPane().add(projectManagement, gridBagConstraints);
pack();
}
// </editor-fold>//GEN-END:initComponents
private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_deleteButtonActionPerformed
{//GEN-HEADEREND:event_deleteButtonActionPerformed
if (!authorized)
{
JOptionPane.showMessageDialog(this, "You must be authorized to delete users. Click the 'Authorize' button.", "Not Authorized", JOptionPane.ERROR_MESSAGE);
return;
}
int index = userList.getSelectedIndex();
if (index < 0)
{
JOptionPane.showMessageDialog(this, "Select a user before clicking 'delete'", "Nothing Selected", JOptionPane.ERROR_MESSAGE);
return;
}
String user = (String)userModel.getElementAt(index);
// get password
PasswordDialog pwd = new PasswordDialog(PasswordDialog.DELETEUSER, user);
if (pwd.cancelled()) return;
// delete the user and redisplay
Users.deleteUser(user);
reloadUsers();
}//GEN-LAST:event_deleteButtonActionPerformed
private void authorizeButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_authorizeButtonActionPerformed
{//GEN-HEADEREND:event_authorizeButtonActionPerformed
if (authorized)
{
// already authorized, change auth password
PasswordDialog pwd = new PasswordDialog(PasswordDialog.RENAMEAUTHPASS, null);
if (pwd.cancelled()) return;
// make the change
String pass = pwd.getPassword();
Project.setAuthorizationPassword(pass);
} else
{
// not authorized: do it
PasswordDialog pwd = new PasswordDialog(PasswordDialog.AUTHORIZE, null);
if (pwd.cancelled()) return;
// allow authorized actions
authorized = true;
// change button names
deleteButton.setEnabled(true);
addButton.setEnabled(true);
authorizeButton.setText("Change Authorization...");
}
}//GEN-LAST:event_authorizeButtonActionPerformed
private void browseButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_browseButtonActionPerformed
{//GEN-HEADEREND:event_browseButtonActionPerformed
String fileName = OpenFile.chooseDirectory(null);
if (fileName == null) return;
repositoryTextArea.setText(fileName);
}//GEN-LAST:event_browseButtonActionPerformed
private void addButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addButtonActionPerformed
{//GEN-HEADEREND:event_addButtonActionPerformed
if (!authorized)
{
JOptionPane.showMessageDialog(this, "You must be authorized to add users. Click the 'Authorize' button.", "Not Authorized", JOptionPane.ERROR_MESSAGE);
return;
}
// prompt for name and password
PasswordDialog pwd = new PasswordDialog(PasswordDialog.NEWUSER, null);
if (pwd.cancelled()) return;
// create the user and redisplay
String userName = pwd.getUserName();
String encryptedPassword = Users.encryptPassword(pwd.getPassword());
Users.addUser(userName, encryptedPassword);
reloadUsers();
}//GEN-LAST:event_addButtonActionPerformed
private void passwordButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_passwordButtonActionPerformed
{//GEN-HEADEREND:event_passwordButtonActionPerformed
// find out the user to delete
int index = userList.getSelectedIndex();
if (index < 0)
{
JOptionPane.showMessageDialog(this, "Select a user before changing their password", "Nothing Selected", JOptionPane.ERROR_MESSAGE);
return;
}
String userName = (String)userModel.getElementAt(index);
// prompt to change password (includes validation)
PasswordDialog pwd = new PasswordDialog(PasswordDialog.CHANGEPASSWORD, userName);
if (pwd.cancelled()) return;
// make the change
String encryptedPassword = Users.encryptPassword(pwd.getPassword());
Users.changeEncryptedPassword(userName, encryptedPassword);
}//GEN-LAST:event_passwordButtonActionPerformed
private void loginButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_loginButtonActionPerformed
{//GEN-HEADEREND:event_loginButtonActionPerformed
// find out the user to login
int index = userList.getSelectedIndex();
if (index < 0)
{
JOptionPane.showMessageDialog(this, "Select a user before clicking 'login'", "Nothing Selected", JOptionPane.ERROR_MESSAGE);
return;
}
String userName = (String)userModel.getElementAt(index);
// get the password and validate it
PasswordDialog pwd = new PasswordDialog(PasswordDialog.LOGINUSER, userName);
if (pwd.cancelled()) return;
// save this user as the one logged-in
Project.setCurrentUserName(userName);
currentUserLabel.setText("Logged-in user: " + userName);
}//GEN-LAST:event_loginButtonActionPerformed
/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt)//GEN-FIRST:event_closeDialog
{
setVisible(false);
dispose();
}//GEN-LAST:event_closeDialog
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton addButton;
private javax.swing.JButton authorizeButton;
private javax.swing.JButton browseButton;
private javax.swing.JLabel currentUserLabel;
private javax.swing.JButton deleteButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JButton loginButton;
private javax.swing.JLabel midWarning;
private javax.swing.JButton passwordButton;
private javax.swing.JPanel projectManagement;
private javax.swing.JPanel repositoryPanel;
private javax.swing.JTextArea repositoryTextArea;
private javax.swing.JScrollPane userListPane;
private javax.swing.JTextField userName;
private javax.swing.JPanel usersPanelLowSecurity;
private javax.swing.JPanel usersPanelMidSecurity;
// End of variables declaration//GEN-END:variables
}