/************************************************************************* * * * SignServer: The OpenSource Automated Signing Server * * * * This software is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or any later version. * * * * See terms of license at gnu.org. * * * *************************************************************************/ package org.signserver.admin.gui; import java.awt.event.ActionEvent; import java.util.Arrays; import java.util.Vector; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import org.jdesktop.application.Action; import org.jdesktop.application.Task; import org.signserver.admin.gui.adminws.gen .AdminNotAuthorizedException_Exception; import org.signserver.admin.gui.adminws.gen.WsGlobalConfiguration; import org.signserver.common.GlobalConfiguration; /** * Frame for viewing and editing global configuration properties. * * @author Markus KilÄs * @version $Id: GlobalConfigurationFrame.java 1840 2011-08-12 15:11:49Z netmackan $ */ @SuppressWarnings("PMD.UnusedFormalParameter") public class GlobalConfigurationFrame extends javax.swing.JFrame { private static final Vector COLUMN_NAMES = new Vector(Arrays.asList(new String[] { "Property", "Value" })); private Vector> properties = new Vector>(); /** Creates new form GlobalConfigurationFrame */ public GlobalConfigurationFrame() { initComponents(); configurationTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() { @Override public void valueChanged(final ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { final boolean enable = configurationTable.getSelectedRowCount() == 1; editButton.setEnabled(enable); removeButton.setEnabled(enable); } } }); refreshButton.doClick(); } /** 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. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { editPanel = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); editPropertyTextField = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); editPropertyValueTextArea = new javax.swing.JTextArea(); jScrollPane6 = new javax.swing.JScrollPane(); configurationTable = new javax.swing.JTable(); addButton = new javax.swing.JButton(); editButton = new javax.swing.JButton(); removeButton = new javax.swing.JButton(); jButton1 = new javax.swing.JButton(); jToolBar1 = new javax.swing.JToolBar(); refreshButton = new javax.swing.JButton(); editPanel.setName("editPanel"); // NOI18N org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(org.signserver.admin.gui.SignServerAdminGUIApplication.class).getContext().getResourceMap(GlobalConfigurationFrame.class); jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N jLabel1.setName("jLabel1"); // NOI18N editPropertyTextField.setEditable(false); editPropertyTextField.setText(resourceMap.getString("editPropertyTextField.text")); // NOI18N editPropertyTextField.setName("editPropertyTextField"); // NOI18N jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N jLabel2.setName("jLabel2"); // NOI18N jScrollPane1.setName("jScrollPane1"); // NOI18N editPropertyValueTextArea.setColumns(20); editPropertyValueTextArea.setRows(5); editPropertyValueTextArea.setName("editPropertyValueTextArea"); // NOI18N jScrollPane1.setViewportView(editPropertyValueTextArea); javax.swing.GroupLayout editPanelLayout = new javax.swing.GroupLayout(editPanel); editPanel.setLayout(editPanelLayout); editPanelLayout.setHorizontalGroup( editPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, editPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(editPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE) .addComponent(editPropertyTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE) .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE) .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)) .addContainerGap()) ); editPanelLayout.setVerticalGroup( editPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(editPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(editPropertyTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 193, Short.MAX_VALUE) .addContainerGap()) ); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(resourceMap.getString("Form.title")); // NOI18N setLocationByPlatform(true); setName("Form"); // NOI18N jScrollPane6.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane6.setName("jScrollPane6"); // NOI18N configurationTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Property", "Value" } )); configurationTable.setName("configurationTable"); // NOI18N jScrollPane6.setViewportView(configurationTable); addButton.setText(resourceMap.getString("addButton.text")); // NOI18N addButton.setName("addButton"); // NOI18N addButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addButtonActionPerformed(evt); } }); editButton.setText(resourceMap.getString("editButton.text")); // NOI18N editButton.setEnabled(false); editButton.setName("editButton"); // NOI18N editButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { editButtonActionPerformed(evt); } }); removeButton.setText(resourceMap.getString("removeButton.text")); // NOI18N removeButton.setEnabled(false); removeButton.setName("removeButton"); // NOI18N removeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeButtonActionPerformed(evt); } }); jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N jButton1.setName("jButton1"); // NOI18N jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jToolBar1.setRollover(true); jToolBar1.setName("jToolBar1"); // NOI18N javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(org.signserver.admin.gui.SignServerAdminGUIApplication.class).getContext().getActionMap(GlobalConfigurationFrame.class, this); refreshButton.setAction(actionMap.get("reloadGlobalConfiguration")); // NOI18N refreshButton.setText(resourceMap.getString("refreshButton.text")); // NOI18N refreshButton.setFocusable(false); refreshButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); refreshButton.setName("refreshButton"); // NOI18N refreshButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(refreshButton); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 770, Short.MAX_VALUE) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 660, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(addButton) .addComponent(editButton) .addComponent(removeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap()) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addButton, editButton, removeButton}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addComponent(addButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(editButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(removeButton)) .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE)) .addGap(18, 18, 18) .addComponent(jButton1) .addContainerGap()) ); pack(); }// //GEN-END:initComponents private void addButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed try { editPropertyTextField.setText(""); editPropertyTextField.setEditable(true); editPropertyValueTextArea.setText(""); final int res = JOptionPane.showConfirmDialog(this, editPanel, "Add property", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (res == JOptionPane.OK_OPTION) { final String key = editPropertyValueTextArea.getText(); SignServerAdminGUIApplication.getAdminWS() .setGlobalProperty(GlobalConfiguration.SCOPE_GLOBAL, editPropertyTextField.getText(), key); refreshButton.doClick(); } } catch (AdminNotAuthorizedException_Exception ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "Authorization denied", JOptionPane.ERROR_MESSAGE); } }//GEN-LAST:event_addButtonActionPerformed private void editButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_editButtonActionPerformed try { final int row = configurationTable.getSelectedRow(); if (row != -1) { final String oldPropertyName = (String) configurationTable.getValueAt(row, 0); editPropertyTextField.setText(oldPropertyName); editPropertyTextField.setEditable(true); editPropertyValueTextArea.setText( (String) configurationTable.getValueAt(row, 1)); final int res = JOptionPane.showConfirmDialog(this, editPanel, "Edit property", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (res == JOptionPane.OK_OPTION) { final String newPropertyName = editPropertyTextField.getText(); // Remove scope part String key; if (newPropertyName.contains(".")) { key = newPropertyName.substring( newPropertyName.indexOf(".") + 1); } else { key = newPropertyName; } if (!oldPropertyName.equals(newPropertyName)) { // Remove scope part String oldKey; if (newPropertyName.contains(".")) { oldKey = oldPropertyName.substring( oldPropertyName.indexOf(".") + 1); } else { oldKey = oldPropertyName; } SignServerAdminGUIApplication.getAdminWS() .removeGlobalProperty(GlobalConfiguration.SCOPE_GLOBAL, oldKey); } SignServerAdminGUIApplication.getAdminWS() .setGlobalProperty(GlobalConfiguration.SCOPE_GLOBAL, key, editPropertyValueTextArea.getText()); refreshButton.doClick(); } } } catch (AdminNotAuthorizedException_Exception ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "Authorization denied", JOptionPane.ERROR_MESSAGE); } }//GEN-LAST:event_editButtonActionPerformed private void removeButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed try { final int row = configurationTable.getSelectedRow(); if (row != -1) { final int res = JOptionPane.showConfirmDialog(this, "Are you sure you want to remove the property?", "Remove property", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (res == JOptionPane.YES_OPTION) { final String propertyName = (String) configurationTable.getValueAt(row, 0); // Remove scope part String key; if (propertyName.contains(".")) { key = propertyName.substring( propertyName.indexOf(".") + 1); } else { key = propertyName; } SignServerAdminGUIApplication.getAdminWS() .removeGlobalProperty(GlobalConfiguration.SCOPE_GLOBAL, key); } refreshButton.doClick(); } } catch (AdminNotAuthorizedException_Exception ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "Authorization denied", JOptionPane.ERROR_MESSAGE); } }//GEN-LAST:event_removeButtonActionPerformed private void jButton1ActionPerformed(ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed dispose(); }//GEN-LAST:event_jButton1ActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new GlobalConfigurationFrame().setVisible(true); } }); } @Action(block = Task.BlockingScope.WINDOW) public Task reloadGlobalConfiguration() { return new ReloadGlobalConfigurationTask(org.jdesktop.application.Application.getInstance(org.signserver.admin.gui.SignServerAdminGUIApplication.class)); } private class ReloadGlobalConfigurationTask extends Task { ReloadGlobalConfigurationTask(org.jdesktop.application.Application app) { // Runs on the EDT. Copy GUI state that // doInBackground() depends on from parameters // to ReloadGlobalConfigurationTask fields, here. super(app); } @Override protected WsGlobalConfiguration doInBackground() { // Your Task's code here. This method runs // on a background thread, so don't reference // the Swing GUI from here. WsGlobalConfiguration result = null; try { result = SignServerAdminGUIApplication.getAdminWS() .getGlobalConfiguration(); } catch (final AdminNotAuthorizedException_Exception ex) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JOptionPane.showMessageDialog( GlobalConfigurationFrame.this, ex.getMessage(), "Authorization denied", JOptionPane.ERROR_MESSAGE); } }); } // return your result return result; } @Override protected void succeeded(WsGlobalConfiguration result) { // Runs on the EDT. Update the GUI based on // the result computed by doInBackground(). properties = new Vector>(); if (result != null) { for (WsGlobalConfiguration.Config.Entry oldEntry : result.getConfig().getEntry()) { final Vector entry = new Vector(); entry.add((String) oldEntry.getKey()); entry.add((String) oldEntry.getValue()); properties.add(entry); } } configurationTable.setModel(new DefaultTableModel(properties, COLUMN_NAMES) { @Override public boolean isCellEditable(int row, int column) { return false; } }); } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addButton; private javax.swing.JTable configurationTable; private javax.swing.JButton editButton; private javax.swing.JPanel editPanel; private javax.swing.JTextField editPropertyTextField; private javax.swing.JTextArea editPropertyValueTextArea; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane6; private javax.swing.JToolBar jToolBar1; private javax.swing.JButton refreshButton; private javax.swing.JButton removeButton; // End of variables declaration//GEN-END:variables }