You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2005/09/10 01:10:11 UTC
svn commit: r279909 - in
/directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui:
ConnectDialog.java MainFrame.java
Author: elecharny
Date: Fri Sep 9 16:10:05 2005
New Revision: 279909
URL: http://svn.apache.org/viewcvs?rev=279909&view=rev
Log:
Updated with Jocelyn modifications
Added:
directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/ConnectDialog.java
Modified:
directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/MainFrame.java
Added: directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/ConnectDialog.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/ConnectDialog.java?rev=279909&view=auto
==============================================================================
--- directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/ConnectDialog.java (added)
+++ directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/ConnectDialog.java Fri Sep 9 16:10:05 2005
@@ -0,0 +1,186 @@
+package org.apache.ldap.proxy.gui;
+
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+public class ConnectDialog extends JDialog implements ActionListener
+{
+
+ private final static String TITLE = "Connect Parameter";
+
+ private JTextField localPortTF;
+
+ private JTextField portTF;
+
+ private JTextField hostTF;
+
+ private final static JLabel localPortLabel = new JLabel( "Local Port", JLabel.CENTER );
+
+ private final static JLabel hostLabel = new JLabel( "Host name", JLabel.CENTER );
+
+ private final static JLabel portLabel = new JLabel( "Port", JLabel.CENTER );
+
+ private JButton cancelBut = new JButton( "Cancel" );
+
+ private JButton okBut = new JButton( "OK" );
+
+ private int currentLocalPortValue = 1389;
+
+ private int currentPortValue = 389;
+
+ private String currentHostValue = "localhost";
+
+ public final static int DEFAULT_LOCAL_PORT = 1389;
+
+ public final static String DEFAULT_HOST = "localhost";
+
+ public final static int DEFAULT_PORT = 389;
+
+ public ConnectDialog(Frame arg0) throws HeadlessException
+ {
+ super( arg0, true );
+ setTitle( TITLE );
+ init();
+ }
+
+ public ConnectDialog(Frame arg0, int localPort, String host, int port) throws HeadlessException
+ {
+ super( arg0, true );
+ setTitle( TITLE );
+ setCurrentLocalPortValue( localPort );
+ setCurrentHostValue( host );
+ setCurrentPortValue( port );
+ init();
+ }
+
+ /**
+ * Initialize JDialog
+ */
+ private void init()
+ {
+ JPanel principalPane = new JPanel();
+ principalPane.setLayout( new BoxLayout( principalPane, BoxLayout.Y_AXIS ) );
+ principalPane.add( new JLabel( "Set the Ports & Host parameter", JLabel.CENTER ) );
+
+ JPanel tfPane = new JPanel( new GridLayout( 2, 3 ) );
+ localPortTF = new JTextField( "" + getCurrentLocalPortValue() );
+ hostTF = new JTextField( getCurrentHostValue() );
+ portTF = new JTextField( "" + getCurrentPortValue() );
+ tfPane.add( localPortLabel );
+ tfPane.add( hostLabel );
+ tfPane.add( portLabel );
+ tfPane.add( localPortTF );
+ tfPane.add( hostTF );
+ tfPane.add( portTF );
+ principalPane.add( tfPane );
+
+ JPanel butPane = new JPanel();
+ butPane.setLayout( new BoxLayout( butPane, BoxLayout.X_AXIS ) );
+ butPane.add( cancelBut );
+ butPane.add( okBut );
+ okBut.addActionListener( this );
+ cancelBut.addActionListener( this );
+ okBut.setActionCommand( "OK" );
+ cancelBut.setActionCommand( "cancel" );
+ principalPane.add( butPane );
+
+ this.getContentPane().add( principalPane );
+ // to quit only by the OK or Cancel button
+ this.setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE );
+ this.setBounds( getParent().getX() + 50, getParent().getY() + 50, 600, 200 );
+
+ }
+
+ public String getCurrentHostValue()
+ {
+ return currentHostValue;
+ }
+
+ public void setCurrentHostValue( String currentHostValue )
+ {
+ this.currentHostValue = currentHostValue;
+ }
+
+ public int getCurrentLocalPortValue()
+ {
+ return currentLocalPortValue;
+ }
+
+ public void setCurrentLocalPortValue( int currentLocalPortValue )
+ {
+ this.currentLocalPortValue = currentLocalPortValue;
+ }
+
+ public void setCurrentLocalPortValue( String currentLocalPortValue )
+ {
+ try
+ {
+ this.currentLocalPortValue = Integer.parseInt( currentLocalPortValue );
+ ;
+ }
+ catch ( NumberFormatException nfe )
+ {
+ JOptionPane.showMessageDialog( this, new JLabel( "New Local Port not set to " + currentLocalPortValue
+ + ". Set to default value : " + DEFAULT_LOCAL_PORT + "." ) );
+ this.currentLocalPortValue = DEFAULT_LOCAL_PORT;
+ }
+ }
+
+ public int getCurrentPortValue()
+ {
+ return currentPortValue;
+ }
+
+ public void setCurrentPortValue( int currentPortValue )
+ {
+ this.currentPortValue = currentPortValue;
+ }
+
+ public void setCurrentPortValue( String currentPortValue )
+ {
+ try
+ {
+ this.currentPortValue = Integer.parseInt( currentPortValue );
+ }
+ catch ( NumberFormatException nfe )
+ {
+ JOptionPane.showMessageDialog( this, new JLabel( "New Port not set to " + currentPortValue
+ + ". Set to default value : " + DEFAULT_PORT + "." ) );
+ this.currentPortValue = DEFAULT_PORT;
+ }
+ }
+
+ public void actionPerformed( ActionEvent action )
+ {
+ String butName = ( (JButton) action.getSource() ).getActionCommand();
+ System.out.println( butName );
+
+ if ( butName.equals( "OK" ) )
+ {
+ System.out.println( "click on OK" );
+ setCurrentLocalPortValue( localPortTF.getText() );
+ setCurrentHostValue( hostTF.getText() );
+ setCurrentPortValue( portTF.getText() );
+ setVisible( false );
+
+ }
+ else
+ {
+ System.out.println( "click on Cancel" );
+ setVisible( false );
+ }
+
+ }
+
+}
\ No newline at end of file
Modified: directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/MainFrame.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/MainFrame.java?rev=279909&r1=279908&r2=279909&view=diff
==============================================================================
--- directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/MainFrame.java (original)
+++ directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/gui/MainFrame.java Fri Sep 9 16:10:05 2005
@@ -1,630 +1,755 @@
-/*
- * Copyright 2005 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.ldap.proxy.gui;
-
-import org.apache.asn1new.ldap.pojo.LdapMessage;
-import org.apache.ldap.proxy.impl.LdapMessageWithPDU;
-import org.apache.ldap.proxy.impl.LdapProxy;
-
-import com.thoughtworks.xstream.XStream;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.HeadlessException;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-import java.net.UnknownHostException;
-
-import javax.swing.ImageIcon;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTextPane;
-import javax.swing.JTree;
-import javax.swing.KeyStroke;
-import javax.swing.event.TreeExpansionEvent;
-import javax.swing.event.TreeExpansionListener;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.SimpleAttributeSet;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyleContext;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeNode;
-import javax.swing.tree.TreeSelectionModel;
-
-/**
- * A Ldap Proxy GUI
- *
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- */
-public class MainFrame extends JFrame implements TreeSelectionListener, TreeExpansionListener
-{
- // ~ Static fields/initializers
- // -----------------------------------------------------------------
- // Shut down the Serialization warning ...
- public static final long serialVersionUID = 1L;
-
- /** frame itSelf */
- private MainFrame itSelf;
-
- /** Frame and Application name */
- public static final String FRAME_NAME = "LDAP Proxy GUI";
-
- /** Default Frame default Size */
- public static final Rectangle FRAME_SIZE = new Rectangle( 100, 100, 1000, 500 );
-
- // ~ Instance fields
- // ----------------------------------------------------------------------------
-
- // ALL Panel
- /** The splitted panel */
- private JSplitPane principalPanel;
-
- /** DOCUMENT ME! */
- private JScrollPane jspIn;
-
- /** DOCUMENT ME! */
- private JScrollPane jspOut;
-
- /** DOCUMENT ME! */
- private JTree messageTree;
-
- /** DOCUMENT ME! */
- private JTextPane textOut;
-
- // List of Menu
- /** The menu bar */
- private JMenuBar menuBar = new JMenuBar();
-
- /** The file menu */
- private JMenu fileMenu = new JMenu( "File" );
-
- /** The edit menu */
- private JMenu editMenu = new JMenu( "edit" );
-
- /** The "New" menu item */
- private JMenuItem newMenuItem = new JMenuItem( "New..." );
-
- /** The "Load" menu item */
- private JMenuItem loadMenuItem = new JMenuItem( "load" );
-
- /** The "Save" menu item */
- private JMenuItem saveMenuItem = new JMenuItem( "Save" );
-
- /** The "Quit" menu item */
- private JMenuItem quitMenuItem = new JMenuItem( "Quit" );
-
- /** DOCUMENT ME! */
- private JCheckBoxMenuItem pduView = new JCheckBoxMenuItem( "View PDU" );
-
- /** DOCUMENT ME! */
- private LdapProxy ldapProxy;
-
- /** DOCUMENT ME! */
- private DefaultStyledDocument docOut;
-
- private String[] args;
-
- private DefaultMutableTreeNode top;
-
- private DefaultMutableTreeNode ldapMessageTree;
-
- private DefaultTreeModel treeModel;
-
- // STYLE
- private SimpleAttributeSet boldItalicRedText;
-
- private SimpleAttributeSet boldText;
-
- private SimpleAttributeSet boldItalicBlueText;
-
- private SimpleAttributeSet pduStyle;
-
- final static String SEPARATOR = "\n====================================\n";
-
- // ~ Constructors
- // -------------------------------------------------------------------------------
-
- /**
- * Creates a new MainFrame object.
- *
- * @throws HeadlessException
- * DOCUMENT ME!
- * @throws UnknownHostException
- * DOCUMENT ME!
- * @throws IOException
- * DOCUMENT ME!
- */
- public MainFrame() throws HeadlessException, UnknownHostException, IOException
- {
- super();
- initFrame();
-
- }
-
- // ~ Methods
- // ------------------------------------------------------------------------------------
-
- public void initFrame()
- {
- setItSelf( this );
- setTitle( FRAME_NAME );
- setBounds( FRAME_SIZE );
- setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
- setJMenuBar( initMenuBar() );
- top = new DefaultMutableTreeNode( "Start" );
- treeModel = new DefaultTreeModel( top );
- messageTree = new JTree( treeModel );
- ldapMessageTree = new DefaultMutableTreeNode( "Start Ldap message" );
-
- messageTree.addTreeExpansionListener( this );
- messageTree.addTreeSelectionListener( this );
-
- messageTree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
- initRenderTree();
- messageTree.setBackground( Color.lightGray );
- messageTree.putClientProperty( "JTree.lineStyle", "None" );
-
- initStyleForEditing();
-
- messageTree.setEditable( false );
- // messageTree.setRootVisible(false);
-
- textOut = new JTextPane( docOut );
- textOut.setEditable( false );
-
- jspIn = new JScrollPane();
- jspIn.getViewport().add( messageTree );
-
- jspOut = new JScrollPane();
- jspOut.getViewport().add( textOut );
-
- principalPanel = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, jspIn, jspOut );
- principalPanel.setOneTouchExpandable( true );
- principalPanel.setDividerLocation( 500 );
-
- getContentPane().add( principalPanel );
- }
-
- public void initStyleForEditing()
- {
- // DEFAULT STYLE
- Style def = StyleContext.getDefaultStyleContext().getStyle( StyleContext.DEFAULT_STYLE );
- docOut = new DefaultStyledDocument();
- // other style could be define later // COMMENT TO BE DELETED AFTER DEV
-
- boldItalicRedText = new SimpleAttributeSet();
- StyleConstants.setForeground( boldItalicRedText, Color.red );
- StyleConstants.setBold( boldItalicRedText, true );
- StyleConstants.setItalic( boldItalicRedText, true );
- StyleConstants.setFontSize( boldItalicRedText, 12 );
-
- boldItalicBlueText = new SimpleAttributeSet();
- StyleConstants.setForeground( boldItalicBlueText, Color.blue );
- StyleConstants.setBold( boldItalicBlueText, true );
- StyleConstants.setItalic( boldItalicBlueText, true );
- StyleConstants.setFontSize( boldItalicBlueText, 12 );
-
- boldText = new SimpleAttributeSet();
- StyleConstants.setFontSize( boldText, 14 );
- StyleConstants.setBold( boldText, true );
-
- pduStyle = new SimpleAttributeSet();
- StyleConstants.setFontSize( pduStyle, 12 );
- StyleConstants.setBold( pduStyle, true );
- StyleConstants.setForeground( pduStyle, Color.DARK_GRAY );
-
- }
-
- /**
- * DOCUMENT ME!
- */
- public void launchLdapProxy( String[] args )
- {
- ldapProxy = new LdapProxy();
- ldapProxy.setMainFrame( this );
- // ldapProxy.setTextIn( messageTree );
- // ldapProxy.setTextOut( textOut );
-
- ldapProxy.likeMain( args );
-
- }
-
- /** Returns an ImageIcon, or null if the path was invalid. */
- protected static ImageIcon createImageIcon( String path )
- {
- // java.net.URL imgURL = MainFrame.class.getResource(path);
- try
- {
- return new ImageIcon( path );
- }
- catch ( Exception e )
- {
- return null;
- }
- }
-
- /**
- * DOCUMENT ME!
- */
- public void initRenderTree()
- {
- ImageIcon leafIcon = createImageIcon( "./images/gnome-icone-001.gif" );
- ImageIcon icon = createImageIcon( "./images/gnome-icone-002.gif" );
- if ( ( leafIcon != null ) && ( icon != null ) )
- {
- DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
- renderer.setLeafIcon( leafIcon );
- messageTree.setCellRenderer( renderer );
- renderer.setFont( new Font( "treeFont", Font.BOLD, 12 ) );
- renderer.setBackgroundNonSelectionColor( Color.lightGray );
- renderer.setBackgroundSelectionColor( Color.white );
- renderer.setOpenIcon( icon );
- renderer.setClosedIcon( icon );
- }
-
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- private JMenuBar initMenuBar()
- {
- fileMenu.add( newMenuItem );
- fileMenu.add( loadMenuItem );
- fileMenu.add( saveMenuItem );
- fileMenu.addSeparator();
- fileMenu.add( quitMenuItem );
- newMenuItem.addActionListener( new ActionListener()
- {
- public void actionPerformed( ActionEvent action )
- {
- // top.removeAllChildren();
- // TO DO BETTER !!!!!
- top = new DefaultMutableTreeNode( "Start" );
- treeModel.setRoot( top );
- }
- } );
- saveMenuItem.addActionListener( new ActionListener()
- {
- public void actionPerformed( ActionEvent action )
- {
- try
- {
- FileWriter fw = new FileWriter( new File( "./dest/testsauv.xml" ) );
- for ( int i = 0; i < ldapMessageTree.getChildCount(); i++ )
- {
- DefaultMutableTreeNode tmpNode = (DefaultMutableTreeNode) ldapMessageTree.getChildAt( i );
- String st = toXML( tmpNode.getUserObject(), fw ) + "\n";
- try
- {
- docOut.insertString( docOut.getLength(), st, boldText );
- }
- catch ( BadLocationException ble )
- {
- }
- for ( int j = 0; j < tmpNode.getChildCount(); j++ )
- {
- st = toXML( ( (DefaultMutableTreeNode) tmpNode.getChildAt( j ) ).getUserObject(), fw )
- + "\n";
- try
- {
- docOut.insertString( docOut.getLength(), st, boldItalicBlueText );
- }
- catch ( BadLocationException ble )
- {
- }
- }
- }
-
- }
- catch ( IOException e )
- {
- }
- }
- } );
- quitMenuItem.addActionListener( new ActionListener()
- {
- public void actionPerformed( ActionEvent action )
- {
- System.out.println( "EXIT" );
- try
- {
- if ( ldapProxy != null )
- ldapProxy.stop();
- }
- catch ( Exception e )
- {
- e.printStackTrace();
- }
-
- System.exit( 0 );
- }
- } );
-
- quitMenuItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, ActionEvent.CTRL_MASK ) );
- saveMenuItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK ) );
-
- editMenu.add( pduView );
-
- menuBar.add( fileMenu );
- menuBar.add( editMenu );
- return menuBar;
- }
-
- /**
- * DOCUMENT ME!
- */
- public void run()
- {
- this.setVisible( true );
- this.launchLdapProxy( args );
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param args
- */
- public static void main( String[] args ) throws Exception
- {
- MainFrame mf = new MainFrame();
- mf.args = args;
- mf.run();
- }
-
- public JTree getMessageTree()
- {
- return messageTree;
- }
-
- public DefaultMutableTreeNode getTop()
- {
- return top;
- }
-
- public DefaultMutableTreeNode getLdapMessageTree()
- {
- return ldapMessageTree;
- }
-
- public void setLdapMessageTree( DefaultMutableTreeNode ldapMessageTree )
- {
- this.ldapMessageTree = ldapMessageTree;
- }
-
- public SimpleAttributeSet getStyleByMessageType( int type )
- {
- SimpleAttributeSet styledType;
-
- switch ( type )
- {
- case 0 :
- styledType = boldItalicBlueText;
- break;
- case 1 :
- styledType = boldItalicBlueText;
- break;
- case 2 :
- styledType = boldItalicBlueText;
- break;
- case 3 :
- styledType = boldItalicRedText;
- break;
- case 4 :
- styledType = boldItalicBlueText;
- break;
- case 5 :
- styledType = boldItalicBlueText;
- break;
- case 6 :
- styledType = boldItalicBlueText;
- break;
- case 7 :
- styledType = boldItalicBlueText;
- break;
- case 8 :
- styledType = boldItalicBlueText;
- break;
- case 9 :
- styledType = boldItalicBlueText;
- break;
- case 10 :
- styledType = boldItalicBlueText;
- break;
- case 11 :
- styledType = boldItalicBlueText;
- break;
- case 12 :
- styledType = boldItalicBlueText;
- break;
- case 13 :
- styledType = boldItalicBlueText;
- break;
- case 14 :
- styledType = boldItalicBlueText;
- break;
- case 15 :
- styledType = boldItalicBlueText;
- break;
- case 16 :
- styledType = boldItalicBlueText;
- break;
- case 17 :
- styledType = boldItalicRedText;
- break;
- case 18 :
- styledType = boldItalicBlueText;
- break;
- case 19 :
- styledType = boldItalicBlueText;
- break;
- case -1 :
- styledType = boldItalicBlueText;
- break;
-
- default :
- styledType = boldItalicBlueText;
- break;
- }
- return styledType;
- }
-
- public String toXML( Object ob, FileWriter fw )
- {
- try
- {
- XStream xs = new XStream();
- xs.toXML( ob, fw );
- String st = xs.toXML( ob );
- System.out.println( st );
- return st;
- }
- catch ( Exception e )
- {
- return "NOTHING";
- }
- }
-
- public MainFrame getItSelf()
- {
- return itSelf;
- }
-
- public void setItSelf( MainFrame itSelf )
- {
- this.itSelf = itSelf;
- }
-
- public void treeCollapsed( TreeExpansionEvent tee )
- {
- messageTree.setSelectionPath( tee.getPath() );
- // messageTree.setSelectionRow(0);
-
- }
-
- public void treeExpanded( TreeExpansionEvent tee )
- {
- // messageTree.setSelectionRow(0);
- messageTree.setSelectionPath( tee.getPath() );
- }
-
- public void valueChanged( TreeSelectionEvent tse )
- {
- textOut.setText( "" );
- // there is only 2 depth level in thoses Tree.
- DefaultMutableTreeNode node = (DefaultMutableTreeNode) messageTree.getLastSelectedPathComponent();
- if ( node.equals( top ) )
- {
- System.out.println( "First Element Selected!!" );
- return;
- }
- if ( node == null )
- {
- System.out.println( "Can't Find Node !!! NULL" );
- return;
-
- }
- int index = top.getIndex( node );
- int count = 0;
- int childrenCount = top.getChildCount();
- while ( ( index == -1 ) && ( count < childrenCount ) )
- {
- index = top.getChildAt( count ).getIndex( node );
- count++;
- }
- count--;
- if ( index == -1 )
- {
- System.out.println( "Can't Find Node !!! index -1" );
- return;
- }
- Object nodeInfo = node.getUserObject();
- System.out.println( "============================================" );
- System.out.println( "NODE selected " + index + " :::: " + nodeInfo.toString() );
- TreeNode ldapNode;
- if ( !node.isLeaf() )
- {
- // First Level
- ldapNode = ldapMessageTree.getChildAt( index );
- }
- else
- {
- // second Level we take before the good sub tree to get the
- // good leaf by its own index
- ldapNode = ldapMessageTree.getChildAt( count ).getChildAt( index );
- }
-
- System.out.println( "LDAP message associate ::: "
- + ( (LdapMessageWithPDU) ( (DefaultMutableTreeNode) ldapNode ).getUserObject() ).getLdapMessage()
- .toString() );
- System.out.println( "============================================" );
-
- // textOut.setLogicalStyle(textOut.getStyle("regular"));
- // textOut.setText(textOut.getText() + ldapNode.toString());
- try
- {
- LdapMessage ldapmess = ( (LdapMessageWithPDU) ( (DefaultMutableTreeNode) ldapNode ).getUserObject() )
- .getLdapMessage();
- int type = ldapmess.getMessageType();
- SimpleAttributeSet currentStyle = getStyleByMessageType( type );
- docOut.insertString( docOut.getLength(), node.toString() + "\n", boldText );
- if ( node.isLeaf() )
- {
- docOut.insertString( docOut.getLength(), ldapmess.toString(), currentStyle );
- if ( pduView.getState() )
- {
- docOut.insertString( docOut.getLength(), SEPARATOR
- + " PDU :: \n "
- + ( (LdapMessageWithPDU) ( (DefaultMutableTreeNode) ldapNode ).getUserObject() )
- .getDumpBytes() + SEPARATOR, pduStyle );
- }
- }
-
- }
- catch ( Exception e )
- {// BadLocationException ble) {
- System.err.println( "Can not write data in Editor!!" );
- }
-
- }
-
- public DefaultTreeModel getTreeModel()
- {
- return treeModel;
- }
-
-}
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ldap.proxy.gui;
+
+import org.apache.asn1new.ldap.pojo.LdapMessage;
+import org.apache.ldap.proxy.impl.LdapMessageWithPDU;
+import org.apache.ldap.proxy.impl.LdapProxy;
+
+import com.thoughtworks.xstream.XStream;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.HeadlessException;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import java.net.UnknownHostException;
+
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTextPane;
+import javax.swing.JTree;
+import javax.swing.KeyStroke;
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeExpansionListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.text.DefaultStyledDocument;
+import javax.swing.text.SimpleAttributeSet;
+import javax.swing.text.Style;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyleContext;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreeSelectionModel;
+
+/**
+ * A Ldap Proxy GUI
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class MainFrame extends JFrame implements TreeSelectionListener, TreeExpansionListener
+{
+ // ~ Static fields/initializers
+ // -----------------------------------------------------------------
+ // Shut down the Serialization warning ...
+ public static final long serialVersionUID = 1L;
+
+ /** frame itSelf */
+ private MainFrame itSelf;
+
+ /** Frame and Application name */
+ public static final String FRAME_NAME = "LDAP Proxy GUI";
+
+ /** Default Frame default Size */
+ public static final Rectangle FRAME_SIZE = new Rectangle( 100, 100, 1000, 500 );
+
+ // ~ Instance fields
+ // ----------------------------------------------------------------------------
+
+ // JDialog for connection parameters.
+ /** our own JDialog to set connection ports and host parameters */
+ private ConnectDialog connectDialog;
+
+ // ALL Panel
+ /** The splitted panel */
+ private JSplitPane principalPanel;
+
+ /** scrollpane for tree */
+ private JScrollPane jspIn;
+
+ /** rigth scroll pane that contains the editorpane */
+ private JScrollPane jspOut;
+
+ /** Jtree describing the proxy stream */
+ private JTree messageTree;
+
+ /** detail pane for each tree entry */
+ private JTextPane textOut;
+
+ // List of Menu
+ /** The menu bar */
+ private JMenuBar menuBar = new JMenuBar();
+
+ /** The file menu */
+ private JMenu fileMenu = new JMenu( "File" );
+
+ /** The edit menu */
+ private JMenu editMenu = new JMenu( "edit" );
+
+ /** The "New" menu item */
+ private JMenuItem newMenuItem = new JMenuItem( "New..." );
+
+ /** The "Load" menu item */
+ private JMenuItem loadMenuItem = new JMenuItem( "load" );
+
+ /** The "Save" menu item */
+ private JMenuItem saveMenuItem = new JMenuItem( "Save" );
+
+ /** The "Quit" menu item */
+ private JMenuItem quitMenuItem = new JMenuItem( "Quit" );
+
+ /** check box to view or not the PDU in the right detail panel */
+ private JCheckBoxMenuItem pduView = new JCheckBoxMenuItem( "View PDU" );
+
+ /** an instance of the Proxy */
+ private LdapProxy ldapProxy;
+
+ /** the basic default style document, use to construct the other style */
+ private DefaultStyledDocument docOut;
+
+ /** args that are passed during the launching of the Proxy */
+ private String[] args;
+
+ /** The root of the visible tree */
+ private DefaultMutableTreeNode top;
+
+ /**
+ * the root of the assiociate tree that contains all LdapMessage and PDU
+ * associated
+ */
+ private DefaultMutableTreeNode ldapMessageTree;
+
+ /** The Viewing tree Model */
+ private DefaultTreeModel treeModel;
+
+ // STYLE use in the rigth detail Editor Pane
+
+ /** bold style using for header before detail of the ldap message */
+ private SimpleAttributeSet boldStyle;
+
+ /** italic style using for error or Unknown message */
+ private SimpleAttributeSet italicStyle;
+
+ /** request style */
+ private SimpleAttributeSet requestStyle;
+
+ /** response style */
+ private SimpleAttributeSet responseStyle;
+
+ /** PDU Style */
+ private SimpleAttributeSet pduStyle;
+
+ /** Standard separator using to include PDU */
+ final static String SEPARATOR = "\n====================================\n";
+
+ public final static String DEFAULT_SAVE_EXTENTION_NAME = ".lpml";
+
+ // ~ Constructors
+ // -------------------------------------------------------------------------------
+
+ /**
+ * Creates a new MainFrame object.
+ *
+ * @throws HeadlessException
+ * if no title for the frame! (never happen)
+ * @throws UnknownHostException
+ * if the host using for the proxy launching is unrecognize
+ * @throws IOException
+ * if the port for proxy socket is allready open
+ */
+ public MainFrame() throws HeadlessException, UnknownHostException, IOException
+ {
+ super();
+ initFrame();
+
+ }
+
+ // ~ Methods
+ // ------------------------------------------------------------------------------------
+ /**
+ * DOCUMENT ME!
+ */
+ public void initFrame()
+ {
+
+ // its own Parameters
+ setItSelf( this );
+ setTitle( FRAME_NAME );
+ setBounds( FRAME_SIZE );
+ setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
+
+ // Dialog
+ connectDialog = new ConnectDialog( this );
+
+ setJMenuBar( initMenuBar() );
+ top = new DefaultMutableTreeNode( "Start" );
+ treeModel = new DefaultTreeModel( top );
+ messageTree = new JTree( treeModel );
+ ldapMessageTree = new DefaultMutableTreeNode( "Start Ldap message" );
+
+ messageTree.addTreeExpansionListener( this );
+ messageTree.addTreeSelectionListener( this );
+
+ messageTree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
+ initRenderTree();
+ messageTree.setBackground( Color.lightGray );
+ messageTree.putClientProperty( "JTree.lineStyle", "None" );
+
+ initStyleForEditing();
+
+ messageTree.setEditable( false );
+ // messageTree.setRootVisible(false);
+
+ textOut = new JTextPane( docOut );
+ textOut.setEditable( false );
+
+ jspIn = new JScrollPane();
+ jspIn.getViewport().add( messageTree );
+
+ jspOut = new JScrollPane();
+ jspOut.getViewport().add( textOut );
+
+ principalPanel = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, jspIn, jspOut );
+ principalPanel.setOneTouchExpandable( true );
+ principalPanel.setDividerLocation( 500 );
+
+ getContentPane().add( principalPanel );
+
+ }
+
+ /**
+ * init all the style using for editing detail of a Ldap Message
+ */
+ public void initStyleForEditing()
+ {
+ // DEFAULT STYLE
+ Style def = StyleContext.getDefaultStyleContext().getStyle( StyleContext.DEFAULT_STYLE );
+ docOut = new DefaultStyledDocument();
+ // other style could be define later // COMMENT TO BE DELETED AFTER DEV
+
+ requestStyle = new SimpleAttributeSet();
+ StyleConstants.setForeground( requestStyle, Color.red );
+ StyleConstants.setBold( requestStyle, true );
+ StyleConstants.setFontSize( requestStyle, 12 );
+
+ responseStyle = new SimpleAttributeSet();
+ StyleConstants.setForeground( responseStyle, Color.blue );
+ StyleConstants.setBold( responseStyle, true );
+ StyleConstants.setFontSize( responseStyle, 12 );
+
+ boldStyle = new SimpleAttributeSet();
+ StyleConstants.setFontSize( boldStyle, 14 );
+ StyleConstants.setBold( boldStyle, true );
+
+ italicStyle = new SimpleAttributeSet();
+ StyleConstants.setFontSize( boldStyle, 14 );
+ StyleConstants.setItalic( boldStyle, true );
+
+ pduStyle = new SimpleAttributeSet();
+ StyleConstants.setFontSize( pduStyle, 12 );
+ StyleConstants.setBold( pduStyle, true );
+ StyleConstants.setForeground( pduStyle, Color.DARK_GRAY );
+
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public void launchLdapProxy()
+ {
+ ldapProxy = new LdapProxy();
+ ldapProxy.setMainFrame( this );
+ ldapProxy.likeMain( args );
+
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public void launchLdapProxy( int localPort, String host, int port )
+ {
+ ldapProxy = new LdapProxy();
+ ldapProxy.setMainFrame( this );
+ ldapProxy.likeMain( localPort, host, port );
+
+ }
+
+ /**
+ * Returns an ImageIcon, or null if the path was invalid.
+ */
+ protected static ImageIcon createImageIcon( String path )
+ {
+ // java.net.URL imgURL = MainFrame.class.getResource(path);
+ try
+ {
+ return new ImageIcon( path );
+ }
+ catch ( Exception e )
+ {
+ return null;
+ }
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public void initRenderTree()
+ {
+ ImageIcon leafIcon = createImageIcon( "./images/gnome-icone-001.gif" );
+ ImageIcon icon = createImageIcon( "./images/gnome-icone-002.gif" );
+ if ( ( leafIcon != null ) && ( icon != null ) )
+ {
+ DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
+ renderer.setLeafIcon( leafIcon );
+ messageTree.setCellRenderer( renderer );
+ renderer.setFont( new Font( "treeFont", Font.BOLD, 12 ) );
+ renderer.setBackgroundNonSelectionColor( Color.lightGray );
+ renderer.setBackgroundSelectionColor( Color.white );
+ renderer.setOpenIcon( icon );
+ renderer.setClosedIcon( icon );
+ }
+
+ }
+
+ /**
+ * initialise the menu of the GUI
+ *
+ * @return JMenuBar
+ */
+ private JMenuBar initMenuBar()
+ {
+ fileMenu.add( newMenuItem );
+ fileMenu.add( loadMenuItem );
+ fileMenu.add( saveMenuItem );
+ fileMenu.addSeparator();
+ fileMenu.add( quitMenuItem );
+ newMenuItem.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent action )
+ {
+ // top.removeAllChildren();
+ // TO DO BETTER !!!!!
+ // top = new DefaultMutableTreeNode("Start");
+ // treeModel.setRoot(top);
+ JOptionPane.showMessageDialog( getItSelf(), new JLabel( "This Menu don't run actually!! TO DO ..." ) );
+ }
+ } );
+ saveMenuItem.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent action )
+ {
+ try
+ {
+ JFileChooser jfc = new JFileChooser();
+ jfc.addChoosableFileFilter( new FileFilter()
+ {
+ public boolean accept( File f )
+ {
+ if ( f.isDirectory() )
+ {
+ return false;
+ }
+ if ( f.getName().endsWith( MainFrame.DEFAULT_SAVE_EXTENTION_NAME ) )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public String getDescription()
+ {
+ return "*" + MainFrame.DEFAULT_SAVE_EXTENTION_NAME;
+ }
+
+ } );
+
+ int retrunValue = jfc.showSaveDialog( getItSelf() );
+
+ if ( retrunValue == JFileChooser.APPROVE_OPTION )
+ {
+ File f;
+
+ if ( jfc.getSelectedFile().getName().endsWith( MainFrame.DEFAULT_SAVE_EXTENTION_NAME ) )
+ {
+ f = jfc.getSelectedFile();
+ }
+ else
+ {
+ f = new File( jfc.getSelectedFile().getAbsoluteFile()
+ + MainFrame.DEFAULT_SAVE_EXTENTION_NAME );
+ }
+
+ FileWriter fw = new FileWriter( f );
+
+ for ( int i = 0; i < ldapMessageTree.getChildCount(); i++ )
+ {
+ DefaultMutableTreeNode tmpNode = (DefaultMutableTreeNode) ldapMessageTree.getChildAt( i );
+ String st = toXML( tmpNode.getUserObject(), fw ) + "\n";
+
+ for ( int j = 0; j < tmpNode.getChildCount(); j++ )
+ {
+ st = toXML( ( (DefaultMutableTreeNode) tmpNode.getChildAt( j ) ).getUserObject(), fw )
+ + "\n";
+ }
+ }
+ }
+ }
+ catch ( IOException e )
+ {
+ JOptionPane.showMessageDialog( getItSelf(), new JLabel( "Can't save the tree!!" ) );
+ }
+ }
+ } );
+ quitMenuItem.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent action )
+ {
+ System.out.println( "EXIT" );
+ try
+ {
+ if ( ldapProxy != null )
+ ldapProxy.stop();
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+
+ System.exit( 0 );
+ }
+ } );
+
+ quitMenuItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, ActionEvent.CTRL_MASK ) );
+ saveMenuItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK ) );
+
+ editMenu.add( pduView );
+
+ menuBar.add( fileMenu );
+ menuBar.add( editMenu );
+ return menuBar;
+ }
+
+ /**
+ * First runing method, set visible the GUI and launch Proxy
+ */
+ public void run()
+ {
+ this.setVisible( true );
+ if ( args.length > 2 )
+ {
+ this.launchLdapProxy();
+ }
+ else
+ {
+ connectDialog.setVisible( true );
+ this.launchLdapProxy( connectDialog.getCurrentLocalPortValue(), connectDialog.getCurrentHostValue(),
+ connectDialog.getCurrentPortValue() );
+ }
+
+ }
+
+ /**
+ * launching method
+ *
+ * @param args
+ */
+ public static void main( String[] args ) throws Exception
+ {
+ MainFrame mf = new MainFrame();
+ mf.args = args;
+ mf.run();
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public JTree getMessageTree()
+ {
+ return messageTree;
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public DefaultMutableTreeNode getTop()
+ {
+ return top;
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public DefaultMutableTreeNode getLdapMessageTree()
+ {
+ return ldapMessageTree;
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public void setLdapMessageTree( DefaultMutableTreeNode ldapMessageTree )
+ {
+ this.ldapMessageTree = ldapMessageTree;
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public SimpleAttributeSet getStyleByMessageType( int type )
+ {
+ SimpleAttributeSet styledType;
+
+ switch ( type )
+ {
+ case 0 :
+ // ABANDON REQUEST
+ styledType = requestStyle;
+ break;
+ case 1 :
+ // ADD REQUEST
+ styledType = requestStyle;
+ break;
+ case 2 :
+ // ADD RESPONSE
+ styledType = responseStyle;
+ break;
+ case 3 :
+ // BIND REQUEST
+ styledType = requestStyle;
+ break;
+ case 4 :
+ // BIND RESPONSE
+ styledType = responseStyle;
+ break;
+ case 5 :
+ // COMPARE REQUEST
+ styledType = requestStyle;
+ break;
+ case 6 :
+ // COMPARE RESPONSE
+ styledType = responseStyle;
+ break;
+ case 7 :
+ // DEL REQUEST
+ styledType = requestStyle;
+ break;
+ case 8 :
+ // DEL RESPONSE
+ styledType = responseStyle;
+ break;
+ case 9 :
+ // EXTENDED REQUEST
+ styledType = requestStyle;
+ break;
+ case 10 :
+ // EXTENDED RESPONSE
+ styledType = responseStyle;
+ break;
+ case 11 :
+ // MODIFYDN REQUEST
+ styledType = requestStyle;
+ break;
+ case 12 :
+ // MODIFYDN RESPONSE
+ styledType = responseStyle;
+ break;
+ case 13 :
+ // MODIFY REQUEST
+ styledType = requestStyle;
+ break;
+ case 14 :
+ // MODIFY RESPONSE
+ styledType = responseStyle;
+ break;
+ case 15 :
+ // SEARCH REQUEST
+ styledType = requestStyle;
+ break;
+ case 16 :
+ // SEARCH RESULT DONE
+ styledType = responseStyle;
+ break;
+ case 17 :
+ // SEARCH RESULT ENTRY
+ styledType = responseStyle;
+ break;
+ case 18 :
+ // SEARCH RESULT REFERENCE
+ styledType = responseStyle;
+ break;
+ case 19 :
+ // UNBIND REQUEST
+ styledType = requestStyle;
+ break;
+ case -1 :
+ // UNKNOWN
+ styledType = italicStyle;
+ break;
+
+ default :
+ // UNKNOWN
+ styledType = italicStyle;
+ break;
+ }
+ return styledType;
+ }
+
+ public String toXML( Object ob, FileWriter fw )
+ {
+ try
+ {
+ XStream xs = new XStream();
+ xs.toXML( ob, fw );
+ String st = xs.toXML( ob );
+ // System.out.println(st);
+ return st;
+ }
+ catch ( Exception e )
+ {
+ return "NOTHING";
+ }
+ }
+
+ public MainFrame getItSelf()
+ {
+ return itSelf;
+ }
+
+ public void setItSelf( MainFrame itSelf )
+ {
+ this.itSelf = itSelf;
+ }
+
+ public void treeCollapsed( TreeExpansionEvent tee )
+ {
+ messageTree.setSelectionPath( tee.getPath() );
+ // messageTree.setSelectionRow(0);
+
+ }
+
+ public void treeExpanded( TreeExpansionEvent tee )
+ {
+ // messageTree.setSelectionRow(0);
+ messageTree.setSelectionPath( tee.getPath() );
+ }
+
+ public void valueChanged( TreeSelectionEvent tse )
+ {
+ textOut.setText( "" );
+ // there is only 2 depth level in thoses Tree.
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) messageTree.getLastSelectedPathComponent();
+ if ( node.equals( top ) )
+ {
+ System.out.println( "First Element Selected!!" );
+ return;
+ }
+ if ( node == null )
+ {
+ System.out.println( "Can't Find Node !!! NULL" );
+ return;
+
+ }
+ int index = top.getIndex( node );
+ int count = 0;
+ int childrenCount = top.getChildCount();
+ while ( ( index == -1 ) && ( count < childrenCount ) )
+ {
+ index = top.getChildAt( count ).getIndex( node );
+ count++;
+ }
+ count--;
+ if ( index == -1 )
+ {
+ System.out.println( "Can't Find Node !!! index -1" );
+ return;
+ }
+ Object nodeInfo = node.getUserObject();
+ System.out.println( "============================================" );
+ System.out.println( "NODE selected " + index + " :::: " + nodeInfo.toString() );
+ TreeNode ldapNode;
+ if ( !node.isLeaf() )
+ {
+ // First Level
+ ldapNode = ldapMessageTree.getChildAt( index );
+ }
+ else
+ {
+ // second Level we take before the good sub tree to get the
+ // good leaf by its own index
+ ldapNode = ldapMessageTree.getChildAt( count ).getChildAt( index );
+ }
+
+ System.out.println( "LDAP message associate ::: "
+ + ( (LdapMessageWithPDU) ( (DefaultMutableTreeNode) ldapNode ).getUserObject() ).getLdapMessage()
+ .toString() );
+ System.out.println( "============================================" );
+
+ // textOut.setLogicalStyle(textOut.getStyle("regular"));
+ // textOut.setText(textOut.getText() + ldapNode.toString());
+ try
+ {
+ LdapMessage ldapmess = ( (LdapMessageWithPDU) ( (DefaultMutableTreeNode) ldapNode ).getUserObject() )
+ .getLdapMessage();
+ int type = ldapmess.getMessageType();
+ SimpleAttributeSet currentStyle = getStyleByMessageType( type );
+ docOut.insertString( docOut.getLength(), node.toString() + "\n", boldStyle );
+ if ( node.isLeaf() )
+ {
+ docOut.insertString( docOut.getLength(), ldapmess.toString(), currentStyle );
+ if ( pduView.getState() )
+ {
+ docOut.insertString( docOut.getLength(), SEPARATOR
+ + " PDU :: \n "
+ + ( (LdapMessageWithPDU) ( (DefaultMutableTreeNode) ldapNode ).getUserObject() )
+ .getDumpBytes() + SEPARATOR, pduStyle );
+ }
+ }
+
+ }
+ catch ( Exception e )
+ {// BadLocationException ble) {
+ System.err.println( "Can not write data in Editor!!" );
+ }
+
+ }
+
+ public DefaultTreeModel getTreeModel()
+ {
+ return treeModel;
+ }
+
+}
\ No newline at end of file