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 [34/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/UserDependentsPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserDependentsPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserDependentsPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserDependentsPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,408 @@
+/*
+ *  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 javax.swing.JTree;
+
+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 javax.swing.tree.DefaultTreeModel;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.Group;
+import org.safehaus.triplesec.admin.GroupModifier;
+import org.safehaus.triplesec.admin.Profile;
+import org.safehaus.triplesec.admin.User;
+
+
+public class UserDependentsPanel 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 User user;
+    private DependencyModel dependencyModel = null;
+    private JTree tree;
+    
+
+    /**
+     * This is the default constructor
+     */
+    public UserDependentsPanel()
+    {
+        super();
+        initialize();
+    }
+
+
+    public void setSelectedNode( DefaultMutableTreeNode node, JTree tree )
+    {
+        this.tree = tree;
+        this.user = ( User ) node.getUserObject();
+        this.dependents.clear();
+        
+        if ( node == null || node.getParent() == null || node.getParent().getParent() == null )
+        {
+            return;
+        }
+
+        // -------------------------------------------------------------------
+        // Find the "Groups" and "Applications" nodes
+        // -------------------------------------------------------------------
+
+        DefaultMutableTreeNode rootNode = ( DefaultMutableTreeNode ) node.getParent().getParent();
+        DefaultMutableTreeNode groupsNode = null;
+        DefaultMutableTreeNode applicationsNode = null;
+        for ( Enumeration ii = rootNode.children(); ii.hasMoreElements(); /**/ )
+        {
+            DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+            if ( "Groups".equals( child.getUserObject() ) )
+            {
+                groupsNode = child;
+            }
+            if ( "Applications".equals( child.getUserObject() ) )
+            {
+                applicationsNode = child;
+            }
+        }
+        
+        // -------------------------------------------------------------------
+        // Find the group dependents
+        // -------------------------------------------------------------------
+        
+        for ( Enumeration ii = groupsNode.children(); ii.hasMoreElements(); /**/ )
+        {
+            DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+            Group group = ( Group ) child.getUserObject();
+            if ( group.getMembers().contains( user.getId() ) )
+            {
+                dependents.add( child );
+            }
+        }
+
+        // -------------------------------------------------------------------
+        // Find the profile dependents
+        // -------------------------------------------------------------------
+        
+        for ( Enumeration ii = applicationsNode.children(); ii.hasMoreElements(); /**/ )
+        {
+            DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+            findDependentProfiles( child );
+        }
+        
+        dependencyModel.fireTableDataChanged();
+    }
+    
+    
+    private void findDependentProfiles( DefaultMutableTreeNode applicationNode )
+    {
+        DefaultMutableTreeNode profilesNode = null;
+        for ( Enumeration ii = applicationNode.children(); ii.hasMoreElements(); /**/ )
+        {
+            DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+            if ( "Profiles".equals( child.getUserObject() ) )
+            {
+                profilesNode = child;
+                break;
+            }
+        }
+        
+        for ( Enumeration ii = profilesNode.children(); ii.hasMoreElements(); /**/ )
+        {
+            DefaultMutableTreeNode child = ( DefaultMutableTreeNode ) ii.nextElement();
+            Profile profile = ( Profile ) child.getUserObject();
+            if ( profile.getUser().equals( user.getId() ) )
+            {
+                dependents.add( child );
+            }
+        }
+    }
+    
+    
+    /**
+     * 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 user.  User profiles for one will be deleted.  Group " +
+                            "membership will be effected.  You cannot automatically revert from this operation.  " +
+                            "Would you like to continue?", 79 );
+                    int response = JOptionPane.showOptionDialog( UserDependentsPanel.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
+                        {
+                            DefaultTreeModel model =( DefaultTreeModel )  tree.getModel();
+                            if ( dependent instanceof Group )
+                            {
+                                Group group = ( Group ) dependent;
+                                if ( group.getMembers().size() == 1 )
+                                {
+                                    group.modifier().delete();
+                                    model.removeNodeFromParent( dependentNode );
+                                }
+                                else
+                                {
+                                    GroupModifier modifier = group.modifier().removeMember( user.getId() );
+                                    dependentNode.setUserObject( modifier.modify() );
+                                }
+                                removed.add( dependentNode );
+                            }
+                            else if ( dependent instanceof Profile )
+                            {
+                                Profile profile = ( Profile ) dependent;
+                                profile.modifier().delete();
+                                removed.add( dependentNode );
+                                model.removeNodeFromParent( dependentNode );
+                            }
+                        }
+                        catch ( DataAccessException dae )
+                        {
+                            msg = UiUtils.wrap( "Failed to remove all dependency relationships for user: "
+                                + dae.getMessage(), 79 );
+                            JOptionPane.showMessageDialog( UserDependentsPanel.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", "Application", "Nature" };
+
+
+        public String getColumnName( int columnIndex )
+        {
+            return COLNAMES[columnIndex];
+        }
+        
+        public int getRowCount()
+        {
+            return dependents.size();
+        }
+
+        public int getColumnCount()
+        {
+            return 4;
+        }
+
+        public Object getValueAt( int rowIndex, int columnIndex )
+        {
+            Object dependent = ( ( DefaultMutableTreeNode ) dependents.get( rowIndex ) ).getUserObject();
+            if ( dependent instanceof Group )
+            {
+                switch( columnIndex )
+                {
+                    case ( 0 ):
+                        return "Group";
+                    case ( 1 ):
+                        return dependent;
+                    case ( 2 ):
+                        return "N/A";
+                    case ( 3 ):
+                        return "Membership";
+                    default:
+                        throw new IndexOutOfBoundsException( "Only 4 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;
+                        return profile.getApplicationName();
+                    case ( 3 ):
+                        return "Ownership";
+                    default:
+                        throw new IndexOutOfBoundsException( "Only 4 columns present so columnIndex is invalid: "
+                            + columnIndex );
+                }
+            }
+            else
+            {
+                throw new IllegalStateException( "Only expecting Group and Profile dependents for Users not " 
+                    + dependent.getClass() );
+            }
+        }
+    }
+
+
+    public boolean hasDependents()
+    {
+        return dependents.size() > 0;
+    }
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserInfoPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserInfoPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserInfoPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserInfoPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,403 @@
+/*
+ *  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.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+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.User;
+
+
+public class UserInfoPanel extends JPanel implements StatusObject, FocusListener, KeyListener
+{
+    private static final long serialVersionUID = 1L;
+    private JTextField firstNameTextField = null;
+    private JTextField lastNameTextField = null;
+    private JPasswordField passwordField = null;
+    private JTextField realmTextField = null;
+    private JLabel jLabel = null;
+    private JPasswordField confirmField = null;
+    private User user;
+    private StatusListener listener;
+    private boolean lastStatusState = true;  // true = up to date, false means it was not up to date
+    private boolean newEntityMode = false;
+    
+    
+    /**
+     * This is the default constructor
+     */
+    public UserInfoPanel()
+    {
+        super();
+        initialize();
+    }
+    
+    
+    public void setNewEntityMode( boolean newEntityMode )
+    {
+        this.newEntityMode = newEntityMode;
+    }
+    
+    
+    public void setStatusListener( StatusListener listener ) 
+    {
+        this.listener = listener;
+    }
+    
+    
+    public void setFields( HauskeysUser hauskeysUser )
+    {
+        this.user = hauskeysUser;
+        this.lastStatusState = true;
+        firstNameTextField.setText( hauskeysUser.getFirstName() );
+        lastNameTextField.setText( hauskeysUser.getLastName() );
+        passwordField.setText( hauskeysUser.getPassword() );
+        confirmField.setText( hauskeysUser.getPassword() );
+        realmTextField.setText( hauskeysUser.getRealm() );
+    }
+
+
+    public void setFields( LocalUser localUser, String realm )
+    {
+        this.user = localUser;
+        this.lastStatusState = true;
+        firstNameTextField.setText( localUser.getFirstName() );
+        lastNameTextField.setText( localUser.getLastName() );
+        passwordField.setText( localUser.getPassword() );
+        confirmField.setText( localUser.getPassword() );
+        realmTextField.setText( realm );
+    }
+
+
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize()
+    {
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints1.gridy = 3;
+        gridBagConstraints1.weightx = 1.0;
+        gridBagConstraints1.insets = new java.awt.Insets(0,0,5,5);
+        gridBagConstraints1.gridx = 1;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.insets = new java.awt.Insets(0,5,5,5);
+        gridBagConstraints.gridy = 3;
+        jLabel = new JLabel();
+        jLabel.setText("Password Confirm:");
+        jLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+        this.setSize(577, 272);
+        GridBagConstraints gridBagConstraints32 = new GridBagConstraints();
+        gridBagConstraints32.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints32.gridy = 4;
+        gridBagConstraints32.weightx = 1.0;
+        gridBagConstraints32.insets = new java.awt.Insets( 0, 0, 5, 5 );
+        gridBagConstraints32.gridx = 1;
+        GridBagConstraints gridBagConstraints31 = new GridBagConstraints();
+        gridBagConstraints31.gridx = 0;
+        gridBagConstraints31.insets = new java.awt.Insets( 0, 5, 5, 5 );
+        gridBagConstraints31.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints31.gridy = 4;
+        JLabel jLabel14 = new JLabel();
+        jLabel14.setText( "Realm:" );
+        jLabel14.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+        GridBagConstraints gridBagConstraints30 = new GridBagConstraints();
+        gridBagConstraints30.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints30.gridy = 2;
+        gridBagConstraints30.weightx = 1.0;
+        gridBagConstraints30.insets = new java.awt.Insets( 0, 0, 5, 5 );
+        gridBagConstraints30.gridx = 1;
+        GridBagConstraints gridBagConstraints29 = new GridBagConstraints();
+        gridBagConstraints29.gridx = 0;
+        gridBagConstraints29.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints29.insets = new java.awt.Insets( 0, 5, 5, 5 );
+        gridBagConstraints29.gridy = 2;
+        JLabel jLabel13 = new JLabel();
+        jLabel13.setText( "Password:" );
+        jLabel13.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+        GridBagConstraints gridBagConstraints28 = new GridBagConstraints();
+        gridBagConstraints28.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints28.gridy = 1;
+        gridBagConstraints28.weightx = 1.0;
+        gridBagConstraints28.insets = new java.awt.Insets( 0, 0, 5, 5 );
+        gridBagConstraints28.gridx = 1;
+        GridBagConstraints gridBagConstraints27 = new GridBagConstraints();
+        gridBagConstraints27.gridx = 0;
+        gridBagConstraints27.insets = new java.awt.Insets( 0, 5, 5, 5 );
+        gridBagConstraints27.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints27.gridy = 1;
+        JLabel jLabel12 = new JLabel();
+        jLabel12.setText( "Last Name:" );
+        jLabel12.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+        GridBagConstraints gridBagConstraints26 = new GridBagConstraints();
+        gridBagConstraints26.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints26.gridy = 0;
+        gridBagConstraints26.weightx = 1.0;
+        gridBagConstraints26.insets = new java.awt.Insets( 0, 0, 5, 5 );
+        gridBagConstraints26.gridx = 1;
+        GridBagConstraints gridBagConstraints25 = new GridBagConstraints();
+        gridBagConstraints25.gridx = 0;
+        gridBagConstraints25.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints25.insets = new java.awt.Insets( 0, 5, 5, 5 );
+        gridBagConstraints25.gridy = 0;
+        JLabel jLabel11 = new JLabel();
+        jLabel11.setText( "First Name:" );
+        jLabel11.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+        setLayout( new GridBagLayout() );
+        add( jLabel11, gridBagConstraints25 );
+        add( getFirstNameTextField(), gridBagConstraints26 );
+        add( jLabel12, gridBagConstraints27 );
+        add( getLastNameTextField(), gridBagConstraints28 );
+        add( jLabel13, gridBagConstraints29 );
+        add( getPasswordField(), gridBagConstraints30 );
+        this.add(jLabel14, gridBagConstraints31);
+        this.add(getRealmTextField(), gridBagConstraints32);
+        this.add(jLabel, gridBagConstraints);
+        this.add(getConfirmField(), gridBagConstraints1);
+    }
+
+
+    /**
+     * This method initializes jTextField   
+     *  
+     * @return javax.swing.JTextField   
+     */
+    private JTextField getFirstNameTextField()
+    {
+        if ( firstNameTextField == null )
+        {
+            firstNameTextField = new JTextField();
+            firstNameTextField.addFocusListener( this );
+            firstNameTextField.addKeyListener( this );
+        }
+        return firstNameTextField;
+    }
+
+
+    /**
+     * This method initializes jTextField   
+     *  
+     * @return javax.swing.JTextField   
+     */
+    private JTextField getLastNameTextField()
+    {
+        if ( lastNameTextField == null )
+        {
+            lastNameTextField = new JTextField();
+            lastNameTextField.addFocusListener( this );
+            lastNameTextField.addKeyListener( this );
+        }
+        return lastNameTextField;
+    }
+
+
+    /**
+     * This method initializes jPasswordField   
+     *  
+     * @return javax.swing.JPasswordField   
+     */
+    private JPasswordField getPasswordField()
+    {
+        if ( passwordField == null )
+        {
+            passwordField = new JPasswordField();
+            passwordField.addFocusListener( this );
+            passwordField.addKeyListener( this );
+        }
+        return passwordField;
+    }
+
+
+    /**
+     * This method initializes jTextField   
+     *  
+     * @return javax.swing.JTextField   
+     */
+    private JTextField getRealmTextField()
+    {
+        if ( realmTextField == null )
+        {
+            realmTextField = new JTextField();
+            realmTextField.setEditable( false );
+        }
+        return realmTextField;
+    }
+
+
+    public void alterModifier( HauskeysUserModifier modifier )
+    {
+        modifier.setFirstName( firstNameTextField.getText() );
+        modifier.setLastName( lastNameTextField.getText() );
+        modifier.setPassword( new String( passwordField.getPassword() ) );
+    }
+
+
+    public void alterModifier( LocalUserModifier modifier )
+    {
+        modifier.setFirstName( firstNameTextField.getText() );
+        modifier.setLastName( lastNameTextField.getText() );
+        modifier.setPassword( new String( passwordField.getPassword() ) );
+    }
+
+
+    public String getFirstName()
+    {
+        return firstNameTextField.getText();
+    }
+    
+    
+    public String getLastName()
+    {
+        return lastNameTextField.getText();
+    }
+    
+    
+    public String getPassword()
+    {
+        return new String( passwordField.getPassword() );
+    }
+    
+    
+    public String getPasswordConfirm()
+    {
+        return new String( confirmField.getPassword() );
+    }
+    
+    
+    public boolean isPasswordOk()
+    {
+        if ( passwordField.getPassword() == null || confirmField.getPassword() == null )
+        {
+            return false;
+        }
+        String password = new String( passwordField.getPassword() );
+        String confirm = new String( confirmField.getPassword() );
+        return password.equals( confirm );
+    }
+    
+    
+    public String getRealm()
+    {
+        return realmTextField.getText();
+    }
+
+
+    /**
+     * This method initializes jPasswordField	
+     * 	
+     * @return javax.swing.JPasswordField	
+     */
+    private JPasswordField getConfirmField()
+    {
+        if ( confirmField == null )
+        {
+            confirmField = new JPasswordField();
+            confirmField.addFocusListener( this );
+            confirmField.addKeyListener( this );
+        }
+        return confirmField;
+    }
+
+    
+    public boolean isUpToDate()
+    {
+        if ( newEntityMode )
+        {
+            return UiUtils.isFieldUpToDate( firstNameTextField, null ) &&
+            UiUtils.isFieldUpToDate( lastNameTextField, null ) &&
+            UiUtils.isFieldUpToDate( passwordField, null ) &&
+            UiUtils.isFieldUpToDate( confirmField, null );
+        }
+
+        if ( user instanceof LocalUser )
+        {
+            LocalUser lu = ( LocalUser ) user;
+            return UiUtils.isFieldUpToDate( firstNameTextField, lu.getFirstName() ) &&
+                UiUtils.isFieldUpToDate( lastNameTextField, lu.getLastName() ) &&
+                UiUtils.isFieldUpToDate( passwordField, lu.getPassword() ) &&
+                UiUtils.isFieldUpToDate( confirmField, lu.getPassword() );
+        }
+
+        HauskeysUser hu = ( HauskeysUser ) user;
+        return UiUtils.isFieldUpToDate( firstNameTextField, hu.getFirstName() ) &&
+            UiUtils.isFieldUpToDate( lastNameTextField, hu.getLastName() ) &&
+            UiUtils.isFieldUpToDate( passwordField, hu.getPassword() ) &&
+            UiUtils.isFieldUpToDate( confirmField, hu.getPassword() );
+    }
+
+    
+    private void checkStatus()
+    {
+        boolean upToDate = isUpToDate();
+        if ( listener != null && lastStatusState != upToDate )
+        {
+            listener.statusChanged( UserInfoPanel.this );
+            lastStatusState = upToDate;
+        }
+    }
+
+    
+    public void focusGained( FocusEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void focusLost( FocusEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void keyTyped( KeyEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void keyPressed( KeyEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void keyReleased( KeyEvent e )
+    {
+        checkStatus();
+    }
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserNorthPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserNorthPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserNorthPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserNorthPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,473 @@
+/*
+ *  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.Color;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+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.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.safehaus.triplesec.admin.ExternalUser;
+import org.safehaus.triplesec.admin.HauskeysUser;
+import org.safehaus.triplesec.admin.LocalUser;
+import org.safehaus.triplesec.admin.User;
+
+
+public class UserNorthPanel extends JPanel implements StatusObject, FocusListener, KeyListener
+{
+    private static final long serialVersionUID = 7996658370769939502L;
+
+
+    private ImageIcon localUserIcon = new ImageIcon( getClass().getResource(
+        "/org/safehaus/triplesec/admin/swing/local_user_48x48.png" ) );
+    private ImageIcon externalUserIcon = new ImageIcon( getClass().getResource(
+        "/org/safehaus/triplesec/admin/swing/external_user_48x48.png" ) );
+    private ImageIcon hauskeysUserIcon = new ImageIcon( getClass().getResource(
+        "/org/safehaus/triplesec/admin/swing/hauskeys_user_48x48.png" ) );
+    private JLabel iconLabel = null;
+    
+    private ButtonGroup userTypeButtonGroup;
+    private JPanel jPanel = null;
+    private JPanel jPanel4 = null;
+    private JLabel jLabel = null;
+    private JLabel jLabel1 = null;
+    private JTextField statusTextField = null;
+    private JLabel jLabel2 = null;
+    private JTextField userIdTextField = null;
+    private JPanel jPanel3 = null;
+    private JRadioButton externalUserRadioButton = null;
+    private JRadioButton localUserRadioButton = null;
+    private JRadioButton hauskeysUserRadioButton = null;
+    private User user;
+    private boolean lastStatusState = true;
+    private StatusListener listener;
+    private boolean newEnityMode = false;
+
+    
+    /**
+     * This is the default constructor
+     */
+    public UserNorthPanel()
+    {
+        super();
+        initialize();
+    }
+
+    
+    public void setNewEntityMode( boolean newEntityMode )
+    {
+        this.newEnityMode = newEntityMode;
+    }
+    
+    
+    public void setStatusListener( StatusListener listener )
+    {
+        this.listener = listener;
+    }
+    
+    
+    public void setStatus( Color color, String msg )
+    {
+        statusTextField.setForeground( color );
+        statusTextField.setText( msg );
+    }
+    
+    
+    public String getId()
+    {
+        return userIdTextField.getText();
+    }
+    
+
+    public void setFields( User user )
+    {
+        this.user = user;
+        this.lastStatusState = true;
+        userIdTextField.setText( user.getId() );
+        
+        if ( user instanceof ExternalUser )
+        {
+            iconLabel.setIcon( externalUserIcon );
+            userTypeButtonGroup.setSelected( externalUserRadioButton.getModel(), true );
+        }
+        else if ( user instanceof LocalUser )
+        {
+            iconLabel.setIcon( localUserIcon );
+            userTypeButtonGroup.setSelected( localUserRadioButton.getModel(), true );
+        }
+        else if ( user instanceof HauskeysUser )
+        {
+            iconLabel.setIcon( hauskeysUserIcon );
+            userTypeButtonGroup.setSelected( hauskeysUserRadioButton.getModel(), true );
+        }
+        else
+        {
+            throw new IllegalArgumentException( "Unknown user type: " + user.getClass() );
+        }
+    }
+
+    
+    public boolean isExternalUserSelected()
+    {
+        return externalUserRadioButton.isSelected();
+    }
+    
+    
+    public boolean isHauskeysUserSelected()
+    {
+        return hauskeysUserRadioButton.isSelected();
+    }
+    
+    
+    public boolean isLocalUserSelected()
+    {
+        return localUserRadioButton.isSelected();
+    }
+    
+    
+    public void addActionListener( ActionListener listener )
+    {
+        externalUserRadioButton.addActionListener( listener );
+        localUserRadioButton.addActionListener( listener );
+        hauskeysUserRadioButton.addActionListener( listener );
+    }
+    
+    
+    /**
+     * This method initializes this
+     * 
+     * @return void
+     */
+    private void initialize()
+    {
+        this.setSize(724, 119);
+        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;
+        setLayout( new GridBagLayout() );
+        setPreferredSize( new java.awt.Dimension( 179, 68 ) );
+        add( getJPanel4(), new GridBagConstraints() );
+        add( getJPanel(), gridBagConstraints1 );
+    }
+
+
+    /**
+     * This method initializes jPanel   
+     *  
+     * @return javax.swing.JPanel   
+     */
+    private JPanel getJPanel()
+    {
+        if ( jPanel == null )
+        {
+            GridBagConstraints gridBagConstraints14 = new GridBagConstraints();
+            gridBagConstraints14.gridx = 1;
+            gridBagConstraints14.insets = new java.awt.Insets( 0, 5, 0, 0 );
+            gridBagConstraints14.fill = java.awt.GridBagConstraints.BOTH;
+            gridBagConstraints14.gridy = 2;
+            GridBagConstraints gridBagConstraints15 = new GridBagConstraints();
+            gridBagConstraints15.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            gridBagConstraints15.gridy = 1;
+            gridBagConstraints15.weightx = 1.0;
+            gridBagConstraints15.insets = new java.awt.Insets( 0, 0, 0, 0 );
+            gridBagConstraints15.gridx = 1;
+            GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+            gridBagConstraints3.gridx = 0;
+            gridBagConstraints3.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            gridBagConstraints3.insets = new java.awt.Insets( 0, 0, 5, 5 );
+            gridBagConstraints3.gridy = 1;
+            jLabel2 = new JLabel();
+            jLabel2.setText( "User Id:" );
+            jLabel2.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+            GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+            gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            gridBagConstraints5.gridy = 0;
+            gridBagConstraints5.weightx = 1.0;
+            gridBagConstraints5.insets = new java.awt.Insets( 0, 0, 5, 0 );
+            gridBagConstraints5.gridx = 1;
+            GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+            gridBagConstraints4.insets = new java.awt.Insets( 0, 0, 5, 5 );
+            gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+            gridBagConstraints2.gridx = 0;
+            gridBagConstraints2.insets = new java.awt.Insets( 0, 0, 0, 5 );
+            gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            gridBagConstraints2.gridy = 2;
+            jLabel1 = new JLabel();
+            jLabel1.setText( "User Type:" );
+            jLabel1.setHorizontalAlignment( javax.swing.SwingConstants.RIGHT );
+            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, gridBagConstraints4 );
+            jPanel.add( jLabel1, gridBagConstraints2 );
+            jPanel.add( getStatusTextField(), gridBagConstraints5 );
+            jPanel.add( jLabel2, gridBagConstraints3 );
+            jPanel.add( getUserIdTextField(), gridBagConstraints15 );
+            jPanel.add( getJPanel3(), gridBagConstraints14 );
+        }
+        return jPanel;
+    }
+
+
+    /**
+     * 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;
+    }
+
+
+    /**
+     * 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 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/local_user_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 jTextField   
+     *  
+     * @return javax.swing.JTextField   
+     */
+    private JTextField getUserIdTextField()
+    {
+        if ( userIdTextField == null )
+        {
+            userIdTextField = new JTextField();
+            userIdTextField.addFocusListener( this );
+            userIdTextField.addKeyListener( this );
+        }
+        return userIdTextField;
+    }
+
+
+    private void checkStatus()
+    {
+        boolean upToDate = isUpToDate();
+        if ( listener != null && lastStatusState != upToDate )
+        {
+            listener.statusChanged( UserNorthPanel.this );
+            lastStatusState = upToDate;
+        }
+    }
+    
+    
+    /**
+     * This method initializes jPanel3  
+     *  
+     * @return javax.swing.JPanel   
+     */
+    private JPanel getJPanel3()
+    {
+        if ( jPanel3 == null )
+        {
+            FlowLayout flowLayout = new FlowLayout();
+            flowLayout.setAlignment( java.awt.FlowLayout.LEFT );
+            jPanel3 = new JPanel();
+            jPanel3.setLayout( flowLayout );
+            jPanel3.setPreferredSize( new java.awt.Dimension( 333, 20 ) );
+            jPanel3.add( getExternalUserRadioButton(), null );
+            jPanel3.add( getLocalUserRadioButton(), null );
+            jPanel3.add( getHauskeysUserRadioButton(), null );
+            userTypeButtonGroup = new ButtonGroup();
+            userTypeButtonGroup.add( getExternalUserRadioButton() );
+            userTypeButtonGroup.add( getLocalUserRadioButton() );
+            userTypeButtonGroup.add( getHauskeysUserRadioButton() );
+        }
+        return jPanel3;
+    }
+
+
+    /**
+     * This method initializes jRadioButton 
+     *  
+     * @return javax.swing.JRadioButton 
+     */
+    private JRadioButton getExternalUserRadioButton()
+    {
+        if ( externalUserRadioButton == null )
+        {
+            externalUserRadioButton = new JRadioButton();
+            externalUserRadioButton.setText( "External User" );
+            externalUserRadioButton.setPreferredSize( new java.awt.Dimension( 107, 16 ) );
+        }
+        return externalUserRadioButton;
+    }
+
+
+    /**
+     * This method initializes jRadioButton1    
+     *  
+     * @return javax.swing.JRadioButton 
+     */
+    private JRadioButton getLocalUserRadioButton()
+    {
+        if ( localUserRadioButton == null )
+        {
+            localUserRadioButton = new JRadioButton();
+            localUserRadioButton.setText( "Local User" );
+            localUserRadioButton.setPreferredSize( new java.awt.Dimension( 89, 16 ) );
+        }
+        return localUserRadioButton;
+    }
+
+
+    /**
+     * This method initializes jRadioButton2    
+     *  
+     * @return javax.swing.JRadioButton 
+     */
+    private JRadioButton getHauskeysUserRadioButton()
+    {
+        if ( hauskeysUserRadioButton == null )
+        {
+            hauskeysUserRadioButton = new JRadioButton();
+            hauskeysUserRadioButton.setText( "Hauskeys User" );
+            hauskeysUserRadioButton.setPreferredSize( new java.awt.Dimension( 117, 16 ) );
+        }
+        return hauskeysUserRadioButton;
+    }
+
+
+    public void setId( String id )
+    {
+        userIdTextField.setText( id );
+    }
+
+
+    public void setStatus( String status )
+    {
+        statusTextField.setText( status );
+    }
+
+
+    public String getStatus()
+    {
+        return statusTextField.getText();
+    }
+
+
+    public void setIcon( ImageIcon icon )
+    {
+        iconLabel.setIcon( icon );
+    }
+
+
+    public boolean isUpToDate()
+    {
+        if ( newEnityMode )
+        {
+            return UiUtils.isFieldUpToDate( userIdTextField, null );
+        }
+        return UiUtils.isFieldUpToDate( userIdTextField, user.getId() );
+    }
+
+
+    public void focusGained( FocusEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void focusLost( FocusEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void keyTyped( KeyEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void keyPressed( KeyEvent e )
+    {
+        checkStatus();
+    }
+
+
+    public void keyReleased( KeyEvent e )
+    {
+        checkStatus();
+    }
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Added: directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserPanel.java
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserPanel.java?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserPanel.java (added)
+++ directory/trunks/triplesec/swing-admin/src/main/java/org/safehaus/triplesec/admin/swing/UserPanel.java Tue Dec 12 07:23:31 2006
@@ -0,0 +1,744 @@
+/*
+ *  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.JOptionPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JButton;
+import javax.swing.JTree;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+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.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.User;
+import javax.swing.JLabel;
+import javax.swing.JCheckBox;
+
+
+public class UserPanel extends JPanel implements StatusListener, StatusObject, KeyListener, FocusListener
+{
+    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 UserNorthPanel userNorthPanel = null;
+    private JTabbedPane centerTabbedPane = null;
+    private JPanel southPanel = null;
+    private JTextArea descriptionTextArea = null;
+    private JButton deleteButton = null;
+    private User user;
+    private DefaultMutableTreeNode node;
+    private JTree tree;
+    private ProvisioningPanel provisioningPanel;
+    private HotpSettingsPanel hotpSettingsPanel;
+    private UserInfoPanel userInfoPanel;
+    private GeneralPanel generalPanel;
+    private ExternalLinkPanel externalLinkPanel;
+    private UserDependentsPanel userDependentsPanel;
+    private boolean lastStatusState = true;
+    private StatusListener listener = this;
+    private AdminFrame adminFrame = null;
+
+    private JLabel jLabel = null;
+
+    private JCheckBox disabledCheckBox = null;
+
+    /**
+     * This is the default constructor
+     */
+    public UserPanel()
+    {
+        super();
+        initialize();
+    }
+    
+    
+    public void setAdminFrame( AdminFrame adminFrame )
+    {
+        this.adminFrame = adminFrame;
+        this.provisioningPanel.setAdminFrame( adminFrame );
+    }
+    
+    
+    /**
+     * 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 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( 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 )
+                {
+                    setUserFields();
+                }
+            } );
+        }
+        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( getUserNorthPanel(), java.awt.BorderLayout.NORTH );
+            aboveButtonPanel.add( getCenterTabbedPane(), java.awt.BorderLayout.CENTER );
+            aboveButtonPanel.add( getSouthPanel(), java.awt.BorderLayout.SOUTH );
+        }
+        return aboveButtonPanel;
+    }
+
+
+    /**
+     * 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( "External Link", null, getExternalLinkPanel(), null );
+            centerTabbedPane.addTab( "User Info", null, getUserInfoPanel(), null );
+            centerTabbedPane.addTab( "Provisioning", null, getProvisioningPanel(), null );
+            centerTabbedPane.addTab( "HOTP Settings", null, getHotpSettingsPanel(), null );
+            centerTabbedPane.addTab( "Dependents", null, getUserDependentsPanel(), null );
+        }
+        return centerTabbedPane;
+    }
+    
+    
+    public UserDependentsPanel getUserDependentsPanel()
+    {
+        if ( userDependentsPanel == null )
+        {
+            userDependentsPanel = new UserDependentsPanel();
+        }
+        return userDependentsPanel;
+    }
+    
+    
+    public UserNorthPanel getUserNorthPanel()
+    {
+        if ( userNorthPanel == null )
+        {
+            userNorthPanel = new UserNorthPanel();
+            userNorthPanel.setStatusListener( this );
+        }
+        
+        return userNorthPanel;
+    }
+
+
+    public GeneralPanel getGeneralPanel()
+    {
+        if ( generalPanel == null )
+        {
+            generalPanel = new GeneralPanel();
+            
+            GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+            gridBagConstraints2.gridx = 1;
+            gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            gridBagConstraints2.gridy = 5;
+            GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+            gridBagConstraints1.gridx = 0;
+            gridBagConstraints1.insets = new java.awt.Insets(0,0,0,5);
+            gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+            gridBagConstraints1.gridy = 5;
+            jLabel = new JLabel();
+            jLabel.setText("Disabled:");
+            jLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+            generalPanel.add(jLabel, gridBagConstraints1);
+            generalPanel.add(getJCheckBox(), gridBagConstraints2);
+            
+        }
+        
+        return generalPanel;
+    }
+
+
+    public ExternalLinkPanel getExternalLinkPanel()
+    {
+        if ( externalLinkPanel == null )
+        {
+            externalLinkPanel = new ExternalLinkPanel();
+            externalLinkPanel.setStatusListener( this );
+        }
+        
+        return externalLinkPanel;
+    }
+
+
+    public ProvisioningPanel getProvisioningPanel()
+    {
+        if ( provisioningPanel == null )
+        {
+            provisioningPanel = new ProvisioningPanel();
+            provisioningPanel.setAdminFrame( this.adminFrame );
+            provisioningPanel.setStatusListener( this );
+        }
+        
+        return provisioningPanel;
+    }
+
+
+    public UserInfoPanel getUserInfoPanel()
+    {
+        if ( userInfoPanel == null )
+        {
+            userInfoPanel = new UserInfoPanel();
+            userInfoPanel.setStatusListener( this );
+        }
+        
+        return userInfoPanel;
+    }
+
+
+    public HotpSettingsPanel getHotpSettingsPanel()
+    {
+        if ( hotpSettingsPanel == null )
+        {
+            hotpSettingsPanel = new HotpSettingsPanel();
+            hotpSettingsPanel.setStatusListener( this );
+        }
+        
+        return hotpSettingsPanel;
+    }
+
+
+    /**
+     * 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.addFocusListener( this );
+            descriptionTextArea.addKeyListener( this );
+        }
+        return descriptionTextArea;
+    }
+
+    
+    public void checkStatus()
+    {
+        boolean upToDate = isUpToDate();
+        if ( listener != null && lastStatusState != upToDate )
+        {
+            listener.statusChanged( UserPanel.this );
+            lastStatusState = upToDate;
+        }
+    }
+    
+    
+    /**
+     * 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 )
+                {
+                    if ( userDependentsPanel.hasDependents() )
+                    {
+                        String msg = UiUtils.wrap( "This user has dependent objects.  Remove all " +
+                                "dependency relationships before attempting to delete this user.", 79 );
+                        JOptionPane.showMessageDialog( UserPanel.this, msg, "User has dependents!", 
+                            JOptionPane.INFORMATION_MESSAGE );
+                        return;
+                    }
+                    
+                    try
+                    {
+                        if ( user instanceof ExternalUser )
+                        {
+                            ( ( ExternalUser ) user ).modifier().delete();
+                        }
+                        else if ( user instanceof LocalUser )
+                        {
+                            ( ( LocalUser ) user ).modifier().delete();
+                        }
+                        else if ( user instanceof HauskeysUser )
+                        {
+                            ( ( HauskeysUser ) user ).modifier().delete();
+                        }
+                        else
+                        {
+                            throw new IllegalStateException( "Unknown user type: " + user.getClass() );
+                        }
+
+                        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 )
+                    {
+                        String msg = UiUtils.wrap( "Failed to delete user: " + e1.getMessage(), 79 );
+                        JOptionPane.showMessageDialog( UserPanel.this, msg, "Delete Failed", JOptionPane.ERROR_MESSAGE );
+                    }
+                }
+            } );
+        }
+        return deleteButton;
+    }
+
+
+    private void setUserFields()
+    {
+        generalPanel.setFields( user );
+        disabledCheckBox.setSelected( user.isDisabled() );
+        userNorthPanel.setFields( user );
+
+        if ( user instanceof ExternalUser )
+        {
+            ExternalUser externalUser = ( ExternalUser ) user;
+            centerTabbedPane.addTab( "External Link", null, externalLinkPanel, null );
+            centerTabbedPane.remove( userInfoPanel );
+            centerTabbedPane.remove( provisioningPanel );
+            centerTabbedPane.remove( hotpSettingsPanel );
+            externalLinkPanel.setFields( externalUser );
+        }
+        else if ( user instanceof LocalUser )
+        {
+            LocalUser localUser = ( LocalUser ) user;
+            centerTabbedPane.remove( externalLinkPanel );
+            centerTabbedPane.remove( provisioningPanel );
+            centerTabbedPane.remove( hotpSettingsPanel );
+            centerTabbedPane.remove( userInfoPanel );
+            centerTabbedPane.addTab( "User Info", null, userInfoPanel, null );
+            userInfoPanel.setFields( localUser, "not implemented" );
+        }
+        else if ( user instanceof HauskeysUser )
+        {
+            HauskeysUser hauskeysUser = ( HauskeysUser ) user;
+            centerTabbedPane.remove( externalLinkPanel );
+            centerTabbedPane.remove( userInfoPanel );
+            centerTabbedPane.addTab( "User Info", null, userInfoPanel, null );
+            centerTabbedPane.addTab( "Provisioning", null, provisioningPanel, null );
+            centerTabbedPane.addTab( "HOTP Settings", null, hotpSettingsPanel, null );
+            userInfoPanel.setFields( hauskeysUser );
+            hotpSettingsPanel.setFields( hauskeysUser );
+            provisioningPanel.setFields( hauskeysUser );
+        }
+
+        descriptionTextArea.setText( user.getDescription() );
+    }
+
+
+    public void setTree( JTree tree )
+    {
+        this.tree = tree;
+    }
+
+
+    public void setTreeNode( DefaultMutableTreeNode node )
+    {
+        this.node = node;
+        this.user = ( User ) node.getUserObject();
+        setUserFields();
+        this.userDependentsPanel.setSelectedNode( node, tree );
+    }
+
+
+    public DefaultMutableTreeNode getTreeNode()
+    {
+        return node;
+    }
+
+
+    public void saveAction( HauskeysUser hauskeysUser )
+    {
+        HauskeysUserModifier modifier = hauskeysUser.modifier().setDescription( descriptionTextArea.getText() );
+        modifier.setDisabled( disabledCheckBox.isSelected() );
+        userInfoPanel.alterModifier( modifier );
+        
+        if ( ! userInfoPanel.isPasswordOk() )
+        {
+            JOptionPane.showMessageDialog( this, "Passwords are not equal or are invalid.  Save aborted!" );
+            return;
+        }
+        
+        hotpSettingsPanel.alterModifier( modifier );
+        provisioningPanel.alterModifier( modifier );
+
+        if ( modifier.isUpdateNeeded() )
+        {
+            try
+            {
+                user = modifier.modify();
+            }
+            catch ( DataAccessException e )
+            {
+                JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to modify user:\n" + e.getMessage(), 79 ),
+                    "User modification failure!", JOptionPane.ERROR_MESSAGE );
+                return;
+            }
+            node.setUserObject( user );
+        }
+
+        if ( !user.getId().equals( userNorthPanel.getId() ) )
+        {
+            try
+            {
+                user = hauskeysUser.modifier().rename( userNorthPanel.getId() );
+                ( ( DefaultTreeModel ) tree.getModel() ).valueForPathChanged( new TreePath( node.getPath() ), user );
+            }
+            catch ( DataAccessException e )
+            {
+                JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to rename user:\n" + e.getMessage(), 79 ),
+                    "User rename failure!", JOptionPane.ERROR_MESSAGE );
+                return;
+            }
+        }
+
+        node.setUserObject( user );
+        setUserFields();
+    }
+
+
+    public void saveAction( LocalUser localUser )
+    {
+        LocalUserModifier modifier = localUser.modifier().setDescription( descriptionTextArea.getText() );
+        modifier.setDisabled( disabledCheckBox.isSelected() );
+        userInfoPanel.alterModifier( modifier );
+        
+        if ( ! userInfoPanel.isPasswordOk() )
+        {
+            JOptionPane.showMessageDialog( this, "Passwords are not equal or are invalid.  Save aborted!" );
+            return;
+        }
+        
+        if ( modifier.isUpdateNeeded() )
+        {
+            try
+            {
+                user = modifier.modify();
+            }
+            catch ( DataAccessException e )
+            {
+                JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to modify user:\n" + e.getMessage(), 79 ),
+                    "User modification failure!", JOptionPane.ERROR_MESSAGE );
+                return;
+            }
+            node.setUserObject( user );
+        }
+
+        if ( !user.getId().equals( userNorthPanel.getId() ) )
+        {
+            try
+            {
+                user = localUser.modifier().rename( userNorthPanel.getId() );
+                ( ( DefaultTreeModel ) tree.getModel() ).valueForPathChanged( new TreePath( node.getPath() ), user );
+            }
+            catch ( DataAccessException e )
+            {
+                JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to rename user:\n" + e.getMessage(), 79 ),
+                    "User rename failure!", JOptionPane.ERROR_MESSAGE );
+                return;
+            }
+        }
+
+        node.setUserObject( user );
+        setUserFields();
+    }
+
+
+    public void saveAction( ExternalUser externalUser )
+    {
+        ExternalUserModifier modifier = externalUser.modifier().setDescription( descriptionTextArea.getText() );
+        modifier.setDisabled( disabledCheckBox.isSelected() );
+        externalLinkPanel.alterModifier( modifier );
+        if ( modifier.isUpdateNeeded() )
+        {
+            try
+            {
+                user = modifier.modify();
+            }
+            catch ( DataAccessException e )
+            {
+                JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to modify user:\n" + e.getMessage(), 79 ),
+                    "User modification failure!", JOptionPane.ERROR_MESSAGE );
+                return;
+            }
+            node.setUserObject( user );
+        }
+
+        if ( !user.getId().equals( userNorthPanel.getId() ) )
+        {
+            try
+            {
+                user = externalUser.modifier().rename( userNorthPanel.getId() );
+                ( ( DefaultTreeModel ) tree.getModel() ).valueForPathChanged( new TreePath( node.getPath() ), user );
+            }
+            catch ( DataAccessException e )
+            {
+                JOptionPane.showMessageDialog( this, UiUtils.wrap( "Failed to rename user:\n" + e.getMessage(), 79 ),
+                    "User rename failure!", JOptionPane.ERROR_MESSAGE );
+                return;
+            }
+        }
+
+        node.setUserObject( user );
+        setUserFields();
+    }
+
+
+    public void saveAction()
+    {
+        if ( user instanceof ExternalUser )
+        {
+            saveAction( ( ExternalUser ) user );
+        }
+        else if ( user instanceof LocalUser )
+        {
+            saveAction( ( LocalUser ) user );
+        }
+        else if ( user instanceof HauskeysUser )
+        {
+            saveAction( ( HauskeysUser ) user );
+        }
+        else
+        {
+            throw new IllegalStateException( "Unknown user type: " + user.getClass() );
+        }
+    }
+
+
+    public void statusChanged( StatusObject obj )
+    {
+        if ( ! obj.isUpToDate() )
+        {
+//            userNorthPanel.setStatus( Color.RED, "Save needed!" );
+            return;
+        }
+        
+        if ( isUpToDate() && userNorthPanel.isUpToDate() && userInfoPanel.isUpToDate() 
+            && provisioningPanel.isUpToDate() && hotpSettingsPanel.isUpToDate() )
+        {
+//            userNorthPanel.setStatus( Color.GREEN, "Up to date!" );
+        }
+    }
+
+
+    public boolean isUpToDate()
+    {
+        return UiUtils.isFieldUpToDate( descriptionTextArea, user.getDescription() );
+    }
+
+
+    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();
+    }
+
+
+    /**
+     * This method initializes jCheckBox	
+     * 	
+     * @return javax.swing.JCheckBox	
+     */
+    private JCheckBox getJCheckBox()
+    {
+        if ( disabledCheckBox == null )
+        {
+            disabledCheckBox = new JCheckBox();
+        }
+        return disabledCheckBox;
+    }
+} //  @jve:decl-index=0:visual-constraint="10,10"

Added: directory/trunks/triplesec/swing-admin/src/main/manifest/MANIFEST.MF
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/manifest/MANIFEST.MF?view=auto&rev=486187
==============================================================================
--- directory/trunks/triplesec/swing-admin/src/main/manifest/MANIFEST.MF (added)
+++ directory/trunks/triplesec/swing-admin/src/main/manifest/MANIFEST.MF Tue Dec 12 07:23:31 2006
@@ -0,0 +1,47 @@
+Manifest-Version: 1.0
+Main-Class: org.safehaus.triplesec.admin.swing.AdminFrame
+Class-Path: logger.jar daemon.jar bootstrapper.jar 
+ ../lib/antlr-2.7.2.jar 
+ ../lib/apacheds-core-1.0-RC3.jar 
+ ../lib/apacheds-core-shared-1.0-RC3.jar 
+ ../lib/apacheds-kerberos-shared-1.0-RC3.jar 
+ ../lib/apacheds-protocol-changepw-1.0-RC3.jar 
+ ../lib/apacheds-protocol-shared-1.0-RC3.jar 
+ ../lib/apacheds-protocol-kerberos-1.0-RC3.jar 
+ ../lib/apacheds-protocol-ldap-1.0-RC3.jar 
+ ../lib/apacheds-protocol-ntp-1.0-RC3.jar 
+ ../lib/apacheds-server-jndi-1.0-RC3.jar 
+ ../lib/apacheds-server-main-1.0-RC3.jar 
+ ../lib/tools/apacheds-server-tools-1.0-RC3.jar 
+ ../lib/tools/commons-cli-1.0.jar 
+ ../lib/commons-collections-3.1.jar 
+ ../lib/commons-lang-2.0.jar 
+ ../lib/commons-logging-1.0.4.jar 
+ ../lib/commons-httpclient-2.0.2.jar 
+ ../lib/activation-1.0.2.jar 
+ ../lib/mail-1.3.2.jar 
+ ../lib/jdbm-1.0.jar 
+ ../lib/lcrypto-jdk14-131.jar 
+ ../lib/mina-core-0.9.4.jar 
+ ../lib/mina-filter-codec-asn1-0.9.4.jar 
+ ../lib/mina-filter-ssl-0.9.4.jar 
+ ../lib/shared-asn1-0.9.5.1.jar 
+ ../lib/shared-ldap-0.9.5.1.jar 
+ ../lib/spring-beans-1.2.6.jar 
+ ../lib/spring-context-1.2.6.jar 
+ ../lib/spring-core-1.2.6.jar 
+ ../guardian/triplesec-guardian-api-0.7.1.jar 
+ ../guardian/triplesec-guardian-ldap-0.7.1.jar 
+ ../guardian/triplesec-jaas-0.7.1.jar 
+ ../lib/triplesec-crypto-0.7.1.jar 
+ ../lib/triplesec-main-0.7.1.jar 
+ ../lib/triplesec-otp-0.7.1.jar 
+ ../lib/triplesec-profile-0.7.1.jar 
+ ../lib/triplesec-store-0.7.1.jar 
+ ../lib/triplesec-testdata-0.7.1.jar 
+ ../lib/triplesec-verifier-0.7.1.jar 
+ ../lib/triplesec-configuration-0.7.1.jar 
+ ../lib/triplesec-admin-api-0.7.1.jar 
+Specification-Title: triplesec-swing-admin
+Specification-Version: 1.0
+

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application2_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application2_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application2_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_48x48.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_48x48.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_48x48.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_container_closed_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_container_closed_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_container_closed_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_container_opened_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_container_opened_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/application_container_opened_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/connect_22x22.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/connect_22x22.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/connect_22x22.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/container_closed_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/container_closed_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/container_closed_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/container_opened_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/container_opened_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/container_opened_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/disconnect_22x22.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/disconnect_22x22.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/disconnect_22x22.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/error_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/error_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/error_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/error_32x32.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/error_32x32.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/error_32x32.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/external_user_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/external_user_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/external_user_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/external_user_48x48.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/external_user_48x48.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/external_user_48x48.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_22x22.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_22x22.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_22x22.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_32x32.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_32x32.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileclose_32x32.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_22x22.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_22x22.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_22x22.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_32x32.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_32x32.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/fileopen_32x32.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_22x22.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_22x22.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_22x22.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_32x32.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_32x32.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/filesave_32x32.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_48x48.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_48x48.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_48x48.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_container_closed_16x16.png
URL: http://svn.apache.org/viewvc/directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_container_closed_16x16.png?view=auto&rev=486187
==============================================================================
Binary file - no diff available.

Propchange: directory/trunks/triplesec/swing-admin/src/main/resources/org/safehaus/triplesec/admin/swing/group_container_closed_16x16.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream