// 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.guitools.AbstractQVCSCommandDialog; import com.qumasoft.qvcslib.requestdata.ClientRequestServerDeleteRoleData; import com.qumasoft.qvcslib.requestdata.ClientRequestServerGetRolePrivilegesData; import com.qumasoft.qvcslib.requestdata.ClientRequestServerUpdatePrivilegesData; import com.qumasoft.qvcslib.RoleType; import com.qumasoft.qvcslib.ServerManager; import com.qumasoft.qvcslib.response.ServerResponseListRoleNames; import com.qumasoft.qvcslib.TransportProxyInterface; import javax.swing.DefaultListModel; import javax.swing.JOptionPane; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * Maintain role privileges dialog. * * @author Jim Voris */ public class MaintainRolePrivilegesDialog extends AbstractQVCSCommandDialog implements ChangeListener, ListSelectionListener { private static final long serialVersionUID = -3268164986047874194L; private DefaultListModel<String> rolesModel = null; private String serverName = null; /** * Creates new form MaintainRolePrivilegesDialog. * @param parent parent frame. * @param modal should this be a modal dialog. */ public MaintainRolePrivilegesDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); center(); roleList.getSelectionModel().addListSelectionListener(this); } // Center this dialog. This allows us to avoid overriding the center() // method which has protected access. void centerDialog() { center(); } void setServerName(final String argServerName) { this.serverName = argServerName; } /** * 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() { roleLabel = new javax.swing.JLabel(); m_ScrollPane = new javax.swing.JScrollPane(); roleList = new javax.swing.JList(); newButton = new javax.swing.JButton(); editButton = new javax.swing.JButton(); deleteButton = new javax.swing.JButton(); closeButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Maintain Role Privileges Dialog"); setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N setName("Maintain Role Privileges Dialog"); // NOI18N setResizable(false); roleLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N roleLabel.setText("Roles"); roleList.setModel(new javax.swing.AbstractListModel() { String[] strings = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"}; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); m_ScrollPane.setViewportView(roleList); newButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N newButton.setText("New..."); newButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { newButtonActionPerformed(evt); } }); editButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N editButton.setText("Edit..."); editButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { editButtonActionPerformed(evt); } }); deleteButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N deleteButton.setText("Delete..."); deleteButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteButtonActionPerformed(evt); } }); closeButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N closeButton.setText("Close"); closeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeButtonActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) .add(org.jdesktop.layout.GroupLayout.LEADING, roleLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(org.jdesktop.layout.GroupLayout.LEADING, m_ScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(deleteButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE) .add(editButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE) .add(newButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE) .add(closeButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)) .add(20, 20, 20)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(roleLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(m_ScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 165, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(layout.createSequentialGroup() .add(newButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 29, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(editButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 29, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(deleteButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 29, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(closeButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 29, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void closeButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_closeButtonActionPerformed {//GEN-HEADEREND:event_closeButtonActionPerformed setVisible(false); dispose(); }//GEN-LAST:event_closeButtonActionPerformed private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_deleteButtonActionPerformed {//GEN-HEADEREND:event_deleteButtonActionPerformed int selectedIndex = roleList.getSelectedIndex(); if (selectedIndex != -1) { String selectedRole = rolesModel.get(selectedIndex); if (serverName != null) { // Lookup the transport proxy for this server. TransportProxyInterface transportProxy = EnterpriseAdmin.getInstance().getTransportProxyInterface(serverName); // We can only maintain roles if we're logged in, etc. if (transportProxy != null) { ClientRequestServerDeleteRoleData clientRequestServerDeleteRoleData = new ClientRequestServerDeleteRoleData(); clientRequestServerDeleteRoleData.setRole(new RoleType(selectedRole)); clientRequestServerDeleteRoleData.setServerName(serverName); clientRequestServerDeleteRoleData.setUserName(transportProxy.getUsername()); synchronized (transportProxy) { transportProxy.write(clientRequestServerDeleteRoleData); } } } } }//GEN-LAST:event_deleteButtonActionPerformed private void editButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_editButtonActionPerformed {//GEN-HEADEREND:event_editButtonActionPerformed int selectedIndex = roleList.getSelectedIndex(); if (selectedIndex != -1) { String selectedRole = rolesModel.get(selectedIndex); MaintainPrivilegesDialog maintainPrivilegesDialog = new MaintainPrivilegesDialog(EnterpriseAdmin.getInstance(), true, this); ServerManager.getServerManager().addChangeListener(maintainPrivilegesDialog); maintainPrivilegesDialog.setRoleName(selectedRole); maintainPrivilegesDialog.setEditRoleNameFlag(false); if (serverName != null) { // Lookup the transport proxy for this server. TransportProxyInterface transportProxy = EnterpriseAdmin.getInstance().getTransportProxyInterface(serverName); // We can only maintain roles if we're logged in, etc. if (transportProxy != null) { ClientRequestServerGetRolePrivilegesData clientRequestServerGetRolePrivilegesData = new ClientRequestServerGetRolePrivilegesData(); clientRequestServerGetRolePrivilegesData.setServerName(serverName); clientRequestServerGetRolePrivilegesData.setRole(new RoleType(selectedRole)); clientRequestServerGetRolePrivilegesData.setUserName(transportProxy.getUsername()); synchronized (transportProxy) { transportProxy.write(clientRequestServerGetRolePrivilegesData); } maintainPrivilegesDialog.centerDialog(); maintainPrivilegesDialog.setVisible(true); if (maintainPrivilegesDialog.getIsOK()) { String[] privileges = maintainPrivilegesDialog.getPrivileges(); Boolean[] privilegesFlags = maintainPrivilegesDialog.getPrivilegesFlags(); updatePrivileges(transportProxy, selectedRole, privileges, privilegesFlags); } } } ServerManager.getServerManager().removeChangeListener(maintainPrivilegesDialog); } }//GEN-LAST:event_editButtonActionPerformed private void newButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_newButtonActionPerformed {//GEN-HEADEREND:event_newButtonActionPerformed MaintainPrivilegesDialog maintainPrivilegesDialog = new MaintainPrivilegesDialog(EnterpriseAdmin.getInstance(), true, this); ServerManager.getServerManager().addChangeListener(maintainPrivilegesDialog); maintainPrivilegesDialog.setRoleName(""); maintainPrivilegesDialog.setEditRoleNameFlag(true); if (serverName != null) { // Lookup the transport proxy for this server. TransportProxyInterface transportProxy = EnterpriseAdmin.getInstance().getTransportProxyInterface(serverName); // We can only maintain roles if we're logged in, etc. if (transportProxy != null) { ClientRequestServerGetRolePrivilegesData clientRequestServerGetRolePrivilegesData = new ClientRequestServerGetRolePrivilegesData(); clientRequestServerGetRolePrivilegesData.setServerName(serverName); // Use the ADMIN role, since we know that it should always exist. // The goal of the request to the server is to get the list of // privileges that we can use to define the new Role's privileges. clientRequestServerGetRolePrivilegesData.setRole(new RoleType("ADMIN")); clientRequestServerGetRolePrivilegesData.setUserName(transportProxy.getUsername()); synchronized (transportProxy) { transportProxy.write(clientRequestServerGetRolePrivilegesData); } maintainPrivilegesDialog.centerDialog(); maintainPrivilegesDialog.setVisible(true); if (maintainPrivilegesDialog.getIsOK()) { String role = maintainPrivilegesDialog.getRole(); if (!isRoleInUse(role)) { String[] privileges = maintainPrivilegesDialog.getPrivileges(); Boolean[] privilegesFlags = maintainPrivilegesDialog.getPrivilegesFlags(); updatePrivileges(transportProxy, role, privileges, privilegesFlags); } else { // Let user know the role is already in use. final String message = role + " is already in use. Please choose a different role name."; Runnable later = new Runnable() { @Override public void run() { // Let the user know that the password change worked. JOptionPane.showConfirmDialog(null, message, "Role already defined!", JOptionPane.PLAIN_MESSAGE); } }; SwingUtilities.invokeLater(later); } } } } ServerManager.getServerManager().removeChangeListener(maintainPrivilegesDialog); }//GEN-LAST:event_newButtonActionPerformed @Override public void dismissDialog() { closeButtonActionPerformed(null); } @Override public void stateChanged(ChangeEvent changeEvent) { Object change = changeEvent.getSource(); if (change instanceof ServerResponseListRoleNames) { ServerResponseListRoleNames response = (ServerResponseListRoleNames) change; String[] roles = response.getRoleList(); rolesModel = new DefaultListModel<>(); for (String role : roles) { rolesModel.addElement(role); } roleList.setModel(rolesModel); roleList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } } private void updatePrivileges(TransportProxyInterface transportProxy, final String role, final String[] privileges, final Boolean[] privilegesFlags) { ClientRequestServerUpdatePrivilegesData clientRequestServerUpdatePrivilegesData = new ClientRequestServerUpdatePrivilegesData(); clientRequestServerUpdatePrivilegesData.setServerName(serverName); clientRequestServerUpdatePrivilegesData.setUserName(transportProxy.getUsername()); clientRequestServerUpdatePrivilegesData.setRole(new RoleType(role)); clientRequestServerUpdatePrivilegesData.setPrivileges(privileges); clientRequestServerUpdatePrivilegesData.setPrivilegesFlags(privilegesFlags); synchronized (transportProxy) { transportProxy.write(clientRequestServerUpdatePrivilegesData); } } boolean isRoleInUse(final String role) { boolean returnFlag = false; int size = rolesModel.size(); for (int i = 0; i < size; i++) { String existingRole = rolesModel.getElementAt(i); if (0 == existingRole.compareTo(role)) { returnFlag = true; break; } } return returnFlag; } @Override public void valueChanged(ListSelectionEvent e) { int selectedIndex = roleList.getSelectedIndex(); if (selectedIndex != -1) { String selectedRole = rolesModel.get(selectedIndex); if (0 == selectedRole.compareTo("ADMIN")) { deleteButton.setEnabled(false); editButton.setText("View..."); } else { deleteButton.setEnabled(true); editButton.setText("Edit..."); } } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton closeButton; private javax.swing.JButton deleteButton; private javax.swing.JButton editButton; private javax.swing.JScrollPane m_ScrollPane; private javax.swing.JButton newButton; private javax.swing.JLabel roleLabel; private javax.swing.JList roleList; // End of variables declaration//GEN-END:variables }