blob: d3d9426c445de7160329374db082c06f51ba2496 [file] [log] [blame]
/*
* 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.apache.directory.server.core.partition.impl.btree.gui;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.naming.directory.Attributes;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Allows for operations on entries.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
public class AddEntryDialog extends JDialog implements ActionListener
{
private static final Logger log = LoggerFactory.getLogger( AddEntryDialog.class );
private static final long serialVersionUID = 3544671793504663604L;
private JPanel m_namePnl = new JPanel();
private JPanel m_attrPnl = new JPanel();
private JPanel m_buttonPnl = new JPanel();
private JPanel m_rdnPnl = new JPanel();
private JPanel m_dnPnl = new JPanel();
private JLabel m_rdnLbl = new JLabel();
private JComboBox m_rdnChoice = new JComboBox();
private JTextField m_dnText = new JTextField();
private JScrollPane m_attrScrollPnl = new JScrollPane();
private JTable m_attrTbl = new JTable();
private JButton m_doneBut = new JButton();
private JButton m_cancelBut = new JButton();
private JPopupMenu m_popup;
private Attributes m_childEntry = new AttributesImpl();
/**
* Creates new entry addition dialog.
*
* @param parent the parent frame
* @param modal whether or not to go modal on the dialog
*/
public AddEntryDialog(Frame parent, boolean modal)
{
super( parent, modal );
m_childEntry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC );
initGUI();
}
/**
* This method is called from within the constructor to initialize the form.
*/
private void initGUI()
{
addWindowListener( new java.awt.event.WindowAdapter()
{
public void windowClosing( java.awt.event.WindowEvent evt )
{
closeDialog();
}
} );
pack();
setBounds( new java.awt.Rectangle( 0, 0, 447, 364 ) );
setTitle( "Add New Entry" );
getContentPane().setLayout( new java.awt.GridBagLayout() );
getContentPane().add(
m_namePnl,
new java.awt.GridBagConstraints( 0, 0, 1, 1, 1.0, 0.0, java.awt.GridBagConstraints.NORTH,
java.awt.GridBagConstraints.HORIZONTAL, new java.awt.Insets( 5, 5, 5, 5 ), 0, 0 ) );
getContentPane().add(
m_attrPnl,
new java.awt.GridBagConstraints( 0, 1, 1, 1, 1.0, 1.0, java.awt.GridBagConstraints.CENTER,
java.awt.GridBagConstraints.BOTH, new java.awt.Insets( 5, 5, 5, 5 ), 0, 0 ) );
getContentPane().add(
m_buttonPnl,
new java.awt.GridBagConstraints( 0, 2, 1, 1, 1.0, 0.05, java.awt.GridBagConstraints.CENTER,
java.awt.GridBagConstraints.HORIZONTAL, new java.awt.Insets( 0, 0, 0, 20 ), 0, 0 ) );
m_namePnl.setBorder( javax.swing.BorderFactory.createTitledBorder( javax.swing.BorderFactory.createLineBorder(
new java.awt.Color( 153, 153, 153 ), 1 ), "Naming", javax.swing.border.TitledBorder.LEADING,
javax.swing.border.TitledBorder.TOP, new java.awt.Font( "SansSerif", 0, 14 ), new java.awt.Color( 60, 60,
60 ) ) );
m_namePnl.setLayout( new javax.swing.BoxLayout( m_namePnl, javax.swing.BoxLayout.Y_AXIS ) );
m_namePnl.add( m_rdnPnl );
m_namePnl.add( m_dnPnl );
m_rdnLbl.setText( "Rdn:" );
m_rdnPnl.setLayout( new java.awt.GridBagLayout() );
m_rdnPnl.add( m_rdnChoice, new java.awt.GridBagConstraints( 1, 0, 1, 1, 1.0, 0.0,
java.awt.GridBagConstraints.WEST, java.awt.GridBagConstraints.NONE, new java.awt.Insets( 0, 10, 0, 0 ), 0,
0 ) );
m_rdnPnl.add( m_rdnLbl, new java.awt.GridBagConstraints( 0, 0, 1, 1, 0.0, 0.0,
java.awt.GridBagConstraints.WEST, java.awt.GridBagConstraints.NONE, new java.awt.Insets( 0, 10, 0, 0 ), 0,
0 ) );
m_dnPnl.setLayout( new java.awt.GridBagLayout() );
m_dnPnl.add( m_dnText, new java.awt.GridBagConstraints( 1, 0, 1, 1, 1.0, 0.0, java.awt.GridBagConstraints.WEST,
java.awt.GridBagConstraints.HORIZONTAL, new java.awt.Insets( 0, 5, 0, 0 ), 0, 0 ) );
m_dnText.setText( "unknown" );
m_dnText.setEditable( false );
m_dnText.setBorder( javax.swing.BorderFactory.createTitledBorder( javax.swing.BorderFactory.createLineBorder(
new java.awt.Color( 153, 153, 153 ), 1 ), "Dn", javax.swing.border.TitledBorder.LEADING,
javax.swing.border.TitledBorder.TOP, new java.awt.Font( "SansSerif", 0, 14 ), new java.awt.Color( 60, 60,
60 ) ) );
m_rdnChoice.setEditable( true );
m_rdnChoice.setMaximumRowCount( 6 );
m_rdnChoice.setSize( new java.awt.Dimension( 130, 24 ) );
m_attrPnl.setLayout( new java.awt.BorderLayout() );
m_attrPnl.add( m_attrScrollPnl, java.awt.BorderLayout.CENTER );
m_attrScrollPnl.getViewport().add( m_attrTbl );
m_attrTbl.setBounds( new java.awt.Rectangle( 78, 60, 32, 32 ) );
m_attrTbl.setCellSelectionEnabled( true );
m_doneBut.setText( "Done" );
m_buttonPnl.setLayout( new java.awt.FlowLayout( java.awt.FlowLayout.RIGHT, 10, 5 ) );
m_buttonPnl.add( m_doneBut );
m_buttonPnl.add( m_cancelBut );
m_cancelBut.setText( "Cancel" );
m_cancelBut.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent a_evt )
{
closeDialog();
}
} );
m_attrScrollPnl.setBorder( javax.swing.BorderFactory.createTitledBorder( javax.swing.BorderFactory
.createLineBorder( new java.awt.Color( 153, 153, 153 ), 1 ), "Attributes",
javax.swing.border.TitledBorder.LEADING, javax.swing.border.TitledBorder.TOP, new java.awt.Font(
"SansSerif", 0, 14 ), new java.awt.Color( 60, 60, 60 ) ) );
m_attrTbl.setModel( new AttributesTableModel( m_childEntry, null, null, true ) );
//
// Build the table's popup menu
//
m_popup = new JPopupMenu();
JMenuItem l_menuItem = new JMenuItem( "Add" );
l_menuItem.setActionCommand( "Add" );
l_menuItem.addActionListener( this );
m_popup.add( l_menuItem );
l_menuItem = new JMenuItem( "Delete" );
l_menuItem.setActionCommand( "Delete" );
l_menuItem.addActionListener( this );
m_popup.add( l_menuItem );
// Add listener to components that can bring up popup menus.
m_attrTbl.addMouseListener( new PopupListener() );
setUpEditor( m_attrTbl );
}
private void setUpEditor( JTable l_table )
{
//Set up the editor for the integer cells.
final JTextField l_textField = new JTextField();
DefaultCellEditor l_textEditor = new DefaultCellEditor( l_textField )
{
private static final long serialVersionUID = 3256727286014554675L;
//Override DefaultCellEditor's getCellEditorValue method
//to return an Integer, not a String:
public Object getCellEditorValue()
{
if ( log.isDebugEnabled() )
log.debug( "Editor returning '" + l_textField.getText() + "'" );
return l_textField.getText();
}
};
l_table.setDefaultEditor( String.class, l_textEditor );
}
class PopupListener extends MouseAdapter
{
public void mousePressed( MouseEvent e )
{
maybeShowPopup( e );
}
public void mouseReleased( MouseEvent e )
{
maybeShowPopup( e );
}
private void maybeShowPopup( MouseEvent e )
{
if ( e.isPopupTrigger() )
{
m_popup.show( e.getComponent(), e.getX(), e.getY() );
}
}
}
public void actionPerformed( ActionEvent a_event )
{
String l_cmd = a_event.getActionCommand();
AttributesTableModel l_model = ( AttributesTableModel ) m_attrTbl.getModel();
int l_row = m_attrTbl.getSelectedRow();
log.debug( l_cmd );
if ( l_row >= l_model.getRowCount() || l_row < 0 )
{
JOptionPane.showMessageDialog( this, "Row needs to be selected to apply operation" );
}
if ( l_cmd.equals( "Add" ) )
{
l_model.insert( l_row, "xxxx", "xxxx" );
}
else if ( l_cmd.equals( "Delete" ) )
{
l_model.delete( l_row );
}
else
{
JOptionPane.showMessageDialog( this, "Unrecognized action - abandoning action processing." );
}
}
/** Closes the dialog */
private void closeDialog()
{
setVisible( false );
dispose();
}
public void setParentDn( String dn )
{
m_dnText.setText( dn );
}
public Attributes getChildEntry()
{
return m_childEntry;
}
public String getChildDn()
{
return m_dnText.getText();
}
}