/* Copyright 2004-2014 Jim Voris
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.qumasoft.guitools.admin;
import com.qumasoft.qvcslib.AbstractProjectProperties;
import com.qumasoft.qvcslib.requestdata.ClientRequestChangePasswordData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerAddUserData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerAssignUserRolesData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerCreateProjectData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerDeleteProjectData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerGetRoleNamesData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerListProjectUsersData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerListProjectsData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerListUserRolesData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerListUsersData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerMaintainProjectData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerRemoveUserData;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerShutdownData;
import com.qumasoft.qvcslib.ExitAppInterface;
import com.qumasoft.qvcslib.PasswordChangeListenerInterface;
import com.qumasoft.qvcslib.QVCSConstants;
import com.qumasoft.qvcslib.ServerManager;
import com.qumasoft.qvcslib.ServerProperties;
import com.qumasoft.qvcslib.response.ServerResponseInterface;
import com.qumasoft.qvcslib.response.ServerResponseMessage;
import com.qumasoft.qvcslib.TransportProxyFactory;
import com.qumasoft.qvcslib.TransportProxyInterface;
import com.qumasoft.qvcslib.TransportProxyListenerInterface;
import com.qumasoft.qvcslib.TransportProxyType;
import com.qumasoft.qvcslib.UpdateManager;
import com.qumasoft.qvcslib.Utility;
import com.qumasoft.qvcslib.VisualCompareInterface;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
/**
* QVCS-Enterprise admin application. This is the main class for the admin Swing application that a user must use to administer a QVCS-Enterprise server.
*
* @author Jim Voris
*/
public class EnterpriseAdmin extends javax.swing.JFrame implements PasswordChangeListenerInterface, TransportProxyListenerInterface, ExitAppInterface, VisualCompareInterface {
private static final long serialVersionUID = 904068619108638580L;
// Create our logger object
private static final Logger LOGGER = Logger.getLogger("com.qumasoft.guitools.admin");
private static EnterpriseAdmin enterpriseAdminSelfRef = null;
private String qvcsHomeDirectory = null;
private String userNameMember = null;
// Create a label string we'll use to report our version.
private static final String VERSION = "3.0.9";
private final String[] argsMember;
private final ImageIcon frameIcon = new ImageIcon(ClassLoader.getSystemResource("images/qvcsadmin.png"), "Quma Software, Inc.");
private final ImageIcon usersIcon = new ImageIcon(ClassLoader.getSystemResource("images/users.png"), "Users");
private final ImageIcon userIcon = new ImageIcon(ClassLoader.getSystemResource("images/user.png"), "User");
private final ImageIcon serversIcon = new ImageIcon(ClassLoader.getSystemResource("images/servers.png"), "Servers");
private final ImageIcon serverIcon = new ImageIcon(ClassLoader.getSystemResource("images/server.png"), "Server");
private final ImageIcon projectIcon = new ImageIcon(ClassLoader.getSystemResource("images/project.png"), "Project");
private final ActionServerAddServer actionServerAddServer = new ActionServerAddServer();
private final ActionServerRemoveServer actionServerRemoveServer = new ActionServerRemoveServer();
private final ActionServerProperties actionServerProperties = new ActionServerProperties();
private final ActionServerNewProject actionServerNewProject = new ActionServerNewProject();
private final ActionServerShutdown actionServerShutdown = new ActionServerShutdown();
private final ActionServerExit actionServerExit = new ActionServerExit();
private final ActionProjectRemoveProject actionProjectRemoveProject = new ActionProjectRemoveProject();
private final ActionProjectProjectProperties actionProjectProjectProperties = new ActionProjectProjectProperties();
private final ActionUserAddUserToServer actionUserAddUserToServer = new ActionUserAddUserToServer();
private final ActionUserRemoveUserFromServer actionUserRemoveUserFromServer = new ActionUserRemoveUserFromServer();
private final ActionUserAddUserToProject actionUserAddUserToProject = new ActionUserAddUserToProject();
private final ActionUserMaintainProjectRoles actionUserMaintainProjectRoles = new ActionUserMaintainProjectRoles();
private final ActionUserChangePassword actionUserChangePassword = new ActionUserChangePassword();
private final ActionMaintainRole actionMaintainRole = new ActionMaintainRole();
// A map to contain our active transport proxies
private Map<String, TransportProxyInterface> transportProxyMapMember = null;
// A map to hold on to hashed passwords.
private Map<String, byte[]> serverPasswordMapMember = null;
// A map to hold pending passwords.
private Map<String, String> pendingPasswordMapMember = null;
// A map to hold pending login passwords
private Map<String, byte[]> pendingLoginPasswordMapMember = null;
// Our server tree model
private ServerTreeModel serverModelMember = null;
// Our user tree model
private UserTreeModel userModelMember = null;
private MaintainUserRolesDialog maintainUserRolesDialogMember = null;
private AddUserToProjectDialog addUserToProjectDialogMember = null;
private MaintainRolePrivilegesDialog maintainRolePrivilegesDialogMember = null;
/**
* Creates new form EnterpriseAdmin.
*
* @param args the command line arguments.
*/
public EnterpriseAdmin(String[] args) {
if (args.length > 0) {
this.argsMember = args;
System.setProperty("user.dir", argsMember[0]);
} else {
this.argsMember = new String[1];
this.argsMember[0] = System.getProperty("user.dir");
}
qvcsHomeDirectory = this.argsMember[0];
// Init the logging properties.
initLoggingProperties();
// Set the frame icon to the Quma standard icon.
this.setIconImage(frameIcon.getImage());
// Set this as early as we can...
enterpriseAdminSelfRef = this;
initComponents();
// Create the server model.
serverModelMember = new ServerTreeModel();
// Attach the model to the control.
serverTree.setModel(serverModelMember.getTreeModel());
// Create the user model.
userModelMember = new UserTreeModel();
// Attach the model to the control.
usersTree.setModel(userModelMember.getTreeModel());
// Create the transport proxy map.
transportProxyMapMember = Collections.synchronizedMap(new TreeMap<String, TransportProxyInterface>());
// Create the map of hashed passwords.
serverPasswordMapMember = Collections.synchronizedMap(new TreeMap<String, byte[]>());
// Create the pending password map.
pendingPasswordMapMember = Collections.synchronizedMap(new TreeMap<String, String>());
// Create the map of pending login passwords.
pendingLoginPasswordMapMember = Collections.synchronizedMap(new TreeMap<String, byte[]>());
maintainUserRolesDialogMember = new MaintainUserRolesDialog(this, true);
addUserToProjectDialogMember = new AddUserToProjectDialog(this, true);
maintainRolePrivilegesDialogMember = new MaintainRolePrivilegesDialog(this, true);
// Register listeners to the server manager so the dialogs will get
// the role information.
ServerManager.getServerManager().addChangeListener(maintainUserRolesDialogMember);
ServerManager.getServerManager().addChangeListener(addUserToProjectDialogMember);
ServerManager.getServerManager().addChangeListener(maintainRolePrivilegesDialogMember);
// Make us a listener for password change responses
TransportProxyFactory.getInstance().addChangedPasswordListener(this);
pack();
// Size the frame to a useful size.
sizeMainWindow();
center();
initServerMenu();
initProjectMenu();
initUserMenu();
initRoleMenu();
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Report the version to the log file.
LOGGER.log(Level.INFO, "QVCS-Enterprise admin tool version: '" + VERSION + "'.");
}
/**
* Get the singleton instance of the admin application.
* @return the singleton instance of the admin application.
*/
public static EnterpriseAdmin getInstance() {
return enterpriseAdminSelfRef;
}
private void initServerMenu() {
// So we enabled/disable the appropriate menu items.
frameServersMenu.addMenuListener(new OurServerMenuListener());
}
private void initProjectMenu() {
// So we enabled/disable the appropriate menu items.
frameProjectsMenu.addMenuListener(new OurProjectMenuListener());
}
private void initUserMenu() {
// So we enabled/disable the appropriate menu items.
frameUsersMenu.addMenuListener(new OurUserMenuListener());
}
private void initRoleMenu() {
// So we enabled/disable the appropriate menu items.
frameRolesMenu.addMenuListener(new OurRoleMenuListener());
}
private void initLoggingProperties() {
try {
String logConfigFile = qvcsHomeDirectory + File.separator + "adminLogging.properties";
System.setProperty("java.util.logging.config.file", logConfigFile);
LogManager.getLogManager().readConfiguration();
} catch (IOException | SecurityException e) {
LOGGER.log(Level.SEVERE, "Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage());
System.out.println("Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage());
}
}
/**
* 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() {
serverInstancePopupMenu = new javax.swing.JPopupMenu();
defineNewProjectMenuItem = new javax.swing.JMenuItem();
serverPropertiesMenuItem = new javax.swing.JMenuItem();
maintainServerRolesMenuItem = new javax.swing.JMenuItem();
removeServerMenuItem = new javax.swing.JMenuItem();
bottomSeparator = new javax.swing.JSeparator();
serverPopupShutdownMenuItem = new javax.swing.JMenuItem();
serverPopupMenu = new javax.swing.JPopupMenu();
addServerMenuItem = new javax.swing.JMenuItem();
userServerPopupMenu = new javax.swing.JPopupMenu();
changeUserPasswordMenuItem = new javax.swing.JMenuItem();
deleteUserMenuItem = new javax.swing.JMenuItem();
userProjectPopupMenu = new javax.swing.JPopupMenu();
maintainRolesMenuItem = new javax.swing.JMenuItem();
usersServerPopupMenu = new javax.swing.JPopupMenu();
addServerUserMenuItem = new javax.swing.JMenuItem();
usersProjectPopupMenu = new javax.swing.JPopupMenu();
addProjectsUserMenuItem = new javax.swing.JMenuItem();
projectInstancePopupMenu = new javax.swing.JPopupMenu();
removeProjectMenuItem = new javax.swing.JMenuItem();
projectPropertiesMenuItem = new javax.swing.JMenuItem();
splitPane = new javax.swing.JSplitPane();
leftParentPanel = new javax.swing.JPanel();
leftScrollPane = new javax.swing.JScrollPane();
leftChildPanel = new javax.swing.JPanel();
serverTree = new javax.swing.JTree();
serverLabel = new javax.swing.JLabel();
rightParentPanel = new javax.swing.JPanel();
usersLabel = new javax.swing.JLabel();
rightScrollPane = new javax.swing.JScrollPane();
rightChildPanel = new javax.swing.JPanel();
usersTree = new javax.swing.JTree();
frameMenuBar = new javax.swing.JMenuBar();
frameServersMenu = new javax.swing.JMenu();
frameProjectsMenu = new javax.swing.JMenu();
frameUsersMenu = new javax.swing.JMenu();
frameRolesMenu = new javax.swing.JMenu();
defineNewProjectMenuItem.setText("New Project...");
defineNewProjectMenuItem.setToolTipText("Define new project for this server");
defineNewProjectMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
defineNewProjectMenuItemActionPerformed(evt);
}
});
serverInstancePopupMenu.add(defineNewProjectMenuItem);
serverPropertiesMenuItem.setText("Properties...");
serverPropertiesMenuItem.setToolTipText("Edit this servers properties");
serverPropertiesMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
serverPropertiesMenuItemActionPerformed(evt);
}
});
serverInstancePopupMenu.add(serverPropertiesMenuItem);
maintainServerRolesMenuItem.setText("Maintain Server Roles...");
maintainServerRolesMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
maintainServerRolesMenuItemActionPerformed(evt);
}
});
serverInstancePopupMenu.add(maintainServerRolesMenuItem);
removeServerMenuItem.setText("Remove server definition...");
removeServerMenuItem.setToolTipText("Remove the definition of this server");
removeServerMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeServerMenuItemActionPerformed(evt);
}
});
serverInstancePopupMenu.add(removeServerMenuItem);
serverInstancePopupMenu.add(bottomSeparator);
serverPopupShutdownMenuItem.setText("Shutdown server...");
serverPopupShutdownMenuItem.setToolTipText("Shutdown this server");
serverPopupShutdownMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
serverPopupShutdownMenuItemActionPerformed(evt);
}
});
serverInstancePopupMenu.add(serverPopupShutdownMenuItem);
addServerMenuItem.setText("Add server definition...");
addServerMenuItem.setToolTipText("Define a new server");
addServerMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addServerMenuItemActionPerformed(evt);
}
});
serverPopupMenu.add(addServerMenuItem);
changeUserPasswordMenuItem.setMnemonic('C');
changeUserPasswordMenuItem.setText("Change password...");
changeUserPasswordMenuItem.setToolTipText("Change this user's password");
changeUserPasswordMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
changeUserPasswordMenuItemActionPerformed(evt);
}
});
userServerPopupMenu.add(changeUserPasswordMenuItem);
deleteUserMenuItem.setMnemonic('D');
deleteUserMenuItem.setText("Delete User...");
deleteUserMenuItem.setToolTipText("Delete this user from the server");
deleteUserMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteUserMenuItemActionPerformed(evt);
}
});
userServerPopupMenu.add(deleteUserMenuItem);
maintainRolesMenuItem.setMnemonic('M');
maintainRolesMenuItem.setText("Maintain roles...");
maintainRolesMenuItem.setToolTipText("Maintain roles for this user for this project");
maintainRolesMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
maintainRolesMenuItemActionPerformed(evt);
}
});
userProjectPopupMenu.add(maintainRolesMenuItem);
addServerUserMenuItem.setMnemonic('A');
addServerUserMenuItem.setText("Add User...");
addServerUserMenuItem.setToolTipText("Add a user to this server");
addServerUserMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addServerUserMenuItemActionPerformed(evt);
}
});
usersServerPopupMenu.add(addServerUserMenuItem);
addProjectsUserMenuItem.setMnemonic('A');
addProjectsUserMenuItem.setText("Add User...");
addProjectsUserMenuItem.setToolTipText("Add a user to this project");
addProjectsUserMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addProjectsUserMenuItemActionPerformed(evt);
}
});
usersProjectPopupMenu.add(addProjectsUserMenuItem);
removeProjectMenuItem.setMnemonic('R');
removeProjectMenuItem.setText("Remove Project...");
removeProjectMenuItem.setToolTipText("Remove this project from the server");
removeProjectMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeProjectMenuItemActionPerformed(evt);
}
});
projectInstancePopupMenu.add(removeProjectMenuItem);
projectPropertiesMenuItem.setMnemonic('P');
projectPropertiesMenuItem.setText("Project Properties...");
projectPropertiesMenuItem.setToolTipText("Change project properties");
projectPropertiesMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
projectPropertiesMenuItemActionPerformed(evt);
}
});
projectInstancePopupMenu.add(projectPropertiesMenuItem);
setTitle("QVCS-Enterprise Admin Tool");
setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
setName("title\tQVCS-Enterprise Admin Tool"); // NOI18N
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
leftParentPanel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
leftParentPanel.setLayout(new java.awt.BorderLayout());
leftScrollPane.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
leftChildPanel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
leftChildPanel.setLayout(new java.awt.BorderLayout());
serverTree.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
AdminServerTreeCellRenderer renderer = new AdminServerTreeCellRenderer(serversIcon, serverIcon, projectIcon);
renderer.setLeafIcon(renderer.getClosedIcon());
serverTree.setCellRenderer(renderer);
serverTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
serverTreeValueChanged(evt);
}
});
serverTree.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
serverTreeMouseReleased(evt);
}
});
leftChildPanel.add(serverTree, java.awt.BorderLayout.CENTER);
leftScrollPane.setViewportView(leftChildPanel);
leftParentPanel.add(leftScrollPane, java.awt.BorderLayout.CENTER);
serverLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
serverLabel.setText("Servers:");
serverLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
leftParentPanel.add(serverLabel, java.awt.BorderLayout.NORTH);
splitPane.setLeftComponent(leftParentPanel);
rightParentPanel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
rightParentPanel.setLayout(new java.awt.BorderLayout());
usersLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
usersLabel.setText("Users:");
rightParentPanel.add(usersLabel, java.awt.BorderLayout.NORTH);
rightScrollPane.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
rightChildPanel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
rightChildPanel.setLayout(new java.awt.BorderLayout());
usersTree.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
AdminUserTreeCellRenderer userRenderer = new AdminUserTreeCellRenderer(usersIcon, userIcon);
renderer.setLeafIcon(renderer.getClosedIcon());
usersTree.setCellRenderer(userRenderer);
usersTree.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
usersTreeMouseReleased(evt);
}
});
rightChildPanel.add(usersTree, java.awt.BorderLayout.CENTER);
rightScrollPane.setViewportView(rightChildPanel);
rightParentPanel.add(rightScrollPane, java.awt.BorderLayout.CENTER);
splitPane.setRightComponent(rightParentPanel);
getContentPane().add(splitPane, java.awt.BorderLayout.CENTER);
frameMenuBar.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
frameServersMenu.setMnemonic('S');
frameServersMenu.setText("Servers");
frameServersMenu.setComponentPopupMenu(userProjectPopupMenu);
frameServersMenu.setFocusable(false);
frameServersMenu.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
frameMenuBar.add(frameServersMenu);
frameProjectsMenu.setMnemonic('P');
frameProjectsMenu.setText("Projects");
frameProjectsMenu.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
frameMenuBar.add(frameProjectsMenu);
frameUsersMenu.setMnemonic('U');
frameUsersMenu.setText("Users");
frameUsersMenu.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
frameMenuBar.add(frameUsersMenu);
frameRolesMenu.setMnemonic('R');
frameRolesMenu.setText("Roles");
frameRolesMenu.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
frameMenuBar.add(frameRolesMenu);
setJMenuBar(frameMenuBar);
pack();
}// </editor-fold>//GEN-END:initComponents
private void maintainServerRolesMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_maintainServerRolesMenuItemActionPerformed
{//GEN-HEADEREND:event_maintainServerRolesMenuItemActionPerformed
maintainRoles();
}//GEN-LAST:event_maintainServerRolesMenuItemActionPerformed
private void projectPropertiesMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_projectPropertiesMenuItemActionPerformed
{//GEN-HEADEREND:event_projectPropertiesMenuItemActionPerformed
// Change project properties
TreeNode node = (TreeNode) serverTree.getSelectionPath().getLastPathComponent();
if (node instanceof ProjectTreeNode) {
ProjectTreeNode projectTreeNode = (ProjectTreeNode) node;
String serverName = projectTreeNode.getServerName();
String projectName = projectTreeNode.getProjectName();
AbstractProjectProperties projectProperties = projectTreeNode.getProjectProperties();
// Lookup the transport proxy for this server.
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// We can change the project properties if we have a connection to the server.
if (transportProxy != null) {
MaintainProjectPropertiesDialog maintainProjectPropertiesDialog = new MaintainProjectPropertiesDialog(this, true, projectName, projectProperties);
maintainProjectPropertiesDialog.setVisible(true);
if (maintainProjectPropertiesDialog.getIsOK()) {
ClientRequestServerMaintainProjectData maintainProjectRequest = new ClientRequestServerMaintainProjectData();
maintainProjectRequest.setProjectName(projectName);
maintainProjectRequest.setUserName(transportProxy.getUsername());
maintainProjectRequest.setServerName(serverName);
maintainProjectRequest.setPassword(serverPasswordMapMember.get(serverName));
maintainProjectRequest.setCreateReferenceCopyFlag(maintainProjectPropertiesDialog.getCreateReferenceCopiesFlag());
maintainProjectRequest.setCreateOrDeleteCurrentReferenceFilesFlag(maintainProjectPropertiesDialog.getCreateOrDeleteCurrentReferenceFilesFlag());
maintainProjectRequest.setIgnoreCaseFlag(maintainProjectPropertiesDialog.getIgnoreCaseFlag());
maintainProjectRequest.setDefineAlternateReferenceLocationFlag(maintainProjectPropertiesDialog.getDefineAlternateReferenceLocationFlag());
maintainProjectRequest.setAlternateReferenceLocation(maintainProjectPropertiesDialog.getAlternateReferenceLocation());
synchronized (transportProxy) {
transportProxy.write(maintainProjectRequest);
}
}
}
}
}//GEN-LAST:event_projectPropertiesMenuItemActionPerformed
private void addProjectsUserMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addProjectsUserMenuItemActionPerformed
{//GEN-HEADEREND:event_addProjectsUserMenuItemActionPerformed
// Add a user to a project. In order to add a user to a project, that
// user must already have been defined for the server.
// Get the name of the active server and project.
DefaultProjectUserTreeNode root = (DefaultProjectUserTreeNode) usersTree.getModel().getRoot();
String serverName = root.getServerName();
String projectName = root.getProjectName();
// Request the user roles from the server.
ClientRequestServerListUserRolesData requestData = new ClientRequestServerListUserRolesData();
requestData.setUserName("guest");
requestData.setServerName(serverName);
requestData.setProjectName(projectName);
requestData.setViewName(QVCSConstants.QVCS_TRUNK_VIEW);
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
synchronized (transportProxy) {
transportProxy.write(requestData);
}
// Display the dialog.
addUserToProjectDialogMember.centerDialog();
addUserToProjectDialogMember.setVisible(true);
if (addUserToProjectDialogMember.getIsOK()) {
ClientRequestServerAssignUserRolesData clientRequestServerAssignUserRolesData = new ClientRequestServerAssignUserRolesData();
clientRequestServerAssignUserRolesData.setServerName(serverName);
clientRequestServerAssignUserRolesData.setProjectName(projectName);
clientRequestServerAssignUserRolesData.setViewName(QVCSConstants.QVCS_TRUNK_VIEW);
clientRequestServerAssignUserRolesData.setUserName(addUserToProjectDialogMember.getUserName());
clientRequestServerAssignUserRolesData.setAssignedRoles(addUserToProjectDialogMember.getAssignedRoles());
synchronized (transportProxy) {
transportProxy.write(clientRequestServerAssignUserRolesData);
}
}
}//GEN-LAST:event_addProjectsUserMenuItemActionPerformed
private void removeProjectMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_removeProjectMenuItemActionPerformed
{//GEN-HEADEREND:event_removeProjectMenuItemActionPerformed
// Delete a project.
DefaultProjectUserTreeNode root = (DefaultProjectUserTreeNode) usersTree.getModel().getRoot();
String serverName = root.getServerName();
String projectName = root.getProjectName();
String projectMessage = "Delete project '" + projectName + "' ?";
int choice = JOptionPane.showConfirmDialog(this, projectMessage, "Delete Project", JOptionPane.YES_NO_OPTION);
if (choice == JOptionPane.YES_OPTION) {
// Lookup the transport proxy for this server.
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// We can only create a new project if we have a connection to the server
if (transportProxy != null) {
ClientRequestServerDeleteProjectData deleteProjectRequest = new ClientRequestServerDeleteProjectData();
deleteProjectRequest.setDeleteProjectName(projectName);
deleteProjectRequest.setUserName(transportProxy.getUsername());
deleteProjectRequest.setServerName(serverName);
deleteProjectRequest.setPassword(serverPasswordMapMember.get(serverName));
synchronized (transportProxy) {
transportProxy.write(deleteProjectRequest);
}
}
}
}//GEN-LAST:event_removeProjectMenuItemActionPerformed
private void addServerUserMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addServerUserMenuItemActionPerformed
{//GEN-HEADEREND:event_addServerUserMenuItemActionPerformed
// Add a user to the currently selected server.
// Get the name of the active server.
DefaultUserTreeNode root = (DefaultUserTreeNode) usersTree.getModel().getRoot();
String serverName = root.getServerName();
AddServerUserDialog addUserToServerDialog = new AddServerUserDialog(this, true);
addUserToServerDialog.setVisible(true);
String password = addUserToServerDialog.getPassword();
if (password != null) {
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// Request the addition of the user to the server.
ClientRequestServerAddUserData requestData = new ClientRequestServerAddUserData();
requestData.setServerName(serverName);
requestData.setUserName(addUserToServerDialog.getUserName());
byte[] hashedPassword = Utility.getInstance().hashPassword(addUserToServerDialog.getPassword());
requestData.setPassword(hashedPassword);
synchronized (transportProxy) {
transportProxy.write(requestData);
}
}
}//GEN-LAST:event_addServerUserMenuItemActionPerformed
private void serverTreeValueChanged(javax.swing.event.TreeSelectionEvent evt)//GEN-FIRST:event_serverTreeValueChanged
{//GEN-HEADEREND:event_serverTreeValueChanged
TreePath treePath = evt.getNewLeadSelectionPath();
if (treePath == null) {
getUserModel().updateRootNameForServer("");
} else {
TreeNode node = (TreeNode) treePath.getLastPathComponent();
if (node instanceof DefaultServerTreeNode) {
getUserModel().updateRootNameForServer("");
} else if (node instanceof ServerTreeNode) {
ServerTreeNode serverTreeNode = (ServerTreeNode) node;
ServerProperties serverProperties = serverTreeNode.getServerProperties();
String serverName = serverProperties.getServerName();
if (null == transportProxyMapMember.get(serverName)) {
// We need to login to this server.
showLoginToServerDialog();
} else {
requestProjectsAndUsersFromServer(serverName);
}
} else if (node instanceof ProjectTreeNode) {
ProjectTreeNode projectNode = (ProjectTreeNode) node;
ServerTreeNode serverTreeNode = (ServerTreeNode) projectNode.getParent();
ServerProperties serverProperties = serverTreeNode.getServerProperties();
String serverName = serverProperties.getServerName();
getUserModel().updateRootNameForProject(serverName, projectNode.toString());
requestProjectUsersFromServer(serverName, projectNode.toString());
}
}
}//GEN-LAST:event_serverTreeValueChanged
private void maintainRolesMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_maintainRolesMenuItemActionPerformed
{//GEN-HEADEREND:event_maintainRolesMenuItemActionPerformed
// Maintain a user's roles for the selected project. This method gets called
// from the context menu when an individual user node is selected on the
// list of users associated with a specific project.
// Send the request to the server to get the roles for this user.
// Figure out the user name.
UserTreeNode userNode = (UserTreeNode) usersTree.getSelectionPath().getLastPathComponent();
String userName = userNode.toString();
// Get the name of the active server and project.
DefaultProjectUserTreeNode root = (DefaultProjectUserTreeNode) usersTree.getModel().getRoot();
String serverName = root.getServerName();
String projectName = root.getProjectName();
// Request the user roles from the server.
ClientRequestServerListUserRolesData requestData = new ClientRequestServerListUserRolesData();
requestData.setUserName(userName);
requestData.setServerName(serverName);
requestData.setProjectName(projectName);
requestData.setViewName(QVCSConstants.QVCS_TRUNK_VIEW);
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
synchronized (transportProxy) {
transportProxy.write(requestData);
}
// Display the dialog.
maintainUserRolesDialogMember.centerDialog();
maintainUserRolesDialogMember.setVisible(true);
if (maintainUserRolesDialogMember.getIsOK()) {
ClientRequestServerAssignUserRolesData clientRequestServerAssignUserRolesData = new ClientRequestServerAssignUserRolesData();
clientRequestServerAssignUserRolesData.setAssignedRoles(maintainUserRolesDialogMember.getAssignedRoles());
clientRequestServerAssignUserRolesData.setUserName(userName);
clientRequestServerAssignUserRolesData.setProjectName(projectName);
clientRequestServerAssignUserRolesData.setServerName(serverName);
clientRequestServerAssignUserRolesData.setViewName(QVCSConstants.QVCS_TRUNK_VIEW);
synchronized (transportProxy) {
transportProxy.write(clientRequestServerAssignUserRolesData);
}
}
}//GEN-LAST:event_maintainRolesMenuItemActionPerformed
private void deleteUserMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_deleteUserMenuItemActionPerformed
{//GEN-HEADEREND:event_deleteUserMenuItemActionPerformed
// Delete a user from the server. This is meant to delete the selected
// user completely from the server. The user's authentication record
// will be deleted, as well as all the user's roles in ALL projects.
UserTreeNode userNode = (UserTreeNode) usersTree.getSelectionPath().getLastPathComponent();
String userName = userNode.toString();
if (userName.compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0) {
JOptionPane.showMessageDialog(this, "You cannot delete the ADMIN user!");
return;
}
// Get the name of the active server.
DefaultUserTreeNode root = (DefaultUserTreeNode) usersTree.getModel().getRoot();
String serverName = root.getServerName();
String userMessage = "Delete user '" + userName + "' from server '" + serverName + "'?";
int choice = JOptionPane.showConfirmDialog(this, userMessage, "Delete User", JOptionPane.YES_NO_OPTION);
if (choice == JOptionPane.YES_OPTION) {
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// Request the deletion of the user from the server.
ClientRequestServerRemoveUserData requestData = new ClientRequestServerRemoveUserData();
requestData.setUserName(userName);
requestData.setServerName(serverName);
synchronized (transportProxy) {
transportProxy.write(requestData);
}
}
}//GEN-LAST:event_deleteUserMenuItemActionPerformed
private void usersTreeMouseReleased(MouseEvent evt)//GEN-FIRST:event_usersTreeMouseReleased
{//GEN-HEADEREND:event_usersTreeMouseReleased
boolean adminUserFlag = false;
if (getUserName() != null) {
adminUserFlag = getUserName().compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0 ? true : false;
}
TreePath treePath = usersTree.getClosestPathForLocation(evt.getX(), evt.getY());
if (evt.isPopupTrigger() || ((evt.getButton() == MouseEvent.BUTTON3) && (0 != (evt.getModifiers() & MouseEvent.MOUSE_RELEASED)))) {
if (treePath != null) {
// Make sure the item we clicked on is selected!!
usersTree.setSelectionPath(treePath);
// Figure out which node this is.
TreeNode node = (TreeNode) treePath.getLastPathComponent();
if (node instanceof UserTreeNode) {
// We're showing a project's users, and they right clicked
// over a user node.
UserTreeNode userNode = (UserTreeNode) node;
String userName = userNode.toString();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) usersTree.getModel().getRoot();
if (root instanceof DefaultProjectUserTreeNode) {
if (userName.compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0) {
actionUserMaintainProjectRoles.setEnabled(false);
} else {
actionUserMaintainProjectRoles.setEnabled(true);
userProjectPopupMenu.show(usersTree, evt.getX(), evt.getY());
}
} else if (root instanceof DefaultUserTreeNode) {
// We're showing the server's users and they right clicked
// over a user node.
if (userName.compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0) {
actionUserRemoveUserFromServer.setEnabled(false);
deleteUserMenuItem.setEnabled(false);
} else {
actionUserRemoveUserFromServer.setEnabled(true);
deleteUserMenuItem.setEnabled(true);
}
// Only the ADMIN user is allowed to delete users...
if (adminUserFlag) {
userServerPopupMenu.show(usersTree, evt.getX(), evt.getY());
}
}
} else if (node instanceof DefaultUserTreeNode) {
// We're showing the server's users and they right clicked
// over the root user node.
// Only the ADMIN user is allowed to do this...
if (adminUserFlag) {
usersServerPopupMenu.show(usersTree, evt.getX(), evt.getY());
}
} else if (node instanceof DefaultProjectUserTreeNode) {
// We're showing a project's users, and they right clicked
// over the root user node.
usersProjectPopupMenu.show(usersTree, evt.getX(), evt.getY());
}
}
} else if (!evt.isPopupTrigger()) {
if (treePath != null) {
// Make sure the item we clicked on is selected!!
usersTree.setSelectionPath(treePath);
// Figure out which node this is.
TreeNode node = (TreeNode) treePath.getLastPathComponent();
if (node instanceof UserTreeNode) {
UserTreeNode userNode = (UserTreeNode) node;
String userName = userNode.toString();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) usersTree.getModel().getRoot();
if (root instanceof DefaultProjectUserTreeNode) {
// We're showing a project's users, and they clicked
// over a user node.
if (userName.compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0) {
actionUserMaintainProjectRoles.setEnabled(false);
} else {
actionUserMaintainProjectRoles.setEnabled(true);
}
} else if (root instanceof DefaultUserTreeNode) {
// We're showing the server's users and they clicked
// over a user node.
if (userName.compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0) {
actionUserRemoveUserFromServer.setEnabled(false);
} else {
actionUserRemoveUserFromServer.setEnabled(true);
}
}
}
}
}
}//GEN-LAST:event_usersTreeMouseReleased
private void changeUserPasswordMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_changeUserPasswordMenuItemActionPerformed
{//GEN-HEADEREND:event_changeUserPasswordMenuItemActionPerformed
// Get the name of the active server.
DefaultUserTreeNode root = (DefaultUserTreeNode) usersTree.getModel().getRoot();
String serverName = root.getServerName();
// Get the name of the currently selected user.
UserTreeNode userNode = (UserTreeNode) usersTree.getSelectionPath().getLastPathComponent();
String userName = userNode.toString();
// Display the dialog.
ChangeUserPasswordDialog changeUserPasswordDialog = new ChangeUserPasswordDialog(this, true, userName);
changeUserPasswordDialog.setVisible(true);
String password = changeUserPasswordDialog.getPassword();
if (password != null) {
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// Request the addition of the user to the server.
ClientRequestChangePasswordData requestData = new ClientRequestChangePasswordData();
requestData.setServerName(serverName);
requestData.setUserName(changeUserPasswordDialog.getUserName());
byte[] hashedPassword = Utility.getInstance().hashPassword(password);
requestData.setNewPassword(hashedPassword);
// If they are changing the ADMIN password, hang on to the new password, so
// we can update the password map here with the new password.
if (changeUserPasswordDialog.getUserName().equals(QVCSConstants.QVCS_ADMIN_USER)) {
savePendingPassword(serverName, password);
}
synchronized (transportProxy) {
transportProxy.write(requestData);
}
}
}//GEN-LAST:event_changeUserPasswordMenuItemActionPerformed
private void addServerMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addServerMenuItemActionPerformed
{//GEN-HEADEREND:event_addServerMenuItemActionPerformed
ServerPropertiesDialog serverPropertiesDialog = new ServerPropertiesDialog(this, true);
serverPropertiesDialog.setVisible(true);
saveServerProperties(serverPropertiesDialog);
}//GEN-LAST:event_addServerMenuItemActionPerformed
private void removeServerMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_removeServerMenuItemActionPerformed
{//GEN-HEADEREND:event_removeServerMenuItemActionPerformed
ServerTreeNode node = (ServerTreeNode) serverTree.getSelectionPath().getLastPathComponent();
ServerProperties serverProperties = node.getServerProperties();
int choice = JOptionPane.showConfirmDialog(this, "Remove server definition for " + serverProperties.getServerName() + "?", "Remove Server Definition", JOptionPane.YES_NO_OPTION);
if (choice == JOptionPane.YES_OPTION) {
serverProperties.removePropertiesFile();
serverModelMember.loadModel();
}
}//GEN-LAST:event_removeServerMenuItemActionPerformed
private void defineNewProjectMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_defineNewProjectMenuItemActionPerformed
{//GEN-HEADEREND:event_defineNewProjectMenuItemActionPerformed
// Create a new project...
ServerTreeNode node = (ServerTreeNode) serverTree.getSelectionPath().getLastPathComponent();
ServerProperties serverProperties = node.getServerProperties();
String serverName = serverProperties.getServerName();
DefineNewProjectDialog newProjectDialog = new DefineNewProjectDialog(this, true);
newProjectDialog.setVisible(true);
if (newProjectDialog.getIsOK()) {
// Lookup the transport proxy for this server.
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// We can only create a new project if we have a connection to the server
if (transportProxy != null) {
ClientRequestServerCreateProjectData createProjectRequest = new ClientRequestServerCreateProjectData();
createProjectRequest.setNewProjectName(newProjectDialog.getProjectName());
createProjectRequest.setUserName(transportProxy.getUsername());
createProjectRequest.setServerName(serverName);
createProjectRequest.setPassword(serverPasswordMapMember.get(serverName));
createProjectRequest.setCreateReferenceCopyFlag(newProjectDialog.getCreateReferenceCopyFlag());
createProjectRequest.setIgnoreCaseFlag(newProjectDialog.getIgnoreCaseFlag());
createProjectRequest.setDefineAlternateReferenceLocationFlag(newProjectDialog.getDefineAlternateReferenceLocationFlag());
createProjectRequest.setAlternateReferenceLocation(newProjectDialog.getAlternateReferenceLocation());
synchronized (transportProxy) {
transportProxy.write(createProjectRequest);
}
}
}
}//GEN-LAST:event_defineNewProjectMenuItemActionPerformed
private void serverPropertiesMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_serverPropertiesMenuItemActionPerformed
{//GEN-HEADEREND:event_serverPropertiesMenuItemActionPerformed
ServerTreeNode node = (ServerTreeNode) serverTree.getSelectionPath().getLastPathComponent();
ServerProperties serverProperties = node.getServerProperties();
String serverName = serverProperties.getServerName();
ServerPropertiesDialog serverPropertiesDialog = new ServerPropertiesDialog(this, true, serverName);
serverPropertiesDialog.setVisible(true);
saveServerProperties(serverPropertiesDialog);
}//GEN-LAST:event_serverPropertiesMenuItemActionPerformed
private void serverPopupShutdownMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_serverPopupShutdownMenuItemActionPerformed
{//GEN-HEADEREND:event_serverPopupShutdownMenuItemActionPerformed
ServerTreeNode serverTreeNode = (ServerTreeNode) serverTree.getSelectionPath().getLastPathComponent();
ServerProperties serverProperties = serverTreeNode.getServerProperties();
String serverName = serverProperties.getServerName();
// Lookup the transport proxy for this server.
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// We can only shut this thing down if we have a connection to the server
if (transportProxy != null) {
int choice = JOptionPane.showConfirmDialog(this, "Shutdown server " + serverName + "?", "Shutdown Server", JOptionPane.YES_NO_OPTION);
if (choice == JOptionPane.YES_OPTION) {
ClientRequestServerShutdownData shutDownRequest = new ClientRequestServerShutdownData();
shutDownRequest.setUserName(transportProxy.getUsername());
shutDownRequest.setServerName(serverName);
shutDownRequest.setPassword(serverPasswordMapMember.get(serverName));
synchronized (transportProxy) {
transportProxy.write(shutDownRequest);
}
serverPasswordMapMember.remove(serverName);
serverModelMember.logoffServer(serverName);
transportProxyMapMember.remove(serverName);
// And select the root node.
serverTree.setSelectionPath(serverTree.getPathForRow(0));
}
}
}//GEN-LAST:event_serverPopupShutdownMenuItemActionPerformed
private void serverTreeMouseReleased(java.awt.event.MouseEvent evt)//GEN-FIRST:event_serverTreeMouseReleased
{//GEN-HEADEREND:event_serverTreeMouseReleased
if (evt.isPopupTrigger() || ((evt.getButton() == MouseEvent.BUTTON3) && (0 != (evt.getModifiers() & MouseEvent.MOUSE_RELEASED)))) {
TreePath treePath = serverTree.getClosestPathForLocation(evt.getX(), evt.getY());
boolean adminUserFlag = true;
if (getUserName() != null) {
adminUserFlag = getUserName().compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0 ? true : false;
}
if (treePath != null) {
// Make sure the item we clicked on is selected!!
serverTree.setSelectionPath(treePath);
// Figure out which node this is.
TreeNode node = (TreeNode) treePath.getLastPathComponent();
if (node instanceof DefaultServerTreeNode) {
serverPopupMenu.show(serverTree, evt.getX(), evt.getY());
} else if (node instanceof ServerTreeNode) {
if (adminUserFlag) {
defineNewProjectMenuItem.setEnabled(true);
serverPopupShutdownMenuItem.setEnabled(true);
maintainServerRolesMenuItem.setEnabled(true);
} else {
defineNewProjectMenuItem.setEnabled(false);
serverPopupShutdownMenuItem.setEnabled(false);
maintainServerRolesMenuItem.setEnabled(false);
}
serverInstancePopupMenu.show(serverTree, evt.getX(), evt.getY());
} else if (node instanceof ProjectTreeNode) {
if (adminUserFlag) {
removeProjectMenuItem.setEnabled(true);
} else {
removeProjectMenuItem.setEnabled(false);
}
projectInstancePopupMenu.show(serverTree, evt.getX(), evt.getY());
}
}
}
}//GEN-LAST:event_serverTreeMouseReleased
private void maintainRoles() {
TreeNode node = null;
if ((serverTree != null)
&& (serverTree.getSelectionPath() != null)) {
node = (TreeNode) serverTree.getSelectionPath().getLastPathComponent();
}
if (node != null) {
if (node instanceof ServerTreeNode) {
ServerTreeNode serverTreeNode = (ServerTreeNode) node;
ServerProperties serverProperties = serverTreeNode.getServerProperties();
String serverName = serverProperties.getServerName();
if (isLoggedInToServer(serverName)) {
// Lookup the transport proxy for this server.
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// We can only maintain roles if we're logged in, etc.
if (transportProxy != null) {
ClientRequestServerGetRoleNamesData clientRequestServerGetRoleNamesData = new ClientRequestServerGetRoleNamesData();
clientRequestServerGetRoleNamesData.setServerName(serverName);
clientRequestServerGetRoleNamesData.setUserName(transportProxy.getUsername());
clientRequestServerGetRoleNamesData.setPassword(serverPasswordMapMember.get(serverName));
synchronized (transportProxy) {
transportProxy.write(clientRequestServerGetRoleNamesData);
}
maintainRolePrivilegesDialogMember.setServerName(serverName);
maintainRolePrivilegesDialogMember.centerDialog();
maintainRolePrivilegesDialogMember.setVisible(true);
}
}
}
}
}
private void saveServerProperties(ServerPropertiesDialog serverPropertiesDialog) {
if (serverPropertiesDialog.isOK()) {
// Save the information to the server properties file.
ServerProperties serverProperties = new ServerProperties(serverPropertiesDialog.getServerName());
serverProperties.setServerName(serverPropertiesDialog.getServerName());
serverProperties.setServerIPAddress(serverPropertiesDialog.getServerIPAddress());
serverProperties.setClientPort(serverPropertiesDialog.getClientPort());
serverProperties.setServerAdminPort(serverPropertiesDialog.getServerAdminPort());
serverProperties.saveProperties();
serverModelMember.loadModel();
}
}
/**
* Exit the Application.
*/
private void exitForm(java.awt.event.WindowEvent evt)
{//GEN-FIRST:event_exitForm
// Need to close any transports.
for (TransportProxyInterface transportProxy: transportProxyMapMember.values()) {
transportProxy.close();
}
transportProxyMapMember.clear();
}//GEN-LAST:event_exitForm
/**
* This is the main entry point for the admin application.
*
* @param args the command line arguments
*/
public static void main(final String args[]) {
// Run this on the swing thread.
Runnable application = new Runnable() {
@Override
public void run() {
new EnterpriseAdmin(args).setVisible(true);
}
};
SwingUtilities.invokeLater(application);
}
private void loginToServer(String serverName, String userName, String password) {
userNameMember = userName;
ServerProperties serverProperties = new ServerProperties(serverName);
int port = serverProperties.getServerAdminPort();
// Make sure the admin port is defined.
if (port == 0) {
JOptionPane.showConfirmDialog(this, "You must define the admin port to connect to the server", "Define admin port required", JOptionPane.PLAIN_MESSAGE);
// The user needs to define the server admin port before proceeding.
serverPropertiesMenuItemActionPerformed(null);
serverProperties = new ServerProperties(serverName);
port = serverProperties.getServerAdminPort();
}
// Build the transport, and start a separate thread for reading.
TransportProxyType transportType = serverProperties.getServerAdminTransport();
byte[] hashedPassword = Utility.getInstance().hashPassword(password);
TransportProxyInterface transportProxy = TransportProxyFactory.getInstance().getTransportProxy(transportType, serverProperties, port, userName, hashedPassword, this, this);
if (transportProxy != null) {
transportProxyMapMember.put(serverName, transportProxy);
pendingLoginPasswordMapMember.put(serverName, hashedPassword);
requestProjectsAndUsersFromServer(serverName);
} else {
JOptionPane.showConfirmDialog(this, "Unable to login to server. Server may be down.", "Server down message", JOptionPane.PLAIN_MESSAGE);
// And select the root node.
serverTree.setSelectionPath(serverTree.getPathForRow(0));
}
}
public String getUserName() {
return userNameMember;
}
public TransportProxyInterface getTransportProxyInterface(final String serverName) {
return transportProxyMapMember.get(serverName);
}
private void requestProjectsAndUsersFromServer(String serverName) {
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// Request the project list from the server
synchronized (transportProxy) {
ClientRequestServerListProjectsData requestData = new ClientRequestServerListProjectsData();
requestData.setServerName(serverName);
transportProxy.write(requestData);
// Request the user list from the server
ClientRequestServerListUsersData requestUsersData = new ClientRequestServerListUsersData();
requestUsersData.setServerName(serverName);
transportProxy.write(requestUsersData);
}
}
private void requestProjectUsersFromServer(String serverName, String projectName) {
TransportProxyInterface transportProxy = transportProxyMapMember.get(serverName);
// Request the project users from the server
ClientRequestServerListProjectUsersData requestData = new ClientRequestServerListProjectUsersData();
requestData.setServerName(serverName);
requestData.setProjectName(projectName);
requestData.setViewName(QVCSConstants.QVCS_TRUNK_VIEW);
synchronized (transportProxy) {
transportProxy.write(requestData);
}
}
private void showLoginToServerDialog() {
ServerTreeNode node = (ServerTreeNode) serverTree.getSelectionPath().getLastPathComponent();
ServerProperties serverProperties = node.getServerProperties();
String serverName = serverProperties.getServerName();
ServerLoginDialog loginDialog = new ServerLoginDialog(this, true, serverName);
loginDialog.setVisible(true);
String password = loginDialog.getPassword();
String userName = loginDialog.getUserName();
if (password != null) {
loginToServer(serverName, userName, password);
}
}
private void center() {
Dimension parentSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension size = getSize();
// Figure out the left boundaries
double left = (parentSize.getWidth() - size.getWidth()) / 2.;
double top = (parentSize.getHeight() - size.getHeight()) / 2.;
Point myLocation = new Point();
double x = left;
double y = top;
myLocation.setLocation(x, y);
setLocation(myLocation);
}
UserTreeModel getUserModel() {
return userModelMember;
}
@Override
public String getPendingPassword(String serverName) {
return pendingPasswordMapMember.get(serverName);
}
@Override
public void notifyPasswordChange(com.qumasoft.qvcslib.response.ServerResponseChangePassword response) {
if (response.getSuccess()) {
if (response.getUserName().equals(QVCSConstants.QVCS_ADMIN_USER)) {
// Update the password associated with the given server.
String pendingPassword = getPendingPassword(response.getServerName());
byte[] hashedPassword = Utility.getInstance().hashPassword(pendingPassword);
serverPasswordMapMember.put(response.getServerName(), hashedPassword);
JOptionPane.showConfirmDialog(this, "Password change successful for " + QVCSConstants.QVCS_ADMIN_USER, "Password Change Result", JOptionPane.PLAIN_MESSAGE);
} else {
JOptionPane.showConfirmDialog(this, "Password change successful for " + response.getUserName(), "Password Change Result", JOptionPane.PLAIN_MESSAGE);
}
} else {
JOptionPane.showConfirmDialog(this, "Password change failed for " + response.getUserName() + "." + response.getResult(), "Password Change Result", JOptionPane.PLAIN_MESSAGE);
}
}
@Override
public void savePendingPassword(String serverName, String password) {
pendingPasswordMapMember.put(serverName, password);
}
@Override
public void notifyLoginResult(final com.qumasoft.qvcslib.response.ServerResponseLogin response) {
if (response.getLoginResult()) {
// The password was a good one. Save it in the right place.
byte[] hashedPassword = pendingLoginPasswordMapMember.get(response.getServerName());
serverPasswordMapMember.put(response.getServerName(), hashedPassword);
if (!response.getVersionsMatchFlag()) {
// Run the update on the Swing thread.
Runnable later = new Runnable() {
@Override
public void run() {
ServerTreeNode node = (ServerTreeNode) serverTree.getSelectionPath().getLastPathComponent();
ServerProperties serverProperties = node.getServerProperties();
// Let the user know that the client is out of date.
int answer = JOptionPane.showConfirmDialog(null, "Login to server: " + response.getServerName() + " succeeded. However, your admin client is out of date. Did you want to update your admin client?", "Client out of date", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
if (answer == JOptionPane.OK_OPTION) {
UpdateManager.updateAdminClient(VERSION, "admin_out.jar", serverProperties, true);
} else {
System.exit(0);
}
}
};
SwingUtilities.invokeLater(later);
}
} else {
// Let the user know that the login failed.
transportProxyMapMember.remove(response.getServerName());
JOptionPane.showMessageDialog(this, "Login to server: " + response.getServerName() + " failed. " + response.getFailureReason(), "Login Failure", JOptionPane.INFORMATION_MESSAGE);
}
}
@Override
public void notifyUpdateComplete() {
// Run the update on the Swing thread.
Runnable later = new Runnable() {
@Override
public void run() {
// Time to exit the application.
JOptionPane.showMessageDialog(null, "Updates received. Please restart the application.", "Updates Complete", JOptionPane.PLAIN_MESSAGE);
exitForm(null);
}
};
SwingUtilities.invokeLater(later);
}
@Override
public void exitTheApp() {
exitForm(null);
}
private boolean isLoggedInToServer(final String serverName) {
Object password = serverPasswordMapMember.get(serverName);
return (password != null)
? true
: false;
}
@Override
public void notifyTransportProxyListener(ServerResponseInterface messageIn) {
if (messageIn instanceof ServerResponseMessage) {
ServerResponseMessage message = (ServerResponseMessage) messageIn;
if (message.getPriority().equals(ServerResponseMessage.HIGH_PRIORITY)) {
JOptionPane.showMessageDialog(this, message.getMessage(), "Server Message", JOptionPane.INFORMATION_MESSAGE);
}
LOGGER.log(Level.INFO, message.getMessage());
}
}
private void sizeMainWindow() {
setSize(500, 300);
splitPane.setDividerLocation(0.8);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JMenuItem addProjectsUserMenuItem;
private javax.swing.JMenuItem addServerMenuItem;
private javax.swing.JMenuItem addServerUserMenuItem;
private javax.swing.JSeparator bottomSeparator;
private javax.swing.JMenuItem changeUserPasswordMenuItem;
private javax.swing.JMenuItem defineNewProjectMenuItem;
private javax.swing.JMenuItem deleteUserMenuItem;
private javax.swing.JMenuBar frameMenuBar;
private javax.swing.JMenu frameProjectsMenu;
private javax.swing.JMenu frameRolesMenu;
private javax.swing.JMenu frameServersMenu;
private javax.swing.JMenu frameUsersMenu;
private javax.swing.JPanel leftChildPanel;
private javax.swing.JPanel leftParentPanel;
private javax.swing.JScrollPane leftScrollPane;
private javax.swing.JMenuItem maintainRolesMenuItem;
private javax.swing.JMenuItem maintainServerRolesMenuItem;
private javax.swing.JPopupMenu projectInstancePopupMenu;
private javax.swing.JMenuItem projectPropertiesMenuItem;
private javax.swing.JMenuItem removeProjectMenuItem;
private javax.swing.JMenuItem removeServerMenuItem;
private javax.swing.JPanel rightChildPanel;
private javax.swing.JPanel rightParentPanel;
private javax.swing.JScrollPane rightScrollPane;
private javax.swing.JPopupMenu serverInstancePopupMenu;
private javax.swing.JLabel serverLabel;
private javax.swing.JPopupMenu serverPopupMenu;
private javax.swing.JMenuItem serverPopupShutdownMenuItem;
private javax.swing.JMenuItem serverPropertiesMenuItem;
private javax.swing.JTree serverTree;
private javax.swing.JSplitPane splitPane;
private javax.swing.JPopupMenu userProjectPopupMenu;
private javax.swing.JPopupMenu userServerPopupMenu;
private javax.swing.JLabel usersLabel;
private javax.swing.JPopupMenu usersProjectPopupMenu;
private javax.swing.JPopupMenu usersServerPopupMenu;
private javax.swing.JTree usersTree;
// End of variables declaration//GEN-END:variables
@Override
public void visualCompare(String file1Name, String file2Name, String display1, String display2) {
throw new UnsupportedOperationException("Not supported yet.");
}
class AdminServerTreeCellRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
ImageIcon m_ServersIcon;
ImageIcon m_ServerIcon;
ImageIcon m_ProjectIcon;
AdminServerTreeCellRenderer(ImageIcon serversIcon, ImageIcon serverIcon, ImageIcon projectIcon) {
m_ServersIcon = serversIcon;
m_ServerIcon = serverIcon;
m_ProjectIcon = projectIcon;
}
@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (value instanceof DefaultServerTreeNode) {
setIcon(m_ServersIcon);
}
if (value instanceof ServerTreeNode) {
setIcon(m_ServerIcon);
} else if (value instanceof ProjectTreeNode) {
setIcon(m_ProjectIcon);
}
return this;
}
}
class AdminUserTreeCellRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
ImageIcon m_UsersIcon;
ImageIcon m_UserIcon;
AdminUserTreeCellRenderer(ImageIcon usersIcon, ImageIcon userIcon) {
m_UsersIcon = usersIcon;
m_UserIcon = userIcon;
}
@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (value instanceof DefaultProjectUserTreeNode) {
setIcon(m_UsersIcon);
} else if (value instanceof DefaultUserTreeNode) {
setIcon(m_UsersIcon);
} else if (value instanceof UserTreeNode) {
setIcon(m_UserIcon);
}
return this;
}
}
class OurServerMenuListener extends com.qumasoft.guitools.MenuListenerAdapter {
@Override
public void menuSelected(javax.swing.event.MenuEvent e) {
Font menuFont = new Font("Arial", 0, 12);
frameServersMenu.removeAll();
boolean projectFlag = false;
boolean serverFlag = false;
boolean serverLoggedInFlag = false;
boolean adminUserFlag = false;
TreeNode node = null;
if ((serverTree != null)
&& (serverTree.getSelectionPath() != null)) {
node = (TreeNode) serverTree.getSelectionPath().getLastPathComponent();
}
if (node != null) {
if (node instanceof ProjectTreeNode) {
projectFlag = true;
} else if (node instanceof ServerTreeNode) {
serverFlag = true;
ServerTreeNode serverTreeNode = (ServerTreeNode) node;
ServerProperties serverProperties = serverTreeNode.getServerProperties();
serverLoggedInFlag = isLoggedInToServer(serverProperties.getServerName());
}
}
if ((getUserName() != null) && (getUserName().compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0)) {
adminUserFlag = true;
}
JMenuItem menuItem = frameServersMenu.add(actionServerAddServer);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_A);
menuItem = frameServersMenu.add(actionServerRemoveServer);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_R);
menuItem.setEnabled(serverFlag && adminUserFlag);
menuItem = frameServersMenu.add(actionServerProperties);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_P);
menuItem.setEnabled(serverFlag && adminUserFlag);
menuItem = frameServersMenu.add(actionServerNewProject);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_N);
menuItem.setEnabled(serverLoggedInFlag && adminUserFlag);
menuItem = frameServersMenu.add(actionServerShutdown);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_S);
menuItem.setEnabled(serverLoggedInFlag && adminUserFlag);
// =====================================================================
frameServersMenu.add(new javax.swing.JSeparator());
// =====================================================================
menuItem = frameServersMenu.add(actionServerExit);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_X);
}
}
class OurProjectMenuListener extends com.qumasoft.guitools.MenuListenerAdapter {
@Override
public void menuSelected(javax.swing.event.MenuEvent e) {
Font menuFont = new Font("Arial", 0, 12);
frameProjectsMenu.removeAll();
boolean projectFlag = false;
boolean serverFlag = false;
boolean serverLoggedInFlag = false;
boolean adminUserFlag = false;
TreeNode node = null;
if ((serverTree != null)
&& (serverTree.getSelectionPath() != null)) {
node = (TreeNode) serverTree.getSelectionPath().getLastPathComponent();
}
if (node != null) {
if (node instanceof ProjectTreeNode) {
projectFlag = true;
} else if (node instanceof ServerTreeNode) {
serverFlag = true;
ServerTreeNode serverTreeNode = (ServerTreeNode) node;
ServerProperties serverProperties = serverTreeNode.getServerProperties();
serverLoggedInFlag = isLoggedInToServer(serverProperties.getServerName());
}
}
if ((getUserName() != null) && (getUserName().compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0)) {
adminUserFlag = true;
}
JMenuItem menuItem = frameProjectsMenu.add(actionProjectRemoveProject);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_R);
menuItem.setEnabled(projectFlag && adminUserFlag);
menuItem = frameProjectsMenu.add(actionProjectProjectProperties);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_P);
menuItem.setEnabled(projectFlag);
}
}
class OurUserMenuListener extends com.qumasoft.guitools.MenuListenerAdapter {
@Override
public void menuSelected(javax.swing.event.MenuEvent e) {
Font menuFont = new Font("Arial", 0, 12);
frameUsersMenu.removeAll();
boolean projectFlag = false;
boolean serverFlag = false;
boolean userFlag = false;
boolean changePasswordFlag = false;
boolean serverLoggedInFlag = false;
boolean adminUserFlag = false;
TreeNode node = null;
TreeNode userNode = null;
if ((serverTree != null)
&& (serverTree.getSelectionPath() != null)) {
node = (TreeNode) serverTree.getSelectionPath().getLastPathComponent();
}
if (node != null) {
if (node instanceof ProjectTreeNode) {
projectFlag = true;
} else if (node instanceof ServerTreeNode) {
serverFlag = true;
ServerTreeNode serverTreeNode = (ServerTreeNode) node;
ServerProperties serverProperties = serverTreeNode.getServerProperties();
serverLoggedInFlag = isLoggedInToServer(serverProperties.getServerName());
}
}
if ((usersTree != null)
&& (usersTree.getSelectionPath() != null)) {
userNode = (TreeNode) usersTree.getSelectionPath().getLastPathComponent();
}
if (userNode != null) {
if (userNode instanceof UserTreeNode) {
String userName = userNode.toString();
if (userName.compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0) {
userFlag = false;
} else {
userFlag = true;
}
changePasswordFlag = true;
}
}
if ((getUserName() != null) && (getUserName().compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0)) {
adminUserFlag = true;
}
JMenuItem menuItem = frameUsersMenu.add(actionUserAddUserToServer);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_A);
menuItem.setEnabled(serverLoggedInFlag && adminUserFlag);
menuItem = frameUsersMenu.add(actionUserRemoveUserFromServer);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_R);
menuItem.setEnabled(serverLoggedInFlag && userFlag && adminUserFlag);
menuItem = frameUsersMenu.add(actionUserAddUserToProject);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_P);
menuItem.setEnabled(projectFlag);
menuItem = frameUsersMenu.add(actionUserMaintainProjectRoles);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_F);
menuItem.setEnabled(userFlag && projectFlag);
menuItem = frameUsersMenu.add(actionUserChangePassword);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_C);
menuItem.setEnabled(changePasswordFlag && serverLoggedInFlag && adminUserFlag);
}
}
class OurRoleMenuListener extends com.qumasoft.guitools.MenuListenerAdapter {
@Override
public void menuSelected(javax.swing.event.MenuEvent e) {
Font menuFont = new Font("Arial", 0, 12);
frameRolesMenu.removeAll();
boolean serverFlag = false;
boolean serverLoggedInFlag = false;
boolean adminUserFlag = false;
TreeNode node = null;
if ((serverTree != null)
&& (serverTree.getSelectionPath() != null)) {
node = (TreeNode) serverTree.getSelectionPath().getLastPathComponent();
}
if (node != null) {
if (node instanceof ServerTreeNode) {
serverFlag = true;
ServerTreeNode serverTreeNode = (ServerTreeNode) node;
ServerProperties serverProperties = serverTreeNode.getServerProperties();
serverLoggedInFlag = isLoggedInToServer(serverProperties.getServerName());
}
}
if ((getUserName() != null) && (getUserName().compareTo(QVCSConstants.QVCS_ADMIN_USER) == 0)) {
adminUserFlag = true;
}
JMenuItem menuItem = frameRolesMenu.add(actionMaintainRole);
menuItem.setFont(menuFont);
menuItem.setMnemonic(java.awt.event.KeyEvent.VK_M);
menuItem.setEnabled(serverLoggedInFlag && adminUserFlag && serverFlag);
}
}
class ActionServerAddServer extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionServerAddServer() {
super("Add Server Definition...");
}
@Override
public void actionPerformed(ActionEvent e) {
addServerMenuItemActionPerformed(null);
}
}
class ActionServerRemoveServer extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionServerRemoveServer() {
super("Remove Server Definition...");
}
@Override
public void actionPerformed(ActionEvent e) {
removeServerMenuItemActionPerformed(null);
}
}
class ActionServerShutdown extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionServerShutdown() {
super("Shutdown server...");
}
@Override
public void actionPerformed(ActionEvent e) {
serverPopupShutdownMenuItemActionPerformed(null);
}
}
class ActionServerProperties extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionServerProperties() {
super("Properties...");
}
@Override
public void actionPerformed(ActionEvent e) {
serverPropertiesMenuItemActionPerformed(null);
}
}
class ActionServerNewProject extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionServerNewProject() {
super("New Project...");
}
@Override
public void actionPerformed(ActionEvent e) {
defineNewProjectMenuItemActionPerformed(null);
}
}
class ActionServerExit extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionServerExit() {
super("Exit");
}
@Override
public void actionPerformed(ActionEvent e) {
exitForm(null);
dispose();
}
}
class ActionProjectRemoveProject extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionProjectRemoveProject() {
super("Remove Project...");
}
@Override
public void actionPerformed(ActionEvent e) {
removeProjectMenuItemActionPerformed(null);
}
}
class ActionProjectProjectProperties extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionProjectProjectProperties() {
super("Project Properties...");
}
@Override
public void actionPerformed(ActionEvent e) {
projectPropertiesMenuItemActionPerformed(null);
}
}
class ActionUserAddUserToServer extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionUserAddUserToServer() {
super("Add user to server...");
}
@Override
public void actionPerformed(ActionEvent e) {
addServerUserMenuItemActionPerformed(null);
}
}
class ActionUserRemoveUserFromServer extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionUserRemoveUserFromServer() {
super("Remove user from server...");
}
@Override
public void actionPerformed(ActionEvent e) {
deleteUserMenuItemActionPerformed(null);
}
}
class ActionUserAddUserToProject extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionUserAddUserToProject() {
super("Add user to project...");
}
@Override
public void actionPerformed(ActionEvent e) {
addProjectsUserMenuItemActionPerformed(null);
}
}
class ActionUserMaintainProjectRoles extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionUserMaintainProjectRoles() {
super("Maintain user roles...");
}
@Override
public void actionPerformed(ActionEvent e) {
maintainRolesMenuItemActionPerformed(null);
}
}
class ActionUserChangePassword extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionUserChangePassword() {
super("Change Password...");
}
@Override
public void actionPerformed(ActionEvent e) {
changeUserPasswordMenuItemActionPerformed(null);
}
}
class ActionMaintainRole extends AbstractAction {
private static final long serialVersionUID = 1L;
ActionMaintainRole() {
super("Maintain Server Roles...");
}
@Override
public void actionPerformed(ActionEvent e) {
maintainRoles();
}
}
}