You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tb...@apache.org on 2006/12/12 16:24:14 UTC
svn commit: r486187 [30/49] - in /directory/trunks/triplesec: ./ admin-api/
admin-api/src/ admin-api/src/main/ admin-api/src/main/java/
admin-api/src/main/java/org/ admin-api/src/main/java/org/safehaus/
admin-api/src/main/java/org/safehaus/triplesec/ a...
Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewRolePanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewRolePanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewRolePanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewRolePanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,649 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.safehaus.triplesec.admin.swing;
+
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.safehaus.triplesec.admin.Application;
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.Role;
+import org.safehaus.triplesec.admin.RoleModifier;
+
+
+public class NewRolePanel extends JPanel
+{
+ private static final long serialVersionUID = 1L;
+ private JPanel mainPanel = null;
+ private JPanel buttonPanel = null;
+ private JButton createButton = null;
+ private JPanel aboveButtonPanel = null;
+ private JPanel northPanel = null;
+ private JPanel southPanel = null;
+ private JLabel iconLabel = null;
+ private JPanel jPanel = null;
+ private JTextArea descriptionTextArea = null;
+ private JPanel iconPanel = null;
+ private DefaultMutableTreeNode node = null;
+ private LeftTreeNavigation leftTreeNavigation;
+ private JTabbedPane centerTabbedPane = null;
+ private JPanel existingPanelTab = null;
+ private JScrollPane jScrollPane = null;
+ private JTable existingRolesTable = null;
+ private ExistingRolesTableModel existingRolesTableModel = null; // @jve:decl-index=0:visual-constraint=""
+ private JLabel jLabel = null;
+ private JTextField statusTextField = null;
+ private JLabel jLabel1 = null;
+ private JTextField roleNameTextField = null;
+ private JLabel jLabel2 = null;
+ private JTextField applicationNameTextField = null;
+ private RoleGrantsPanel roleGrantsPanel;
+
+
+ public void setLeftTreeNavigation( LeftTreeNavigation leftTreeNavigation )
+ {
+ this.leftTreeNavigation = leftTreeNavigation;
+ }
+
+
+ /**
+ * This is the default constructor
+ */
+ public NewRolePanel()
+ {
+ super();
+ initialize();
+ }
+
+
+ /**
+ * This method initializes this
+ *
+ * @return void
+ */
+ private void initialize()
+ {
+ GridBagConstraints gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.weightx = 1.0D;
+ gridBagConstraints.weighty = 1.0D;
+ gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints.insets = new java.awt.Insets( 10, 10, 10, 10 );
+ gridBagConstraints.gridy = 0;
+ this.setLayout( new GridBagLayout() );
+ this.setSize( 550, 417 );
+ this.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "New Role",
+ javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
+ null, null ) );
+ this.add( getMainPanel(), gridBagConstraints );
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getMainPanel()
+ {
+ if ( mainPanel == null )
+ {
+ mainPanel = new JPanel();
+ mainPanel.setLayout( new BorderLayout() );
+ mainPanel.add( getButtonPanel(), java.awt.BorderLayout.SOUTH );
+ mainPanel.add( getAboveButtonPanel(), java.awt.BorderLayout.CENTER );
+ }
+ return mainPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getButtonPanel()
+ {
+ if ( buttonPanel == null )
+ {
+ buttonPanel = new JPanel();
+ buttonPanel.setBorder( javax.swing.BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
+ buttonPanel.add( getCreateButton(), null );
+ }
+ return buttonPanel;
+ }
+
+
+ /**
+ * This method initializes jButton
+ *
+ * @return javax.swing.JButton
+ */
+ private JButton getCreateButton()
+ {
+ if ( createButton == null )
+ {
+ createButton = new JButton();
+ createButton.setText( "Create" );
+ createButton.addActionListener( new java.awt.event.ActionListener()
+ {
+ public void actionPerformed( java.awt.event.ActionEvent e )
+ {
+ createAction();
+ }
+ } );
+ }
+ return createButton;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getAboveButtonPanel()
+ {
+ if ( aboveButtonPanel == null )
+ {
+ aboveButtonPanel = new JPanel();
+ aboveButtonPanel.setLayout( new BorderLayout() );
+ aboveButtonPanel.add( getNorthPanel(), java.awt.BorderLayout.NORTH );
+ aboveButtonPanel.add( getSouthPanel(), java.awt.BorderLayout.SOUTH );
+ aboveButtonPanel.add( getCenterTabbedPane(), java.awt.BorderLayout.CENTER );
+ }
+ return aboveButtonPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getNorthPanel()
+ {
+ if ( northPanel == null )
+ {
+ GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+ gridBagConstraints1.gridx = 1;
+ gridBagConstraints1.weightx = 1.0D;
+ gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints1.gridheight = 3;
+ gridBagConstraints1.insets = new java.awt.Insets( 0, 10, 0, 10 );
+ gridBagConstraints1.weighty = 1.0D;
+ gridBagConstraints1.gridy = 0;
+ northPanel = new JPanel();
+ northPanel.setLayout( new GridBagLayout() );
+ northPanel.setPreferredSize( new java.awt.Dimension( 179, 68 ) );
+ northPanel.add( getIconPanel(), new GridBagConstraints() );
+ northPanel.add( getJPanel(), gridBagConstraints1 );
+ }
+ return northPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getSouthPanel()
+ {
+ if ( southPanel == null )
+ {
+ southPanel = new JPanel();
+ southPanel.setLayout( new BorderLayout() );
+ southPanel.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "Description",
+ javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+ javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null ) );
+ southPanel.add( getDescriptionTextArea(), java.awt.BorderLayout.NORTH );
+ }
+ return southPanel;
+ }
+
+
+ /**
+ * This method initializes iconLabel
+ *
+ * @return javax.swing.JLabel
+ */
+ private JLabel getIconLabel()
+ {
+ if ( iconLabel == null )
+ {
+ iconLabel = new JLabel();
+ iconLabel.setIcon( new ImageIcon( getClass().getResource(
+ "/org/safehaus/triplesec/admin/swing/new_role_48x48.png" ) ) );
+ iconLabel.setPreferredSize( new java.awt.Dimension( 48, 48 ) );
+ iconLabel.setText( "" );
+ iconLabel.setVerticalTextPosition( javax.swing.SwingConstants.BOTTOM );
+ iconLabel.setVerticalAlignment( javax.swing.SwingConstants.BOTTOM );
+ iconLabel.setEnabled( true );
+ }
+ return iconLabel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getJPanel()
+ {
+ if ( jPanel == null )
+ {
+ GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
+ gridBagConstraints8.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints8.gridy = 1;
+ gridBagConstraints8.weightx = 1.0;
+ gridBagConstraints8.insets = new java.awt.Insets(0,0,5,0);
+ gridBagConstraints8.gridx = 1;
+ GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
+ gridBagConstraints7.gridx = 0;
+ gridBagConstraints7.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints7.insets = new java.awt.Insets(0,0,5,5);
+ gridBagConstraints7.gridy = 1;
+ jLabel2 = new JLabel();
+ jLabel2.setText("Application Name:");
+ jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+ GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+ gridBagConstraints6.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints6.insets = new java.awt.Insets( 0, 0, 5, 5 );
+ GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+ gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints5.gridy = 2;
+ gridBagConstraints5.weightx = 1.0;
+ gridBagConstraints5.gridx = 1;
+ GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+ gridBagConstraints3.gridx = 0;
+ gridBagConstraints3.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints3.insets = new java.awt.Insets( 0, 0, 0, 5 );
+ gridBagConstraints3.gridy = 2;
+ jLabel1 = new JLabel();
+ jLabel1.setText("Role Name:");
+ jLabel1.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+ GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+ gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints2.gridy = 0;
+ gridBagConstraints2.weightx = 1.0;
+ gridBagConstraints2.insets = new java.awt.Insets( 0, 0, 5, 0 );
+ gridBagConstraints2.gridx = 1;
+ jLabel = new JLabel();
+ jLabel.setText( "Status:" );
+ jLabel.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+ jPanel = new JPanel();
+ jPanel.setLayout( new GridBagLayout() );
+ jPanel.setPreferredSize( new java.awt.Dimension( 131, 88 ) );
+ jPanel.add( jLabel, gridBagConstraints6 );
+ jPanel.add( getStatusTextField(), gridBagConstraints2 );
+ jPanel.add(jLabel1, gridBagConstraints3);
+ jPanel.add(getRoleNameTextField(), gridBagConstraints5);
+ jPanel.add(jLabel2, gridBagConstraints7);
+ jPanel.add(getApplicationNameTextField(), gridBagConstraints8);
+ }
+ return jPanel;
+ }
+
+
+ /**
+ * This method initializes jTextArea
+ *
+ * @return javax.swing.JTextArea
+ */
+ private JTextArea getDescriptionTextArea()
+ {
+ if ( descriptionTextArea == null )
+ {
+ descriptionTextArea = new JTextArea();
+ descriptionTextArea.setRows( 3 );
+ }
+ return descriptionTextArea;
+ }
+
+
+ /**
+ * This method initializes jPanel4
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getIconPanel()
+ {
+ if ( iconPanel == null )
+ {
+ iconPanel = new JPanel();
+ iconPanel
+ .setBorder( javax.swing.BorderFactory.createEtchedBorder( javax.swing.border.EtchedBorder.RAISED ) );
+ iconPanel.add( getIconLabel(), null );
+ }
+ return iconPanel;
+ }
+
+
+ public void setTreeNode( DefaultMutableTreeNode node )
+ {
+ this.node = node;
+ existingRolesTable.setModel( new ExistingRolesTableModel() );
+ DefaultMutableTreeNode appNode = ( DefaultMutableTreeNode ) node.getParent();
+ Application application = ( Application ) appNode.getUserObject();
+ applicationNameTextField.setText( application.getName() );
+ roleGrantsPanel.populateLists( appNode, Collections.EMPTY_SET );
+ }
+
+
+ public String noNull( Object obj )
+ {
+ if ( obj == null )
+ {
+ return "";
+ }
+ return obj.toString();
+ }
+
+
+ public DefaultMutableTreeNode getTreeNode()
+ {
+ return node;
+ }
+
+
+ public void createAction()
+ {
+ if ( roleNameTextField.getText() == null || roleNameTextField.getText().equals( "" ) )
+ {
+ return;
+ }
+
+ DefaultMutableTreeNode appNode = ( DefaultMutableTreeNode ) node.getParent();
+ Application application = ( Application ) appNode.getUserObject();
+ Role role;
+ RoleModifier modifier = application.modifier().newRole( roleNameTextField.getText() )
+ .setDescription( descriptionTextArea.getText() );
+
+ for ( Enumeration ii = roleGrantsPanel.getRoleGrantsModel().elements(); ii.hasMoreElements(); /**/ )
+ {
+ modifier.addGrant( ( String ) ii.nextElement() );
+ }
+ for ( Enumeration ii = roleGrantsPanel.getAvailablePermssionsModel().elements(); ii.hasMoreElements(); /**/ )
+ {
+ modifier.removeGrant( ( String ) ii.nextElement() );
+ }
+
+ try
+ {
+ role = modifier.add();
+ DefaultMutableTreeNode roleNode = new DefaultMutableTreeNode( role );
+ DefaultTreeModel model = ( DefaultTreeModel ) leftTreeNavigation.getTree().getModel();
+ model.insertNodeInto( roleNode, node, 0 );
+ existingRolesTableModel.fireTableDataChanged();
+ }
+ catch ( DataAccessException e )
+ {
+ JOptionPane.showMessageDialog( this,
+ UiUtils.wrap( "Failed to create role:\n" + e.getMessage(), 79 ),
+ "Role creation failure!", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ roleNameTextField.setText( null );
+ statusTextField.setText( null );
+ }
+
+
+ /**
+ * This method initializes jTabbedPane
+ *
+ * @return javax.swing.JTabbedPane
+ */
+ private JTabbedPane getCenterTabbedPane()
+ {
+ if ( centerTabbedPane == null )
+ {
+ centerTabbedPane = new JTabbedPane();
+ centerTabbedPane.addTab( "Existing", null, getExistingPanelTab(),
+ "Copy a role from any one of these existing roles." );
+ centerTabbedPane.addTab( "Grants", null, getRoleGrantsPanel() );
+ }
+ return centerTabbedPane;
+ }
+
+
+ private RoleGrantsPanel getRoleGrantsPanel()
+ {
+ if ( roleGrantsPanel == null )
+ {
+ roleGrantsPanel = new RoleGrantsPanel();
+ }
+ return roleGrantsPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel3
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getExistingPanelTab()
+ {
+ if ( existingPanelTab == null )
+ {
+ GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+ gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints4.gridy = 0;
+ gridBagConstraints4.weightx = 1.0;
+ gridBagConstraints4.weighty = 1.0;
+ gridBagConstraints4.gridx = 0;
+ existingPanelTab = new JPanel();
+ existingPanelTab.setLayout( new GridBagLayout() );
+ existingPanelTab.add( getJScrollPane(), gridBagConstraints4 );
+ }
+ return existingPanelTab;
+ }
+
+
+ /**
+ * This method initializes jScrollPane
+ *
+ * @return javax.swing.JScrollPane
+ */
+ private JScrollPane getJScrollPane()
+ {
+ if ( jScrollPane == null )
+ {
+ jScrollPane = new JScrollPane();
+ jScrollPane.setViewportView( getExistingRolesTable() );
+ }
+ return jScrollPane;
+ }
+
+
+ /**
+ * This method initializes jTable
+ *
+ * @return javax.swing.JTable
+ */
+ private JTable getExistingRolesTable()
+ {
+ if ( existingRolesTable == null )
+ {
+ existingRolesTable = new JTable();
+ existingRolesTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
+ existingRolesTable.getSelectionModel().addListSelectionListener( new ListSelectionListener()
+ {
+ public void valueChanged( ListSelectionEvent e )
+ {
+ int index = existingRolesTable.getSelectionModel().getAnchorSelectionIndex();
+ if ( existingRolesTableModel.getRowCount() == 0 || index < 0 )
+ {
+ return;
+ }
+ Role role = ( Role ) existingRolesTableModel.getValueAt( index, 0 );
+ roleNameTextField.setText( "CopyOf" + role.getName() );
+ descriptionTextArea.setText( role.getDescription() );
+ roleGrantsPanel.populateLists( ( DefaultMutableTreeNode ) node.getParent(), role.getGrants() );
+ }
+ } );
+ existingRolesTable.setModel( getExistingRolesTableModel() );
+ }
+ return existingRolesTable;
+ }
+
+
+ /**
+ * This method initializes defaultTableModel
+ *
+ * @return javax.swing.table.DefaultTableModel
+ */
+ private ExistingRolesTableModel getExistingRolesTableModel()
+ {
+ if ( existingRolesTableModel == null )
+ {
+ existingRolesTableModel = new ExistingRolesTableModel();
+ }
+ return existingRolesTableModel;
+ }
+
+
+ class ExistingRolesTableModel extends AbstractTableModel
+ {
+ private static final long serialVersionUID = 1L;
+
+
+ public int getRowCount()
+ {
+ if ( node == null )
+ {
+ return 0;
+ }
+ return node.getChildCount();
+ }
+
+
+ public int getColumnCount()
+ {
+ return 3;
+ }
+
+
+ public Object getValueAt( int rowIndex, int columnIndex )
+ {
+ if ( node == null )
+ {
+ return null;
+ }
+
+ DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) node.getChildAt( rowIndex );
+ switch ( columnIndex )
+ {
+ case ( 0 ):
+ return child.getUserObject();
+ case ( 1 ):
+ return ( ( Role ) child.getUserObject() ).getCreatorsName();
+ case ( 2 ):
+ return ( ( Role) child.getUserObject() ).getCreateTimestamp();
+ }
+ return child.getUserObject();
+ }
+
+
+ public String getColumnName( int columnIndex )
+ {
+ switch ( columnIndex )
+ {
+ case ( 0 ):
+ return "Existing Role";
+ case ( 1 ):
+ return "Creator's Name";
+ case ( 2 ):
+ return "Create Timestamp";
+ default:
+ throw new IndexOutOfBoundsException();
+ }
+ }
+ }
+
+
+ /**
+ * This method initializes jTextField
+ *
+ * @return javax.swing.JTextField
+ */
+ private JTextField getStatusTextField()
+ {
+ if ( statusTextField == null )
+ {
+ statusTextField = new JTextField();
+ statusTextField.setEditable( false );
+ }
+ return statusTextField;
+ }
+
+
+ /**
+ * This method initializes jTextField1
+ *
+ * @return javax.swing.JTextField
+ */
+ private JTextField getRoleNameTextField()
+ {
+ if ( roleNameTextField == null )
+ {
+ roleNameTextField = new JTextField();
+ }
+ return roleNameTextField;
+ }
+
+
+ /**
+ * This method initializes jTextField
+ *
+ * @return javax.swing.JTextField
+ */
+ private JTextField getApplicationNameTextField()
+ {
+ if ( applicationNameTextField == null )
+ {
+ applicationNameTextField = new JTextField();
+ applicationNameTextField.setEditable(false);
+ }
+ return applicationNameTextField;
+ }
+} // @jve:decl-index=0:visual-constraint="10,10"
Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewUserPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewUserPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewUserPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/NewUserPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,738 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.safehaus.triplesec.admin.swing;
+
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.ExternalUser;
+import org.safehaus.triplesec.admin.ExternalUserModifier;
+import org.safehaus.triplesec.admin.HauskeysUser;
+import org.safehaus.triplesec.admin.HauskeysUserModifier;
+import org.safehaus.triplesec.admin.LocalUser;
+import org.safehaus.triplesec.admin.LocalUserModifier;
+import org.safehaus.triplesec.admin.TriplesecAdmin;
+import org.safehaus.triplesec.admin.User;
+
+
+public class NewUserPanel extends JPanel implements StatusListener, StatusObject, KeyListener, FocusListener
+{
+ private static final long serialVersionUID = 1L;
+ private JPanel mainPanel = null;
+ private JPanel buttonPanel = null;
+ private JButton createButton = null;
+ private JPanel aboveButtonPanel = null;
+ private UserNorthPanel userNorthPanel = null;
+ private JPanel southPanel = null;
+ private JTextArea descriptionTextArea = null;
+ private DefaultMutableTreeNode node = null;
+ private LeftTreeNavigation leftTreeNavigation;
+ private JTabbedPane centerTabbedPane = null;
+ private JPanel existingPanelTab = null;
+ private JScrollPane jScrollPane = null;
+ private JTable existingUsersTable = null;
+ private TriplesecAdmin triplesecAdmin;
+ private ExistingUsersTableModel existingUsersTableModel = null; // @jve:decl-index=0:visual-constraint=""
+ private ImageIcon newUserIcon = new ImageIcon( getClass().getResource(
+ "/org/safehaus/triplesec/admin/swing/new_user_48x48.png" ) );
+ private ProvisioningPanel provisioningPanel;
+ private HotpSettingsPanel hotpSettingsPanel;
+ private ExternalLinkPanel externalLinkPanel;
+ private UserInfoPanel userInfoPanel;
+ private boolean lastStatusState = true;
+ private StatusListener listener = this;
+
+
+ public void setLeftTreeNavigation( LeftTreeNavigation leftTreeNavigation )
+ {
+ this.leftTreeNavigation = leftTreeNavigation;
+ }
+
+
+ public void setTriplesecAdmin( TriplesecAdmin triplesecAdmin )
+ {
+ this.triplesecAdmin = triplesecAdmin;
+ }
+
+
+ /**
+ * This is the default constructor
+ */
+ public NewUserPanel()
+ {
+ super();
+ initialize();
+ }
+
+
+ /**
+ * This method initializes this
+ *
+ * @return void
+ */
+ private void initialize()
+ {
+ GridBagConstraints gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.weightx = 1.0D;
+ gridBagConstraints.weighty = 1.0D;
+ gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints.insets = new java.awt.Insets( 10, 10, 10, 10 );
+ gridBagConstraints.gridy = 0;
+ this.setLayout( new GridBagLayout() );
+ this.setSize( 550, 417 );
+ this.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "New User",
+ javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
+ null, null ) );
+ this.add( getMainPanel(), gridBagConstraints );
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getMainPanel()
+ {
+ if ( mainPanel == null )
+ {
+ mainPanel = new JPanel();
+ mainPanel.setLayout( new BorderLayout() );
+ mainPanel.add( getButtonPanel(), java.awt.BorderLayout.SOUTH );
+ mainPanel.add( getAboveButtonPanel(), java.awt.BorderLayout.CENTER );
+ }
+ return mainPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getButtonPanel()
+ {
+ if ( buttonPanel == null )
+ {
+ buttonPanel = new JPanel();
+ buttonPanel.setBorder( javax.swing.BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
+ buttonPanel.add( getCreateButton(), null );
+ }
+ return buttonPanel;
+ }
+
+
+ /**
+ * This method initializes jButton
+ *
+ * @return javax.swing.JButton
+ */
+ private JButton getCreateButton()
+ {
+ if ( createButton == null )
+ {
+ createButton = new JButton();
+ createButton.setText( "Create" );
+ createButton.addActionListener( new java.awt.event.ActionListener()
+ {
+ public void actionPerformed( java.awt.event.ActionEvent e )
+ {
+ createAction();
+ }
+ } );
+ }
+ return createButton;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getAboveButtonPanel()
+ {
+ if ( aboveButtonPanel == null )
+ {
+ aboveButtonPanel = new JPanel();
+ aboveButtonPanel.setLayout( new BorderLayout() );
+ aboveButtonPanel.add( getUserNorthPanel(), java.awt.BorderLayout.NORTH );
+ aboveButtonPanel.add( getSouthPanel(), java.awt.BorderLayout.SOUTH );
+ aboveButtonPanel.add( getCenterTabbedPane(), java.awt.BorderLayout.CENTER );
+ }
+ return aboveButtonPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private UserNorthPanel getUserNorthPanel()
+ {
+ if ( userNorthPanel == null )
+ {
+ userNorthPanel = new UserNorthPanel();
+ userNorthPanel.setNewEntityMode( true );
+ userNorthPanel.setStatusListener( this );
+ userNorthPanel.setIcon( newUserIcon );
+ userNorthPanel.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent e )
+ {
+ if ( userNorthPanel.isExternalUserSelected() )
+ {
+ centerTabbedPane.removeAll();
+ centerTabbedPane.addTab( "Existing", null, existingPanelTab );
+ centerTabbedPane.addTab( "External Link", null, externalLinkPanel );
+ }
+ else if ( userNorthPanel.isLocalUserSelected() )
+ {
+ centerTabbedPane.removeAll();
+ centerTabbedPane.addTab( "Existing", null, existingPanelTab );
+ centerTabbedPane.addTab( "User Info", null, userInfoPanel );
+ }
+ else if ( userNorthPanel.isHauskeysUserSelected() )
+ {
+ centerTabbedPane.removeAll();
+ centerTabbedPane.addTab( "Existing", null, existingPanelTab );
+ centerTabbedPane.addTab( "User Info", null, userInfoPanel );
+ centerTabbedPane.addTab( "Provisioning", null, provisioningPanel );
+ centerTabbedPane.addTab( "HOTP Settings", null, hotpSettingsPanel );
+ }
+ else
+ {
+ throw new IllegalStateException( "Radio buttons should be mutually exclusive!" );
+ }
+ }
+ } );
+ }
+ return userNorthPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getSouthPanel()
+ {
+ if ( southPanel == null )
+ {
+ southPanel = new JPanel();
+ southPanel.setLayout( new BorderLayout() );
+ southPanel.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "Description",
+ javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+ javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null ) );
+ southPanel.add( getDescriptionTextArea(), java.awt.BorderLayout.NORTH );
+ }
+ return southPanel;
+ }
+
+
+ /**
+ * This method initializes jTextArea
+ *
+ * @return javax.swing.JTextArea
+ */
+ private JTextArea getDescriptionTextArea()
+ {
+ if ( descriptionTextArea == null )
+ {
+ descriptionTextArea = new JTextArea();
+ descriptionTextArea.setRows( 3 );
+ descriptionTextArea.addKeyListener( this );
+ descriptionTextArea.addFocusListener( this );
+ }
+ return descriptionTextArea;
+ }
+
+
+ public void setTreeNode( DefaultMutableTreeNode node )
+ {
+ this.node = node;
+ existingUsersTable.setModel( new ExistingUsersTableModel() );
+ }
+
+
+ public DefaultMutableTreeNode getTreeNode()
+ {
+ return node;
+ }
+
+
+ public void createExternalUser()
+ {
+ ExternalUser user;
+ ExternalUserModifier modifier = triplesecAdmin.newExternalUser( userNorthPanel.getId(),
+ externalLinkPanel.getReferral() ).setDescription( descriptionTextArea.getText() );
+ try
+ {
+ user = modifier.add();
+ DefaultMutableTreeNode userNode = new DefaultMutableTreeNode( user );
+ DefaultTreeModel model = ( DefaultTreeModel ) leftTreeNavigation.getTree().getModel();
+ model.insertNodeInto( userNode, node, 0 );
+ existingUsersTableModel.fireTableDataChanged();
+ }
+ catch ( DataAccessException e )
+ {
+ JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to create user:\n" + e.getMessage(), 79 ),
+ "User creation failure!", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ }
+
+
+ public void createLocalUser()
+ {
+ if ( ! userInfoPanel.isPasswordOk() )
+ {
+ JOptionPane.showMessageDialog( this, "Passwords are not equal or are invalid. Create aborted!" );
+ return;
+ }
+
+ LocalUser user;
+ LocalUserModifier modifier = triplesecAdmin.newLocalUser( userNorthPanel.getId(), userInfoPanel.getFirstName(),
+ userInfoPanel.getLastName(), userInfoPanel.getPassword() );
+ modifier.setDescription( descriptionTextArea.getText() );
+ try
+ {
+ user = modifier.add();
+ DefaultMutableTreeNode userNode = new DefaultMutableTreeNode( user );
+ DefaultTreeModel model = ( DefaultTreeModel ) leftTreeNavigation.getTree().getModel();
+ model.insertNodeInto( userNode, node, 0 );
+ existingUsersTableModel.fireTableDataChanged();
+ }
+ catch ( DataAccessException e )
+ {
+ JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to create user:\n" + e.getMessage(), 79 ),
+ "User creation failure!", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ }
+
+
+ public void createHauskeysUser()
+ {
+ if ( ! userInfoPanel.isPasswordOk() )
+ {
+ JOptionPane.showMessageDialog( this, "Passwords are not equal or are invalid. Create aborted!" );
+ return;
+ }
+
+ HauskeysUser user;
+ HauskeysUserModifier modifier = triplesecAdmin
+ .newHauskeysUser( userNorthPanel.getId(), userInfoPanel.getFirstName(),
+ userInfoPanel.getLastName(), userInfoPanel.getPassword() )
+ .setDescription( descriptionTextArea.getText() ).setPassword( userInfoPanel.getPassword() )
+ .setActivationKey( hotpSettingsPanel.getActivationKey() )
+ .setSecret( hotpSettingsPanel.getSecret() )
+ .setMovingFactor( hotpSettingsPanel.getMovingFactor() )
+ .setFailuresInEpoch( hotpSettingsPanel.getFailuresInEpoch() )
+ .setEmail( provisioningPanel.getEmail() )
+ .setMidletName( provisioningPanel.getMidletName() )
+ .setMobile( provisioningPanel.getMobile() )
+ .setMobileCarrier( String.valueOf( provisioningPanel.getMobileCarrier() ) )
+ .setNotifyBy( provisioningPanel.getNotifyBy() )
+ .setRealm( userInfoPanel.getRealm() )
+ .setTokenPin( provisioningPanel.getTokenPin() );
+ try
+ {
+ user = modifier.add();
+ DefaultMutableTreeNode userNode = new DefaultMutableTreeNode( user );
+ DefaultTreeModel model = ( DefaultTreeModel ) leftTreeNavigation.getTree().getModel();
+ model.insertNodeInto( userNode, node, 0 );
+ existingUsersTableModel.fireTableDataChanged();
+ }
+ catch ( DataAccessException e )
+ {
+ JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to create user:\n" + e.getMessage(), 79 ),
+ "User creation failure!", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ }
+
+
+ public void createAction()
+ {
+ if ( userNorthPanel.getId() == null || userNorthPanel.getId().equals( "" ) )
+ {
+ return;
+ }
+
+ if ( userNorthPanel.isExternalUserSelected() )
+ {
+ createExternalUser();
+ }
+ else if ( userNorthPanel.isLocalUserSelected() )
+ {
+ createLocalUser();
+ }
+ else if ( userNorthPanel.isHauskeysUserSelected() )
+ {
+ createHauskeysUser();
+ }
+ else
+ {
+ throw new IllegalStateException( "Radio buttons on north user panel should be mutually exclusive." );
+ }
+
+ clearAll();
+ }
+
+
+ public void clearAll()
+ {
+ userNorthPanel.setId( null );
+ userNorthPanel.setStatus( null );
+ this.lastStatusState = true;
+ }
+
+
+ /**
+ * This method initializes jTabbedPane
+ *
+ * @return javax.swing.JTabbedPane
+ */
+ private JTabbedPane getCenterTabbedPane()
+ {
+ if ( centerTabbedPane == null )
+ {
+ centerTabbedPane = new JTabbedPane();
+ centerTabbedPane.addTab( "Existing", null, getExistingPanelTab(),
+ "Copy a user from any one of these existing users." );
+ getExternalLinkPanel();
+ getUserInfoPanel();
+ getProvisioningPanel();
+ getHotpSettingsPanel();
+ }
+ return centerTabbedPane;
+ }
+
+
+ private HotpSettingsPanel getHotpSettingsPanel()
+ {
+ if ( hotpSettingsPanel == null )
+ {
+ hotpSettingsPanel = new HotpSettingsPanel();
+ hotpSettingsPanel.setNewEntityMode( true );
+ hotpSettingsPanel.setStatusListener( this );
+ }
+ return hotpSettingsPanel;
+ }
+
+
+ private ExternalLinkPanel getExternalLinkPanel()
+ {
+ if ( externalLinkPanel == null )
+ {
+ externalLinkPanel = new ExternalLinkPanel();
+ externalLinkPanel.setNewEntityMode( true );
+ externalLinkPanel.setStatusListener( this );
+ }
+ return externalLinkPanel;
+ }
+
+
+ private UserInfoPanel getUserInfoPanel()
+ {
+ if ( userInfoPanel == null )
+ {
+ userInfoPanel = new UserInfoPanel();
+ userInfoPanel.setNewEntityMode( true );
+ userInfoPanel.setStatusListener( this );
+ }
+ return userInfoPanel;
+ }
+
+
+ private ProvisioningPanel getProvisioningPanel()
+ {
+ if ( provisioningPanel == null )
+ {
+ provisioningPanel = new ProvisioningPanel();
+ provisioningPanel.setNewEntityMode( true );
+ provisioningPanel.setStatusListener( this );
+ }
+ return provisioningPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel3
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getExistingPanelTab()
+ {
+ if ( existingPanelTab == null )
+ {
+ GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+ gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints4.gridy = 0;
+ gridBagConstraints4.weightx = 1.0;
+ gridBagConstraints4.weighty = 1.0;
+ gridBagConstraints4.gridx = 0;
+ existingPanelTab = new JPanel();
+ existingPanelTab.setLayout( new GridBagLayout() );
+ existingPanelTab.add( getJScrollPane(), gridBagConstraints4 );
+ }
+ return existingPanelTab;
+ }
+
+
+ /**
+ * This method initializes jScrollPane
+ *
+ * @return javax.swing.JScrollPane
+ */
+ private JScrollPane getJScrollPane()
+ {
+ if ( jScrollPane == null )
+ {
+ jScrollPane = new JScrollPane();
+ jScrollPane.setViewportView( getExistingUsersTable() );
+ }
+ return jScrollPane;
+ }
+
+
+ /**
+ * This method initializes jTable
+ *
+ * @return javax.swing.JTable
+ */
+ private JTable getExistingUsersTable()
+ {
+ if ( existingUsersTable == null )
+ {
+ existingUsersTable = new JTable();
+ existingUsersTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
+ existingUsersTable.setModel( getExistingUsersTableModel() );
+ existingUsersTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() {
+ public void valueChanged( ListSelectionEvent e )
+ {
+ int index = existingUsersTable.getSelectionModel().getAnchorSelectionIndex();
+ if ( index < 0 )
+ {
+ return;
+ }
+
+ User archetype = ( User ) existingUsersTable.getValueAt( index, 0 );
+ userNorthPanel.setFields( archetype );
+ userNorthPanel.setIcon( newUserIcon );
+ userNorthPanel.setId( "CopyOf" + archetype.getId() );
+ if ( archetype instanceof ExternalUser )
+ {
+ externalLinkPanel.setFields( ( ExternalUser ) archetype );
+ descriptionTextArea.setText( ( ( ExternalUser ) archetype ).getDescription() );
+ centerTabbedPane.removeAll();
+ centerTabbedPane.addTab( "Existing", null, existingPanelTab );
+ centerTabbedPane.addTab( "External Link", null, externalLinkPanel );
+ }
+ else if ( archetype instanceof LocalUser )
+ {
+ userInfoPanel.setFields( ( LocalUser ) archetype, "Not implemented" );
+ descriptionTextArea.setText( ( ( LocalUser ) archetype ).getDescription() );
+ centerTabbedPane.removeAll();
+ centerTabbedPane.addTab( "Existing", null, existingPanelTab );
+ centerTabbedPane.addTab( "User Info", null, userInfoPanel );
+ }
+ else if ( archetype instanceof HauskeysUser )
+ {
+ userInfoPanel.setFields( ( HauskeysUser ) archetype );
+ hotpSettingsPanel.setFields( ( HauskeysUser ) archetype );
+ provisioningPanel.setFields( ( HauskeysUser ) archetype );
+ descriptionTextArea.setText( ( ( HauskeysUser ) archetype ).getDescription() );
+ centerTabbedPane.removeAll();
+ centerTabbedPane.addTab( "Existing", null, existingPanelTab );
+ centerTabbedPane.addTab( "User Info", null, userInfoPanel );
+ centerTabbedPane.addTab( "Provisioning", null, provisioningPanel );
+ centerTabbedPane.addTab( "HOTP Settings", null, hotpSettingsPanel );
+ }
+// userNorthPanel.setStatus( Color.RED, "Create operation needed!" );
+ }});
+ }
+ return existingUsersTable;
+ }
+
+
+ /**
+ * This method initializes defaultTableModel
+ *
+ * @return javax.swing.table.DefaultTableModel
+ */
+ private ExistingUsersTableModel getExistingUsersTableModel()
+ {
+ if ( existingUsersTableModel == null )
+ {
+ existingUsersTableModel = new ExistingUsersTableModel();
+ }
+ return existingUsersTableModel;
+ }
+
+ class ExistingUsersTableModel extends AbstractTableModel
+ {
+ private static final long serialVersionUID = 1L;
+
+
+ public int getRowCount()
+ {
+ if ( node == null )
+ {
+ return 0;
+ }
+ return node.getChildCount();
+ }
+
+
+ public int getColumnCount()
+ {
+ return 3;
+ }
+
+
+ public Object getValueAt( int rowIndex, int columnIndex )
+ {
+ if ( node == null )
+ {
+ return null;
+ }
+
+ DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) node.getChildAt( rowIndex );
+ switch ( columnIndex )
+ {
+ case ( 0 ):
+ return child.getUserObject();
+ case ( 1 ):
+ return ( ( User ) child.getUserObject() ).getCreatorsName();
+ case ( 2 ):
+ return ( ( User ) child.getUserObject() ).getCreateTimestamp();
+ }
+ return child.getUserObject();
+ }
+
+
+ public String getColumnName( int columnIndex )
+ {
+ switch ( columnIndex )
+ {
+ case ( 0 ):
+ return "Existing User";
+ case ( 1 ):
+ return "Creator's Name";
+ case ( 2 ):
+ return "Create Timestamp";
+ default:
+ throw new IndexOutOfBoundsException();
+ }
+ }
+ }
+
+
+ public void statusChanged( StatusObject obj )
+ {
+ if ( ! obj.isUpToDate() )
+ {
+// userNorthPanel.setStatus( Color.RED, "Create operation needed!" );
+ return;
+ }
+
+ if ( isUpToDate() && userNorthPanel.isUpToDate() && userInfoPanel.isUpToDate()
+ && provisioningPanel.isUpToDate() && hotpSettingsPanel.isUpToDate() )
+ {
+// userNorthPanel.setStatus( Color.GREEN, "Nothing to do!" );
+ }
+ }
+
+
+ public void checkStatus()
+ {
+ boolean upToDate = isUpToDate();
+ if ( listener != null && lastStatusState != upToDate )
+ {
+ listener.statusChanged( NewUserPanel.this );
+ lastStatusState = upToDate;
+ }
+ }
+
+
+ public boolean isUpToDate()
+ {
+ return UiUtils.isFieldUpToDate( descriptionTextArea, null );
+ }
+
+
+ public void keyTyped( KeyEvent e )
+ {
+ checkStatus();
+ }
+
+
+ public void keyPressed( KeyEvent e )
+ {
+ checkStatus();
+ }
+
+
+ public void keyReleased( KeyEvent e )
+ {
+ checkStatus();
+ }
+
+
+ public void focusGained( FocusEvent e )
+ {
+ checkStatus();
+ }
+
+
+ public void focusLost( FocusEvent e )
+ {
+ checkStatus();
+ }
+} // @jve:decl-index=0:visual-constraint="10,10"
Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionDependentsPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionDependentsPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionDependentsPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionDependentsPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,376 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.safehaus.triplesec.admin.swing;
+
+
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import javax.swing.JButton;
+import java.awt.GridBagLayout;
+
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import java.awt.GridBagConstraints;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.table.AbstractTableModel;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.Permission;
+import org.safehaus.triplesec.admin.Profile;
+import org.safehaus.triplesec.admin.Role;
+
+
+public class PermissionDependentsPanel extends JPanel
+{
+ private static final long serialVersionUID = -5711894948847093836L;
+ private JPanel centerPanel = null;
+ private JPanel southPanel = null;
+ private JButton removeButton = null;
+ private JScrollPane jScrollPane = null;
+ private JTable dependentsTable = null;
+ private List dependents = new ArrayList();
+ private Permission permission;
+ private DependencyModel dependencyModel = null;
+
+
+ /**
+ * This is the default constructor
+ */
+ public PermissionDependentsPanel()
+ {
+ super();
+ initialize();
+ }
+
+
+ public void setSelectedNode( DefaultMutableTreeNode node )
+ {
+ this.permission = ( Permission ) node.getUserObject();
+ this.dependents.clear();
+
+ if ( node == null || node.getParent() == null || node.getParent().getParent() == null )
+ {
+ return;
+ }
+
+ // -------------------------------------------------------------------
+ // Find the application, and subordinate "Profiles" and "Roles" nodes
+ // -------------------------------------------------------------------
+
+ DefaultMutableTreeNode applicationNode = ( DefaultMutableTreeNode ) node.getParent().getParent();
+ DefaultMutableTreeNode rolesNode = null;
+ DefaultMutableTreeNode profilesNode = null;
+ for ( Enumeration ii = applicationNode.children(); ii.hasMoreElements(); /**/ )
+ {
+ DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+ if ( "Roles".equals( child.getUserObject() ) )
+ {
+ rolesNode = child;
+ }
+ if ( "Profiles".equals( child.getUserObject() ) )
+ {
+ profilesNode = child;
+ }
+ }
+
+ // -------------------------------------------------------------------
+ // Find the role dependents
+ // -------------------------------------------------------------------
+
+ for ( Enumeration ii = rolesNode.children(); ii.hasMoreElements(); /**/ )
+ {
+ DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+ Role role = ( Role ) child.getUserObject();
+ if ( role.getGrants().contains( permission.getName() ) )
+ {
+ dependents.add( child );
+ }
+ }
+
+ // -------------------------------------------------------------------
+ // Find the profile dependents
+ // -------------------------------------------------------------------
+
+ for ( Enumeration ii = profilesNode.children(); ii.hasMoreElements(); /**/ )
+ {
+ DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+ Profile profile = ( Profile ) ( child ).getUserObject();
+ if ( profile.getGrants().contains( permission.getName() ) ||
+ profile.getDenials().contains( permission.getName() ) )
+ {
+ dependents.add( child );
+ }
+ }
+
+ dependencyModel.fireTableDataChanged();
+ }
+
+
+ /**
+ * This method initializes this
+ *
+ * @return void
+ */
+ private void initialize()
+ {
+ this.setLayout(new BorderLayout());
+ this.setSize(590, 289);
+ this.add(getCenterPanel(), java.awt.BorderLayout.CENTER);
+ this.add(getSouthPanel(), java.awt.BorderLayout.SOUTH);
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getCenterPanel()
+ {
+ if ( centerPanel == null )
+ {
+ GridBagConstraints gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints.gridy = 0;
+ gridBagConstraints.weightx = 1.0;
+ gridBagConstraints.weighty = 1.0;
+ gridBagConstraints.insets = new java.awt.Insets(10,10,10,10);
+ gridBagConstraints.gridx = 0;
+ centerPanel = new JPanel();
+ centerPanel.setLayout(new GridBagLayout());
+ centerPanel.add(getJScrollPane(), gridBagConstraints);
+ }
+ return centerPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel1
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getSouthPanel()
+ {
+ if ( southPanel == null )
+ {
+ southPanel = new JPanel();
+ southPanel.add(getRemoveButton(), null);
+ }
+ return southPanel;
+ }
+
+
+ /**
+ * This method initializes jButton
+ *
+ * @return javax.swing.JButton
+ */
+ private JButton getRemoveButton()
+ {
+ if ( removeButton == null )
+ {
+ removeButton = new JButton();
+ removeButton.setText("Remove");
+ removeButton.setToolTipText("Remove the link to the dependent object");
+ removeButton.addActionListener( new java.awt.event.ActionListener()
+ {
+ public void actionPerformed( java.awt.event.ActionEvent e )
+ {
+ String msg = UiUtils.wrap( "Removing dependency relationships will effect " +
+ "entities other than this permission. You cannot automatically revert from operation. " +
+ "Would you like to continue?", 79 );
+ int response = JOptionPane.showOptionDialog( PermissionDependentsPanel.this, msg,
+ "Irreverable operation!", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
+ null, null, null );
+ if ( response == JOptionPane.NO_OPTION )
+ {
+ return;
+ }
+
+ int[] selectedRows = dependentsTable.getSelectedRows();
+ Set removed = new HashSet();
+ for ( int ii = 0; ii < selectedRows.length; ii++ )
+ {
+ DefaultMutableTreeNode dependentNode =
+ ( DefaultMutableTreeNode ) dependents.get( selectedRows[ii] );
+ Object dependent = dependentNode.getUserObject();
+ try
+ {
+ if ( dependent instanceof Role )
+ {
+ Role role = ( Role ) dependent;
+ dependentNode.setUserObject( role.modifier()
+ .removeGrant( permission.getName() ).modify() );
+ removed.add( dependentNode );
+ }
+ else if ( dependent instanceof Profile )
+ {
+ Profile profile = ( Profile ) dependent;
+ dependentNode.setUserObject( profile.modifier().removeDenial( permission.getName() )
+ .removeGrant( permission.getName() ).modify() );
+ removed.add( dependentNode );
+ }
+ }
+ catch ( DataAccessException dae )
+ {
+ msg = UiUtils.wrap( "Failed to remove all dependency relationships for permission: "
+ + dae.getMessage(), 79 );
+ JOptionPane.showMessageDialog( PermissionDependentsPanel.this, msg,
+ "Dependency removal failure!", JOptionPane.ERROR_MESSAGE );
+ }
+ }
+
+ for ( Iterator ii = removed.iterator(); ii.hasNext(); /**/ )
+ {
+ dependents.remove( ii.next() );
+ }
+
+ if ( removed.size() > 0 )
+ {
+ dependencyModel.fireTableDataChanged();
+ }
+ }
+ } );
+ }
+ return removeButton;
+ }
+
+
+ /**
+ * This method initializes jScrollPane
+ *
+ * @return javax.swing.JScrollPane
+ */
+ private JScrollPane getJScrollPane()
+ {
+ if ( jScrollPane == null )
+ {
+ jScrollPane = new JScrollPane();
+ jScrollPane.setViewportView(getDependentsTable());
+ }
+ return jScrollPane;
+ }
+
+
+ /**
+ * This method initializes jTable
+ *
+ * @return javax.swing.JTable
+ */
+ private JTable getDependentsTable()
+ {
+ if ( dependentsTable == null )
+ {
+ dependentsTable = new JTable();
+ dependentsTable.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ dependentsTable.setToolTipText("Permission dependents");
+ dependencyModel = new DependencyModel();
+ dependentsTable.setModel( dependencyModel );
+ dependentsTable.setShowGrid(true);
+ }
+ return dependentsTable;
+ }
+
+
+ class DependencyModel extends AbstractTableModel
+ {
+ private static final long serialVersionUID = 5348529870374118604L;
+ private final String[] COLNAMES = new String[] { "Type", "Name/Id", "Nature" };
+
+
+ public String getColumnName( int columnIndex )
+ {
+ return COLNAMES[columnIndex];
+ }
+
+ public int getRowCount()
+ {
+ return dependents.size();
+ }
+
+ public int getColumnCount()
+ {
+ return 3;
+ }
+
+ public Object getValueAt( int rowIndex, int columnIndex )
+ {
+ Object dependent = ( ( DefaultMutableTreeNode ) dependents.get( rowIndex ) ).getUserObject();
+ if ( dependent instanceof Role )
+ {
+ switch( columnIndex )
+ {
+ case ( 0 ):
+ return "Role";
+ case ( 1 ):
+ return dependent;
+ case ( 2 ):
+ return "grant";
+ default:
+ throw new IndexOutOfBoundsException( "Only 3 columns present so columnIndex is invalid: "
+ + columnIndex );
+ }
+ }
+ else if ( dependent instanceof Profile )
+ {
+ switch( columnIndex )
+ {
+ case ( 0 ):
+ return "Profile";
+ case ( 1 ):
+ return dependent;
+ case ( 2 ):
+ Profile profile = ( Profile ) dependent;
+ Set grants = profile.getGrants();
+ Set denials = profile.getDenials();
+ // odd case to have permission in both grants and denials of role but it's possible
+ if ( grants.contains( permission.getName() ) && denials.contains( permission.getName() ) )
+ {
+ return "both";
+ }
+ else if ( grants.contains( permission.getName() ) )
+ {
+ return "grant";
+ }
+ else
+ {
+ return "denial";
+ }
+ default:
+ throw new IndexOutOfBoundsException( "Only 3 columns present so columnIndex is invalid: "
+ + columnIndex );
+ }
+ }
+ else
+ {
+ throw new IllegalStateException( "Only expecting Role and Profile dependents for Permissions not "
+ + dependent.getClass() );
+ }
+ }
+ }
+} // @jve:decl-index=0:visual-constraint="10,10"
Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/PermissionPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,579 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.safehaus.triplesec.admin.swing;
+
+
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JButton;
+import javax.swing.JTree;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import javax.swing.JTextField;
+import javax.swing.JTextArea;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.Permission;
+import org.safehaus.triplesec.admin.PermissionModifier;
+
+
+public class PermissionPanel extends JPanel
+{
+ private static final long serialVersionUID = 1L;
+ private JPanel mainPanel = null;
+ private JPanel buttonPanel = null;
+ private JButton revertButton = null;
+ private JButton saveButton = null;
+ private JPanel aboveButtonPanel = null;
+ private JPanel northPanel = null;
+ private JTabbedPane centerTabbedPane = null;
+ private JPanel southPanel = null;
+ private GeneralPanel generalPanel = null;
+ private JLabel iconLabel = null;
+ private JPanel jPanel = null;
+ private JTextArea descriptionTextArea = null;
+ private JPanel jPanel4 = null;
+ private PermissionDependentsPanel permissionDependentsPanel;
+
+
+ /**
+ * This is the default constructor
+ */
+ public PermissionPanel()
+ {
+ super();
+ initialize();
+ }
+
+
+ /**
+ * This method initializes this
+ *
+ * @return void
+ */
+ private void initialize()
+ {
+ GridBagConstraints gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.weightx = 1.0D;
+ gridBagConstraints.weighty = 1.0D;
+ gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints.insets = new java.awt.Insets( 10, 10, 10, 10 );
+ gridBagConstraints.gridy = 0;
+ this.setLayout( new GridBagLayout() );
+ this.setSize( 550, 417 );
+ this.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "Existing Permission",
+ javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
+ null, null ) );
+ this.add( getMainPanel(), gridBagConstraints );
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getMainPanel()
+ {
+ if ( mainPanel == null )
+ {
+ mainPanel = new JPanel();
+ mainPanel.setLayout( new BorderLayout() );
+ mainPanel.add( getButtonPanel(), java.awt.BorderLayout.SOUTH );
+ mainPanel.add( getAboveButtonPanel(), java.awt.BorderLayout.CENTER );
+ }
+ return mainPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getButtonPanel()
+ {
+ if ( buttonPanel == null )
+ {
+ buttonPanel = new JPanel();
+ buttonPanel.setBorder( javax.swing.BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
+ buttonPanel.add(getDeleteButton(), null);
+ buttonPanel.add(getRevertButton(), null);
+ buttonPanel.add(getSaveButton(), null);
+ }
+ return buttonPanel;
+ }
+
+
+ /**
+ * This method initializes jButton
+ *
+ * @return javax.swing.JButton
+ */
+ private JButton getRevertButton()
+ {
+ if ( revertButton == null )
+ {
+ revertButton = new JButton();
+ revertButton.setText( "Revert" );
+ revertButton.addActionListener( new java.awt.event.ActionListener()
+ {
+ public void actionPerformed( java.awt.event.ActionEvent e )
+ {
+ setPermissionFields();
+ }
+ } );
+ }
+ return revertButton;
+ }
+
+
+ /**
+ * This method initializes jButton
+ *
+ * @return javax.swing.JButton
+ */
+ private JButton getSaveButton()
+ {
+ if ( saveButton == null )
+ {
+ saveButton = new JButton();
+ saveButton.setText( "Save" );
+ saveButton.addActionListener( new java.awt.event.ActionListener()
+ {
+ public void actionPerformed( java.awt.event.ActionEvent e )
+ {
+ saveAction();
+ }
+ } );
+ }
+ return saveButton;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getAboveButtonPanel()
+ {
+ if ( aboveButtonPanel == null )
+ {
+ aboveButtonPanel = new JPanel();
+ aboveButtonPanel.setLayout( new BorderLayout() );
+ aboveButtonPanel.add( getNorthPanel(), java.awt.BorderLayout.NORTH );
+ aboveButtonPanel.add( getCenterTabbedPane(), java.awt.BorderLayout.CENTER );
+ aboveButtonPanel.add( getSouthPanel(), java.awt.BorderLayout.SOUTH );
+ }
+ return aboveButtonPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getNorthPanel()
+ {
+ if ( northPanel == null )
+ {
+ GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+ gridBagConstraints1.gridx = 1;
+ gridBagConstraints1.weightx = 1.0D;
+ gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
+ gridBagConstraints1.gridheight = 3;
+ gridBagConstraints1.insets = new java.awt.Insets( 0, 10, 0, 10 );
+ gridBagConstraints1.weighty = 1.0D;
+ gridBagConstraints1.gridy = 0;
+ northPanel = new JPanel();
+ northPanel.setLayout( new GridBagLayout() );
+ northPanel.setPreferredSize( new java.awt.Dimension( 179, 68 ) );
+ northPanel.add( getJPanel4(), new GridBagConstraints() );
+ northPanel.add( getJPanel(), gridBagConstraints1 );
+ }
+ return northPanel;
+ }
+
+
+ /**
+ * This method initializes jTabbedPane
+ *
+ * @return javax.swing.JTabbedPane
+ */
+ private JTabbedPane getCenterTabbedPane()
+ {
+ if ( centerTabbedPane == null )
+ {
+ centerTabbedPane = new JTabbedPane();
+ centerTabbedPane.addTab( "General", null, getGeneralPanel(), null );
+ centerTabbedPane.addTab( "Dependents", null, getPermissionDependentsPanel(), null );
+ }
+ return centerTabbedPane;
+ }
+
+
+ private PermissionDependentsPanel getPermissionDependentsPanel()
+ {
+ if ( permissionDependentsPanel == null )
+ {
+ permissionDependentsPanel = new PermissionDependentsPanel();
+ }
+ return permissionDependentsPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getSouthPanel()
+ {
+ if ( southPanel == null )
+ {
+ southPanel = new JPanel();
+ southPanel.setLayout( new BorderLayout() );
+ southPanel.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "Description",
+ javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+ javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null ) );
+ southPanel.add( getDescriptionTextArea(), java.awt.BorderLayout.NORTH );
+ }
+ return southPanel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private GeneralPanel getGeneralPanel()
+ {
+ if ( generalPanel == null )
+ {
+ generalPanel = new GeneralPanel();
+ }
+ return generalPanel;
+ }
+
+
+ /**
+ * This method initializes iconLabel
+ *
+ * @return javax.swing.JLabel
+ */
+ private JLabel getIconLabel()
+ {
+ if ( iconLabel == null )
+ {
+ iconLabel = new JLabel();
+ iconLabel.setIcon( new ImageIcon( getClass().getResource(
+ "/org/safehaus/triplesec/admin/swing/permission2_48x48.png" ) ) );
+ iconLabel.setPreferredSize( new java.awt.Dimension( 48, 48 ) );
+ iconLabel.setText( "" );
+ iconLabel.setVerticalTextPosition( javax.swing.SwingConstants.BOTTOM );
+ iconLabel.setVerticalAlignment( javax.swing.SwingConstants.BOTTOM );
+ iconLabel.setEnabled( true );
+ }
+ return iconLabel;
+ }
+
+
+ /**
+ * This method initializes jPanel
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getJPanel()
+ {
+ if ( jPanel == null )
+ {
+ GridBagConstraints gridBagConstraints15 = new GridBagConstraints();
+ gridBagConstraints15.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints15.gridy = 2;
+ gridBagConstraints15.weightx = 1.0;
+ gridBagConstraints15.gridx = 1;
+ GridBagConstraints gridBagConstraints14 = new GridBagConstraints();
+ gridBagConstraints14.gridx = 0;
+ gridBagConstraints14.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints14.insets = new java.awt.Insets( 0, 0, 0, 5 );
+ gridBagConstraints14.gridy = 2;
+ jLabel2 = new JLabel();
+ jLabel2.setText( "Permission Name:" );
+ jLabel2.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+ GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+ gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints5.gridy = 1;
+ gridBagConstraints5.weightx = 1.0;
+ gridBagConstraints5.insets = new java.awt.Insets( 0, 0, 5, 0 );
+ gridBagConstraints5.gridx = 1;
+ GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+ gridBagConstraints4.gridx = 0;
+ gridBagConstraints4.insets = new java.awt.Insets( 0, 0, 5, 5 );
+ gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints4.gridy = 1;
+ jLabel1 = new JLabel();
+ jLabel1.setText( "Application Name:" );
+ jLabel1.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+ GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+ gridBagConstraints3.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ gridBagConstraints3.gridy = 0;
+ gridBagConstraints3.weightx = 1.0;
+ gridBagConstraints3.insets = new java.awt.Insets( 0, 0, 5, 0 );
+ gridBagConstraints3.gridx = 1;
+ GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+ gridBagConstraints2.insets = new java.awt.Insets( 0, 0, 5, 5 );
+ gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
+ jLabel = new JLabel();
+ jLabel.setText( "Status:" );
+ jLabel.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+ jPanel = new JPanel();
+ jPanel.setLayout( new GridBagLayout() );
+ jPanel.setPreferredSize( new java.awt.Dimension( 131, 88 ) );
+ jPanel.add( jLabel, gridBagConstraints2 );
+ jPanel.add( getStatusTextField(), gridBagConstraints3 );
+ jPanel.add( jLabel1, gridBagConstraints4 );
+ jPanel.add( getApplicationNameTextField(), gridBagConstraints5 );
+ jPanel.add( jLabel2, gridBagConstraints14 );
+ jPanel.add( getPermissionNameTextField(), gridBagConstraints15 );
+ }
+ return jPanel;
+ }
+
+
+ /**
+ * This method initializes jTextArea
+ *
+ * @return javax.swing.JTextArea
+ */
+ private JTextArea getDescriptionTextArea()
+ {
+ if ( descriptionTextArea == null )
+ {
+ descriptionTextArea = new JTextArea();
+ descriptionTextArea.setRows( 3 );
+ }
+ return descriptionTextArea;
+ }
+
+
+ /**
+ * This method initializes jPanel4
+ *
+ * @return javax.swing.JPanel
+ */
+ private JPanel getJPanel4()
+ {
+ if ( jPanel4 == null )
+ {
+ jPanel4 = new JPanel();
+ jPanel4.setBorder( javax.swing.BorderFactory.createEtchedBorder( javax.swing.border.EtchedBorder.RAISED ) );
+ jPanel4.add( getIconLabel(), null );
+ }
+ return jPanel4;
+ }
+
+
+ private void setPermissionFields()
+ {
+ generalPanel.setFields( permission );
+ applicationNameTextField.setText( permission.getApplicationName() );
+ permissionNameTextField.setText( permission.getName() );
+ descriptionTextArea.setText( permission.getDescription() );
+ }
+
+ private JTree tree = null;
+ private Permission permission = null;
+ private DefaultMutableTreeNode node = null;
+ private JLabel jLabel = null;
+ private JTextField statusTextField = null;
+ private JLabel jLabel1 = null;
+ private JTextField applicationNameTextField = null;
+ private JLabel jLabel2 = null;
+ private JTextField permissionNameTextField = null;
+ private JButton deleteButton = null;
+
+
+ public void setTree( JTree tree )
+ {
+ this.tree = tree;
+ }
+
+
+ public void setTreeNode( DefaultMutableTreeNode node )
+ {
+ this.node = node;
+ this.permission = ( Permission ) node.getUserObject();
+ setPermissionFields();
+ this.permissionDependentsPanel.setSelectedNode( node );
+ }
+
+
+ public String noNull( Object obj )
+ {
+ if ( obj == null )
+ {
+ return "";
+ }
+ return obj.toString();
+ }
+
+
+ public DefaultMutableTreeNode getTreeNode()
+ {
+ return node;
+ }
+
+
+ public void saveAction()
+ {
+ PermissionModifier modifier = permission.modifier().setDescription( descriptionTextArea.getText() );
+ if ( modifier.isUpdateNeeded() )
+ {
+ try
+ {
+ permission = modifier.modify();
+ }
+ catch ( DataAccessException e )
+ {
+ JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to modify permission:\n" + e.getMessage(),
+ 79 ), "Permission modification failure!", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ node.setUserObject( permission );
+ }
+
+ if ( !permission.getName().equals( permissionNameTextField.getText() ) )
+ {
+ try
+ {
+ permission = permission.modifier().rename( permissionNameTextField.getText() );
+ ( ( DefaultTreeModel ) tree.getModel() ).valueForPathChanged( new TreePath( node.getPath() ),
+ permission );
+ }
+ catch ( DataAccessException e )
+ {
+ JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to rename permission:\n" + e.getMessage(),
+ 79 ), "Permission rename failure!", JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ }
+
+ node.setUserObject( permission );
+ setPermissionFields();
+ }
+
+
+ /**
+ * This method initializes jTextField
+ *
+ * @return javax.swing.JTextField
+ */
+ private JTextField getStatusTextField()
+ {
+ if ( statusTextField == null )
+ {
+ statusTextField = new JTextField();
+ statusTextField.setEditable( false );
+ }
+ return statusTextField;
+ }
+
+
+ /**
+ * This method initializes jTextField1
+ *
+ * @return javax.swing.JTextField
+ */
+ private JTextField getApplicationNameTextField()
+ {
+ if ( applicationNameTextField == null )
+ {
+ applicationNameTextField = new JTextField();
+ applicationNameTextField.setEditable( false );
+ }
+ return applicationNameTextField;
+ }
+
+
+ /**
+ * This method initializes jTextField2
+ *
+ * @return javax.swing.JTextField
+ */
+ private JTextField getPermissionNameTextField()
+ {
+ if ( permissionNameTextField == null )
+ {
+ permissionNameTextField = new JTextField();
+ }
+ return permissionNameTextField;
+ }
+
+
+ /**
+ * This method initializes jButton
+ *
+ * @return javax.swing.JButton
+ */
+ private JButton getDeleteButton()
+ {
+ if ( deleteButton == null )
+ {
+ deleteButton = new JButton();
+ deleteButton.setText("Delete");
+ deleteButton.addActionListener( new java.awt.event.ActionListener()
+ {
+ public void actionPerformed( java.awt.event.ActionEvent e )
+ {
+ try
+ {
+ permission.modifier().delete();
+ DefaultMutableTreeNode parentNode = ( DefaultMutableTreeNode ) node.getParent();
+ DefaultTreeModel treeModel = ( DefaultTreeModel ) tree.getModel();
+ treeModel.removeNodeFromParent( node );
+ TreePath path = new TreePath( parentNode.getPath() );
+ tree.setSelectionPaths( new TreePath[] { path } );
+ }
+ catch ( DataAccessException e1 )
+ {
+ JOptionPane.showMessageDialog( PermissionPanel.this,
+ "Failed to delete permission: " + e1.getMessage(), "Delete Failed",
+ JOptionPane.ERROR_MESSAGE );
+ }
+ }
+ } );
+ }
+ return deleteButton;
+ }
+
+} // @jve:decl-index=0:visual-constraint="10,10"