You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2010/09/05 19:14:02 UTC
svn commit: r992827 [2/4] - in /directory/sandbox/kayyagari/http-directory:
./ directory-http-ui/ directory-http-ui/src/ directory-http-ui/src/main/
directory-http-ui/src/main/java/ directory-http-ui/src/main/java/org/
directory-http-ui/src/main/java/o...
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/LoginPanel.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/LoginPanel.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/LoginPanel.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/LoginPanel.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,217 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/*
+ * LoginPanel.java
+ *
+ * Created on Aug 26, 2010, 7:23:14 PM
+ */
+package org.apache.directory.http.client.ui;
+
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.apache.directory.http.client.ui.callback.LoginHandler;
+
+
+/**
+ *
+ * @author kayyagari
+ */
+public class LoginPanel extends javax.swing.JPanel implements ActionListener
+{
+
+ private LoginHandler loginHandler;
+
+
+ /** Creates new form LoginPanel */
+ public LoginPanel()
+ {
+ initComponents();
+
+ txtUserName.setText( "uid=admin,ou=system" );
+ txtPassword.setText( "secret" );
+
+ btnLogin.addActionListener( this );
+ txtPassword.addActionListener( this );
+ }
+
+
+ public void actionPerformed( ActionEvent e )
+ {
+ if ( getServiceUrl() == null )
+ {
+ txtUrl.requestFocus();
+ }
+ else
+ {
+ login();
+ }
+
+ }
+
+
+ private void login()
+ {
+ if ( loginHandler != null )
+ {
+ loginHandler.login( txtUserName.getText(), txtPassword.getPassword() );
+ }
+
+ }
+
+
+ public URL getServiceUrl()
+ {
+
+ try
+ {
+ return new URL( txtUrl.getText().trim() );
+ }
+ catch ( MalformedURLException e )
+ {
+ return null;
+ }
+ }
+
+
+ public void clearPassword()
+ {
+ txtPassword.setText( "" );
+ }
+
+
+ public void setLoginHandler( LoginHandler loginHandler )
+ {
+ this.loginHandler = loginHandler;
+ }
+
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents()
+ {
+
+ lblPassword = new javax.swing.JLabel();
+ lblUserName = new javax.swing.JLabel();
+ btnLogin = new javax.swing.JButton();
+ jLabel1 = new javax.swing.JLabel();
+ txtUserName = new javax.swing.JTextField();
+ txtPassword = new javax.swing.JPasswordField();
+ lblUrl = new javax.swing.JLabel();
+ txtUrl = new javax.swing.JTextField();
+
+ lblPassword.setText( "Password:" );
+
+ lblUserName.setText( "User Name:" );
+
+ btnLogin.setText( "Login" );
+
+ jLabel1.setText( "e.x uid=admin,ou=system" );
+
+ lblUrl.setText( "ServiceURL:" );
+
+ txtUrl.setText( "http://localhost:7009/adminapp/ldap" );
+
+ org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout( this );
+ this.setLayout( layout );
+ layout.setHorizontalGroup( layout.createParallelGroup( org.jdesktop.layout.GroupLayout.LEADING )
+ .add(
+ layout
+ .createSequentialGroup()
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.LEADING )
+ .add( layout.createSequentialGroup().add( 177, 177, 177 ).add( jLabel1 ) )
+ .add( layout.createSequentialGroup().add( 204, 204, 204 ).add( btnLogin ) )
+ .add(
+ layout
+ .createSequentialGroup()
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.LEADING, false )
+ .add(
+ org.jdesktop.layout.GroupLayout.TRAILING,
+ layout
+ .createSequentialGroup()
+ .addContainerGap( org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
+ Short.MAX_VALUE ).add( lblPassword ).add( 1, 1, 1 ) )
+ .add(
+ layout
+ .createSequentialGroup()
+ .add( 96, 96, 96 )
+ .add(
+ layout
+ .createParallelGroup(
+ org.jdesktop.layout.GroupLayout.LEADING )
+ .add( lblUrl,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 73,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE )
+ .add( lblUserName ) ) ) )
+ .add( 1, 1, 1 )
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.LEADING )
+ .add( txtUrl, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 269,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE )
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.TRAILING,
+ false )
+ .add( org.jdesktop.layout.GroupLayout.LEADING, txtPassword )
+ .add( org.jdesktop.layout.GroupLayout.LEADING, txtUserName,
+ org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 206,
+ Short.MAX_VALUE ) ) ) ) )
+ .addContainerGap( 122, Short.MAX_VALUE ) ) );
+ layout.setVerticalGroup( layout.createParallelGroup( org.jdesktop.layout.GroupLayout.LEADING ).add(
+ layout
+ .createSequentialGroup()
+ .add( 31, 31, 31 )
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.BASELINE )
+ .add( txtUrl, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
+ org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE ).add( lblUrl ) )
+ .addPreferredGap( org.jdesktop.layout.LayoutStyle.RELATED )
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.BASELINE )
+ .add( lblUserName )
+ .add( txtUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
+ org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE ) )
+ .add( 2, 2, 2 )
+ .add( jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 12,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE )
+ .addPreferredGap( org.jdesktop.layout.LayoutStyle.RELATED )
+ .add(
+ layout
+ .createParallelGroup( org.jdesktop.layout.GroupLayout.BASELINE )
+ .add( txtPassword, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
+ org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
+ org.jdesktop.layout.GroupLayout.PREFERRED_SIZE ).add( lblPassword ) )
+ .addPreferredGap( org.jdesktop.layout.LayoutStyle.RELATED ).add( btnLogin )
+ .addContainerGap( 64, Short.MAX_VALUE ) ) );
+ }// </editor-fold>//GEN-END:initComponents
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+
+ private javax.swing.JButton btnLogin;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel lblPassword;
+ private javax.swing.JLabel lblUrl;
+ private javax.swing.JLabel lblUserName;
+ private javax.swing.JPasswordField txtPassword;
+ private javax.swing.JTextField txtUrl;
+ private javax.swing.JTextField txtUserName;
+ // End of variables declaration//GEN-END:variables
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.form
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.form?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.form (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.form Sun Sep 5 17:13:58 2010
@@ -0,0 +1,71 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+ <Properties>
+ <Property name="defaultCloseOperation" type="int" value="3"/>
+ </Properties>
+ <SyntheticProperties>
+ <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+ </SyntheticProperties>
+ <AuxValues>
+ <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+ <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+ <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+ </AuxValues>
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Component id="topPanel" alignment="0" max="32767" attributes="0"/>
+ <Component id="middleSplitPanel" alignment="0" pref="964" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <Component id="topPanel" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="middleSplitPanel" pref="488" max="32767" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Container class="javax.swing.JPanel" name="topPanel">
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace min="-2" pref="471" max="-2" attributes="0"/>
+ <Component id="lblUserName" min="-2" pref="159" max="-2" attributes="0"/>
+ <EmptySpace pref="334" max="32767" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Component id="lblUserName" alignment="0" pref="28" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Component class="javax.swing.JLabel" name="lblUserName">
+ </Component>
+ </SubComponents>
+ </Container>
+ <Container class="javax.swing.JSplitPane" name="middleSplitPanel">
+ <Properties>
+ <Property name="dividerLocation" type="int" value="130"/>
+ </Properties>
+
+ <Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
+ </Container>
+ </SubComponents>
+</Form>
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/MainWindow.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,375 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/*
+ * MainWindow.java
+ *
+ * Created on Aug 26, 2010, 7:25:52 PM
+ */
+package org.apache.directory.http.client.ui;
+
+
+import java.awt.Component;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.event.TreeExpansionEvent;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.event.TreeWillExpandListener;
+import javax.swing.tree.ExpandVetoException;
+import javax.swing.tree.TreePath;
+
+import org.apache.directory.http.client.LdapHttpConnection;
+import org.apache.directory.http.client.data.model.ConfigDataLoader;
+import org.apache.directory.http.client.ui.callback.ConfigButtonSelectionHandler;
+import org.apache.directory.http.client.ui.callback.LoginHandler;
+import org.apache.directory.http.client.ui.model.EntryNode;
+import org.apache.directory.http.client.ui.model.EntryTableModel;
+import org.apache.directory.shared.ldap.cursor.Cursor;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.filter.SearchScope;
+import org.apache.directory.shared.ldap.message.BindResponse;
+import org.apache.directory.shared.ldap.message.Response;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.message.SearchResultEntry;
+import org.apache.directory.shared.ldap.name.DN;
+
+
+/**
+ *
+ * @author kayyagari
+ */
+public class MainWindow extends javax.swing.JFrame implements LoginHandler, ConfigButtonSelectionHandler
+{
+
+ private LoginPanel loginPanel;
+
+ private ConfigButtonPanel configBtnPanel;
+
+ private PartitionsPanel partitonsPanel;
+
+ private InterceptorPanel interceptorPanel;
+
+ private LdapHttpConnection connection;
+
+ private ConfigDataLoader dataLoader;
+
+ private BrowserPanel browser;
+
+ private EntryTableModel model;
+
+ /** Creates new form MainWindow */
+ public MainWindow()
+ {
+ initComponents();
+
+ setTitle( "LDAP browser using HTTP as transport and using JSON for data exchange" );
+ loginPanel = new LoginPanel();
+ loginPanel.setLoginHandler( this );
+
+ configBtnPanel = new ConfigButtonPanel();
+ configBtnPanel.getBtnPartitions().setVisible( false );
+ configBtnPanel.setButtonSelectionHandler( this );
+ middleSplitPanel.setLeftComponent( configBtnPanel );
+ configBtnPanel.setVisible( false );
+ middleSplitPanel.setRightComponent( loginPanel );
+ addWindowListener( new WindowAdapter()
+ {
+
+ @Override
+ public void windowClosing( WindowEvent e )
+ {
+ try
+ {
+ if( connection != null )
+ {
+ connection.unBind();
+ }
+ }
+ catch( Exception ex )
+ {
+ ex.printStackTrace();
+ }
+ }
+ });
+ }
+
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ topPanel = new javax.swing.JPanel();
+ lblUserName = new javax.swing.JLabel();
+ middleSplitPanel = new javax.swing.JSplitPane();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+ org.jdesktop.layout.GroupLayout topPanelLayout = new org.jdesktop.layout.GroupLayout(topPanel);
+ topPanel.setLayout(topPanelLayout);
+ topPanelLayout.setHorizontalGroup(
+ topPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(topPanelLayout.createSequentialGroup()
+ .add(471, 471, 471)
+ .add(lblUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 159, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(334, Short.MAX_VALUE))
+ );
+ topPanelLayout.setVerticalGroup(
+ topPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(lblUserName, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE)
+ );
+
+ middleSplitPanel.setDividerLocation(130);
+
+ org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(topPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(middleSplitPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 964, Short.MAX_VALUE)
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(layout.createSequentialGroup()
+ .add(topPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(middleSplitPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 488, Short.MAX_VALUE))
+ );
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main( String args[] )
+ {
+ java.awt.EventQueue.invokeLater( new Runnable()
+ {
+
+ public void run()
+ {
+ new MainWindow().setVisible( true );
+ }
+
+ } );
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JLabel lblUserName;
+ private javax.swing.JSplitPane middleSplitPanel;
+ private javax.swing.JPanel topPanel;
+ // End of variables declaration//GEN-END:variables
+ public void login( String userName, char[] password )
+ {
+ try
+ {
+ connection = new LdapHttpConnection( loginPanel.getServiceUrl() );
+ BindResponse resp = connection.bind( userName, String.valueOf( password ) );
+ if ( resp.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS )
+ {
+ loginPanel.clearPassword();
+ loginPanel.setVisible( false );
+
+ lblUserName.setText( userName.trim() );
+
+ dataLoader = new ConfigDataLoader( connection );
+ showNavigationPane();
+ setRightPane( new JPanel() );
+ }
+ else
+ {
+ JOptionPane.showMessageDialog( this, resp );
+ }
+
+ }
+ catch ( Exception e )
+ {
+ JOptionPane.showMessageDialog( this, e );
+ }
+ }
+
+
+ public void handleConfigSelection( JButton eventSrc )
+ {
+ try
+ {
+ if ( eventSrc == configBtnPanel.getBtnPartitions() )
+ {
+ partitonsPanel = new PartitionsPanel();
+ setRightPane( partitonsPanel );
+ }
+ else if ( eventSrc == configBtnPanel.getBtnInterceptors() )
+ {
+ interceptorPanel = new InterceptorPanel();
+ interceptorPanel.setEntryData( dataLoader.getInterceptors() );
+ setRightPane( interceptorPanel );
+ }
+ else if ( eventSrc == configBtnPanel.getBtnBrowse() )
+ {
+ showBrowser();
+ }
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void showBrowser()
+ {
+ try
+ {
+ if ( browser == null )
+ {
+ browser = new BrowserPanel();
+
+ model = new EntryTableModel();
+
+ browser.getEntryTable().setModel( model );
+
+ EntryNode root = new EntryNode( connection.fetchRootDSE() );
+
+ List<Entry> entries = searchEntriesUnder( DN.EMPTY_DN );
+
+ for ( Entry e : entries )
+ {
+ EntryNode node = new EntryNode( e );
+ node.setAllowsChildren( true );
+ root.add( node );
+ }
+
+ browser.setRootDse( root );
+
+ browser.getEntryTree().addTreeWillExpandListener( new TreeWillExpandListener()
+ {
+
+ public void treeWillExpand( TreeExpansionEvent event ) throws ExpandVetoException
+ {
+ try
+ {
+ EntryNode node = ( EntryNode ) event.getPath().getLastPathComponent();
+ browser.addEntriesToTreeUnder( searchEntriesUnder( node.getDn() ), node );
+ }
+ catch ( Exception e )
+ {
+ JOptionPane.showMessageDialog( null, e );
+ }
+ }
+
+
+ public void treeWillCollapse( TreeExpansionEvent event ) throws ExpandVetoException
+ {
+ }
+ } );
+
+ browser.getEntryTree().addTreeSelectionListener( new TreeSelectionListener()
+ {
+
+ public void valueChanged( TreeSelectionEvent e )
+ {
+ TreePath path = e.getNewLeadSelectionPath();
+
+ EntryNode node = ( EntryNode ) path.getLastPathComponent();
+ try
+ {
+ Entry entry = populateEntry( node.getDn() );
+ if( entry == null )
+ {
+ JOptionPane.showMessageDialog( null, "entry with DN " + node.getDn() + " doesn't exist" );
+ return;
+ }
+
+ node.setEntry( entry );
+ model.setEntry( node.getEntry() );
+ model.fireTableDataChanged();
+ }
+ catch( Exception ex )
+ {
+ ex.printStackTrace();
+ JOptionPane.showMessageDialog( null, ex );
+ }
+ }
+ } );
+ }
+
+ setRightPane( browser );
+ }
+ catch ( Exception e )
+ {
+
+ }
+ }
+
+
+ private void showNavigationPane()
+ {
+ middleSplitPanel.getLeftComponent().setVisible( true );
+ }
+
+
+ private void hideNavigationPane()
+ {
+ middleSplitPanel.getLeftComponent().setVisible( false );
+ }
+
+
+ private void setNavigationPane( Component comp )
+ {
+ middleSplitPanel.setLeftComponent( comp );
+ }
+
+
+ private void setRightPane( Component comp )
+ {
+ middleSplitPanel.setRightComponent( comp );
+ }
+
+
+ private void showRightPane()
+ {
+ middleSplitPanel.getRightComponent().setVisible( true );
+ }
+
+
+ private void hideRightPane()
+ {
+ middleSplitPanel.getRightComponent().setVisible( false );
+ }
+
+ private Entry populateEntry( DN entryDn ) throws Exception
+ {
+ return connection.lookup( entryDn, "*", "+" );
+ }
+
+
+ private List<Entry> searchEntriesUnder( DN baseDn ) throws Exception
+ {
+ List<Entry> entries = new ArrayList<Entry>();
+
+ Cursor<Response> cursor = connection.search( baseDn, "(objectClass=*)", SearchScope.ONELEVEL, "1.1" );
+ while ( cursor.next() )
+ {
+ Entry entry = ( ( SearchResultEntry ) cursor.get() ).getEntry();
+ entries.add( entry );
+ }
+
+ cursor.close();
+ return entries;
+ }
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.form
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.form?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.form (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.form Sun Sep 5 17:13:58 2010
@@ -0,0 +1,91 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+ <AuxValues>
+ <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+ <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+ <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+ </AuxValues>
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Component id="jScrollPane2" alignment="0" min="-2" pref="238" max="-2" attributes="0"/>
+ <Component id="jScrollPane1" alignment="0" min="-2" pref="150" max="-2" attributes="0"/>
+ <Component id="lblPartitions" alignment="0" min="-2" pref="74" max="-2" attributes="0"/>
+ <Component id="lblIndexes" alignment="0" min="-2" pref="79" max="-2" attributes="0"/>
+ </Group>
+ <EmptySpace pref="304" max="32767" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="lblPartitions" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="jScrollPane1" min="-2" pref="102" max="-2" attributes="0"/>
+ <EmptySpace type="separate" max="-2" attributes="0"/>
+ <Component id="lblIndexes" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="jScrollPane2" min="-2" max="-2" attributes="0"/>
+ <EmptySpace pref="34" max="32767" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Component class="javax.swing.JLabel" name="lblPartitions">
+ <Properties>
+ <Property name="text" type="java.lang.String" value="Partitions"/>
+ </Properties>
+ </Component>
+ <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+ <AuxValues>
+ <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+ </AuxValues>
+
+ <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+ <SubComponents>
+ <Component class="javax.swing.JList" name="lstPartitions">
+ <Properties>
+ <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+ <StringArray count="0"/>
+ </Property>
+ </Properties>
+ </Component>
+ </SubComponents>
+ </Container>
+ <Component class="javax.swing.JLabel" name="lblIndexes">
+ <Properties>
+ <Property name="text" type="java.lang.String" value="Indexes"/>
+ </Properties>
+ </Component>
+ <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+ <AuxValues>
+ <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+ </AuxValues>
+
+ <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+ <SubComponents>
+ <Component class="javax.swing.JList" name="lstIndexes">
+ <Properties>
+ <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+ <StringArray count="0"/>
+ </Property>
+ </Properties>
+ </Component>
+ </SubComponents>
+ </Container>
+ </SubComponents>
+</Form>
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/PartitionsPanel.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,87 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/*
+ * PartitionsPanel.java
+ *
+ * Created on Aug 22, 2010, 11:41:42 PM
+ */
+
+package org.apache.directory.http.client.ui;
+
+/**
+ *
+ * @author kayyagari
+ */
+public class PartitionsPanel extends javax.swing.JPanel {
+
+ /** Creates new form PartitionsPanel */
+ public PartitionsPanel() {
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ lblPartitions = new javax.swing.JLabel();
+ jScrollPane1 = new javax.swing.JScrollPane();
+ lstPartitions = new javax.swing.JList();
+ lblIndexes = new javax.swing.JLabel();
+ jScrollPane2 = new javax.swing.JScrollPane();
+ lstIndexes = new javax.swing.JList();
+
+ lblPartitions.setText("Partitions");
+
+ jScrollPane1.setViewportView(lstPartitions);
+
+ lblIndexes.setText("Indexes");
+
+ jScrollPane2.setViewportView(lstIndexes);
+
+ org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(layout.createSequentialGroup()
+ .addContainerGap()
+ .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 238, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 150, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(lblPartitions, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 74, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(lblIndexes, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 79, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addContainerGap(304, Short.MAX_VALUE))
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(layout.createSequentialGroup()
+ .addContainerGap()
+ .add(lblPartitions)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 102, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(18, 18, 18)
+ .add(lblIndexes)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(34, Short.MAX_VALUE))
+ );
+ }// </editor-fold>//GEN-END:initComponents
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JScrollPane jScrollPane1;
+ private javax.swing.JScrollPane jScrollPane2;
+ private javax.swing.JLabel lblIndexes;
+ private javax.swing.JLabel lblPartitions;
+ private javax.swing.JList lstIndexes;
+ private javax.swing.JList lstPartitions;
+ // End of variables declaration//GEN-END:variables
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigAware.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigAware.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigAware.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigAware.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,18 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.directory.http.client.ui.callback;
+
+import java.util.List;
+
+import org.apache.directory.http.client.data.model.EntryData;
+
+/**
+ *
+ * @author kayyagari
+ */
+public interface ConfigAware
+{
+ void setEntryData( List<EntryData> data );
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigButtonSelectionHandler.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigButtonSelectionHandler.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigButtonSelectionHandler.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigButtonSelectionHandler.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,16 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.directory.http.client.ui.callback;
+
+import javax.swing.JButton;
+
+/**
+ *
+ * @author kayyagari
+ */
+public interface ConfigButtonSelectionHandler {
+void handleConfigSelection( JButton eventSrc );
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigModificationHandler.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigModificationHandler.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigModificationHandler.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/ConfigModificationHandler.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,16 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.directory.http.client.ui.callback;
+
+/**
+ *
+ * @author kayyagari
+ */
+public interface ConfigModificationHandler {
+
+ void cancel();
+ void apply();
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/LoginHandler.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/LoginHandler.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/LoginHandler.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/callback/LoginHandler.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,15 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.directory.http.client.ui.callback;
+
+/**
+ *
+ * @author kayyagari
+ */
+public interface LoginHandler {
+
+ void login( String userName, char[] password );
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryNode.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryNode.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryNode.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryNode.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,75 @@
+/*
+ * 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.http.client.ui.model;
+
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.name.DN;
+
+
+/**
+ * TODO EntryNode.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class EntryNode extends DefaultMutableTreeNode
+{
+ private Entry entry;
+
+
+ public EntryNode( Entry entry )
+ {
+ this.entry = entry;
+ }
+
+
+ public Entry getEntry()
+ {
+ return entry;
+ }
+
+
+ public void setEntry( Entry entry )
+ {
+ this.entry = entry;
+ }
+
+ public DN getDn()
+ {
+ return entry.getDn();
+ }
+
+ @Override
+ public String toString()
+ {
+ DN dn = entry.getDn();
+
+ if( DN.EMPTY_DN.equals( dn ) )
+ {
+ return "RootDSE";
+ }
+
+ return dn.getName();
+ }
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryTableModel.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryTableModel.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryTableModel.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/model/EntryTableModel.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,155 @@
+/*
+ * 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.http.client.ui.model;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.table.DefaultTableModel;
+
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+
+
+/**
+ * TODO EntryTableModel.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class EntryTableModel extends DefaultTableModel
+{
+ private Entry entry;
+
+ private int rowCount;
+
+ private Map<String, Object> values = new HashMap<String, Object>();
+
+ private static final String[] COLUMNS =
+ { "Name", "Value" };
+
+ private int rowPos = 0;
+
+
+ public void setEntry( Entry entry )
+ {
+ this.entry = entry;
+
+ rowPos = 0;
+ values.clear();
+ rowCount = 0;
+
+ //first OC
+ EntryAttribute oc = entry.get( SchemaConstants.OBJECT_CLASS_AT );
+
+ if ( oc != null )
+ {
+ rowCount = oc.size();
+ populateValueTable( oc );
+ }
+
+ for ( EntryAttribute ea : entry )
+ {
+ if ( ea.getId().equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT ) )
+ {
+ continue;
+ }
+
+ rowCount += ea.size();
+ populateValueTable( ea );
+ }
+ }
+
+
+ private void populateValueTable( EntryAttribute attr )
+ {
+ String nameCol = null;
+ String valueCol = null;
+ String attrId = attr.getId();
+
+ int attrSize = attr.size();
+
+ for ( int i = 0; i < attrSize; i++ )
+ {
+ nameCol = String.valueOf( rowPos ) + 0;
+ values.put( nameCol, attrId );
+
+ valueCol = String.valueOf( rowPos ) + 1;
+
+ Object val = null;
+ if ( attr.isHR() )
+ {
+ val = attr.get( i ).getString();
+ }
+ else
+ {
+ val = attr.get( i ).getBytes();
+ }
+
+ values.put( valueCol, val );
+
+ rowPos++;
+ }
+ }
+
+
+ @Override
+ public int getColumnCount()
+ {
+ return 2;
+ }
+
+
+ @Override
+ public String getColumnName( int index )
+ {
+ return COLUMNS[index];
+ }
+
+
+ @Override
+ public int getRowCount()
+ {
+ return rowCount;
+ }
+
+
+ @Override
+ public boolean isCellEditable( int row, int column )
+ {
+ return false;
+ }
+
+
+ @Override
+ public Object getValueAt( int row, int column )
+ {
+ Object val = values.get( row + "" + column );
+ if ( val instanceof byte[] )
+ {
+ return "Binary Data, length " + ( ( byte[] ) val ).length + " bytes";
+ }
+
+ return val;
+ }
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/AttributeTableCellRenderer.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/AttributeTableCellRenderer.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/AttributeTableCellRenderer.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/AttributeTableCellRenderer.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,143 @@
+/*
+ * 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.http.client.ui.renderer;
+
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+
+
+/**
+ * TODO AttributeTableCellRenderer.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AttributeTableCellRenderer extends DefaultTableCellRenderer
+{
+
+ protected static Border noFocusBorder = new EmptyBorder( 1, 1, 1, 1 );
+ private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder( 1, 1, 1, 1 );
+
+ private Color unselectedForeground;
+ private Color unselectedBackground;
+
+
+ /**
+ * Overrides <code>JComponent.setForeground</code> to assign
+ * the unselected-foreground color to the specified color.
+ *
+ * @param c set the foreground color to this value
+ */
+ public void setForeground( Color c )
+ {
+ super.setForeground( c );
+ unselectedForeground = c;
+ }
+
+
+ /**
+ * Overrides <code>JComponent.setBackground</code> to assign
+ * the unselected-background color to the specified color.
+ *
+ * @param c set the background color to this value
+ */
+ public void setBackground( Color c )
+ {
+ super.setBackground( c );
+ unselectedBackground = c;
+ }
+
+
+ @Override
+ public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus,
+ int row, int column )
+ {
+ if ( isSelected )
+ {
+ super.setForeground( table.getSelectionForeground() );
+ super.setBackground( table.getSelectionBackground() );
+ }
+ else
+ {
+ super.setForeground( ( unselectedForeground != null ) ? unselectedForeground : table.getForeground() );
+ super.setBackground( ( unselectedBackground != null ) ? unselectedBackground : table.getBackground() );
+ }
+
+ setFont( table.getFont() );
+
+ if ( hasFocus )
+ {
+ Border border = null;
+ if ( isSelected )
+ {
+ border = UIManager.getBorder( "Table.focusSelectedCellHighlightBorder" );
+ }
+ if ( border == null )
+ {
+ border = UIManager.getBorder( "Table.focusCellHighlightBorder" );
+ }
+ setBorder( border );
+
+ if ( !isSelected && table.isCellEditable( row, column ) )
+ {
+ Color col;
+ col = UIManager.getColor( "Table.focusCellForeground" );
+ if ( col != null )
+ {
+ super.setForeground( col );
+ }
+ col = UIManager.getColor( "Table.focusCellBackground" );
+ if ( col != null )
+ {
+ super.setBackground( col );
+ }
+ }
+ }
+ else
+ {
+ setBorder( getNoFocusBorder() );
+ }
+
+ setValue( value );
+
+ return this;
+ }
+
+
+ private static Border getNoFocusBorder()
+ {
+ if ( System.getSecurityManager() != null )
+ {
+ return SAFE_NO_FOCUS_BORDER;
+ }
+ else
+ {
+ return noFocusBorder;
+ }
+ }
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/EntryDataCellRenderer.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/EntryDataCellRenderer.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/EntryDataCellRenderer.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-http-ui/src/main/java/org/apache/directory/http/client/ui/renderer/EntryDataCellRenderer.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,136 @@
+/*
+ * 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.http.client.ui.renderer;
+
+
+import java.awt.Component;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.Icon;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.directory.http.client.data.model.EntryData;
+
+
+/**
+ * TODO EntryDataCellRenderer.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class EntryDataCellRenderer extends DefaultListCellRenderer
+{
+
+ private String attrName;
+
+ protected static Border noFocusBorder = new EmptyBorder( 1, 1, 1, 1 );
+ private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder( 1, 1, 1, 1 );
+
+
+ public EntryDataCellRenderer( String attrName )
+ {
+ this.attrName = attrName;
+ }
+
+
+ public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected,
+ boolean cellHasFocus )
+ {
+ setComponentOrientation( list.getComponentOrientation() );
+ if ( isSelected )
+ {
+ setBackground( list.getSelectionBackground() );
+ setForeground( list.getSelectionForeground() );
+ }
+ else
+ {
+ setBackground( list.getBackground() );
+ setForeground( list.getForeground() );
+ }
+
+ if ( value instanceof Icon )
+ {
+ setIcon( ( Icon ) value );
+ setText( "" );
+ }
+ else
+ {
+ setIcon( null );
+
+ EntryData entry = ( EntryData ) list.getModel().getElementAt( index );
+ try
+ {
+ String name = entry.getString( "ads-interceptorClassName" );
+
+ int dotPos = name.lastIndexOf( '.' ) + 1;
+
+ name = name.substring( dotPos );
+ setText( name );
+ }
+ catch ( Exception e )
+ {
+ setText( entry.toString() );
+ JOptionPane.showMessageDialog( null, e );
+ }
+
+ }
+
+ setEnabled( list.isEnabled() );
+ setFont( list.getFont() );
+
+ Border border = null;
+ if ( cellHasFocus )
+ {
+ if ( isSelected )
+ {
+ border = UIManager.getBorder( "List.focusSelectedCellHighlightBorder" );
+ }
+ if ( border == null )
+ {
+ border = UIManager.getBorder( "List.focusCellHighlightBorder" );
+ }
+ }
+ else
+ {
+ border = getNoFocusBorder();
+ }
+ setBorder( border );
+
+ return this;
+ }
+
+
+ private Border getNoFocusBorder()
+ {
+ if ( System.getSecurityManager() != null )
+ {
+ return SAFE_NO_FOCUS_BORDER;
+ }
+ else
+ {
+ return noFocusBorder;
+ }
+ }
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-webapp/pom.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-webapp/pom.xml?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-webapp/pom.xml (added)
+++ directory/sandbox/kayyagari/http-directory/directory-webapp/pom.xml Sun Sep 5 17:13:58 2010
@@ -0,0 +1,57 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>http-directory</artifactId>
+ <version>1.5.8-SNAPSHOT</version>
+ </parent>
+
+
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>directory-webapp</artifactId>
+ <packaging>war</packaging>
+ <name>http-directory</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>apacheds-http-directory-bridge</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>ldap-json-codec</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>servlet-api-2.5</artifactId>
+ <version>6.1.14</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>1.4</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AppContextListener.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AppContextListener.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AppContextListener.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AppContextListener.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,56 @@
+/*
+ * 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.http;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.directory.server.HttpDirectoryService;
+import org.apache.directory.server.codec.json.JsonBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * TODO AppContextListener.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AppContextListener implements ServletContextListener
+{
+
+ private static final Logger LOG = LoggerFactory.getLogger( AppContextListener.class );
+
+ public void contextInitialized( ServletContextEvent sce )
+ {
+ LOG.debug( "initilizing the context {}", sce.getServletContext().getContextPath() );
+
+ HttpDirectoryService httpDirService = ( HttpDirectoryService ) sce.getServletContext().getAttribute( HttpDirectoryService.KEY );
+ HttpDirectoryServiceHolder.set( httpDirService );
+ JsonBuilder.setSchemaManager( httpDirService.getSchemaManager() );
+ }
+
+
+ public void contextDestroyed( ServletContextEvent sce )
+ {
+ LOG.debug( "destroying the context {}", sce.getServletContext().getContextPath() );
+ }
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AuthenticationFilter.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AuthenticationFilter.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AuthenticationFilter.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/AuthenticationFilter.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,61 @@
+/*
+ * 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.http;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * TODO AuthenticationFilter.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AuthenticationFilter implements Filter
+{
+
+ private static final Logger LOG = LoggerFactory.getLogger( AuthenticationFilter.class );
+
+ public void init( FilterConfig filterConfig ) throws ServletException
+ {
+ }
+
+
+ public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException,
+ ServletException
+ {
+ request.isSecure();
+ }
+
+
+ public void destroy()
+ {
+ }
+
+}
Added: directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServiceHolder.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServiceHolder.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServiceHolder.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServiceHolder.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,47 @@
+/*
+ * 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.http;
+
+
+import org.apache.directory.server.HttpDirectoryService;
+
+
+/**
+ * TODO HttpDirectoryServiceHolder.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class HttpDirectoryServiceHolder
+{
+ private static HttpDirectoryService httpDirServie;
+
+
+ public static void set( HttpDirectoryService httpDirServie )
+ {
+ HttpDirectoryServiceHolder.httpDirServie = httpDirServie;
+ }
+
+
+ public static HttpDirectoryService get()
+ {
+ return httpDirServie;
+ }
+}
Added: directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServlet.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServlet.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServlet.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/HttpDirectoryServlet.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,416 @@
+/*
+ * 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.http;
+
+
+import static org.apache.directory.server.http.AppConstants.*;
+import static org.apache.directory.server.http.AppConstants.BIND_URI;
+import static org.apache.directory.server.http.AppConstants.LDAP_RESULT_KEY;
+import static org.apache.directory.server.http.AppConstants.MODIFY_URI;
+import static org.apache.directory.server.http.AppConstants.SEARCH_RESULTS_KEY;
+import static org.apache.directory.server.http.AppConstants.SEARCH_URI;
+import static org.apache.directory.server.http.AppConstants.SESSION_ID;
+import static org.apache.directory.server.http.AppConstants.UNBIND_URI;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.lang.reflect.Type;
+import java.nio.ByteBuffer;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.server.BindResponseHolder;
+import org.apache.directory.server.codec.json.JsonBuilder;
+import org.apache.directory.server.core.EntryToResponseCursor;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.exception.LdapException;
+import org.apache.directory.shared.ldap.message.AbstractResultResponse;
+import org.apache.directory.shared.ldap.message.AddRequestImpl;
+import org.apache.directory.shared.ldap.message.AddResponse;
+import org.apache.directory.shared.ldap.message.BindRequestImpl;
+import org.apache.directory.shared.ldap.message.BindResponse;
+import org.apache.directory.shared.ldap.message.CompareRequestImpl;
+import org.apache.directory.shared.ldap.message.CompareResponse;
+import org.apache.directory.shared.ldap.message.DeleteRequestImpl;
+import org.apache.directory.shared.ldap.message.DeleteResponse;
+import org.apache.directory.shared.ldap.message.ModifyDnRequestImpl;
+import org.apache.directory.shared.ldap.message.ModifyDnResponse;
+import org.apache.directory.shared.ldap.message.ModifyRequest;
+import org.apache.directory.shared.ldap.message.ModifyRequestImpl;
+import org.apache.directory.shared.ldap.message.ModifyResponse;
+import org.apache.directory.shared.ldap.message.Response;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.message.ResultResponse;
+import org.apache.directory.shared.ldap.message.SearchRequestImpl;
+import org.apache.directory.shared.ldap.message.SearchResultEntry;
+import org.apache.directory.shared.ldap.util.StringTools;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+
+
+/**
+ * TODO AuthenticationServlet.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class HttpDirectoryServlet extends HttpServlet
+{
+
+ private static final Logger LOG = LoggerFactory.getLogger( HttpDirectoryServlet.class );
+
+ private int sessionInterval = 20 * 60 * 60;
+
+ private static final ConcurrentHashMap<String, LdapConnection> CONNECTIONS = new ConcurrentHashMap<String, LdapConnection>();
+
+ private Type commonRespType = new TypeToken<AbstractResultResponse>()
+ {
+ }.getType();
+
+
+ @Override
+ protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
+ {
+
+ String uri = req.getRequestURI();
+
+ LOG.debug( "received request to {} from {}", uri, req.getRemoteAddr() );
+
+ uri = removeTrailingSlash( uri );
+
+ String sessionId = req.getHeader( SESSION_ID );
+
+ if ( sessionId != null )
+ {
+ if ( !CONNECTIONS.containsKey( sessionId ) )
+ {
+ LOG.debug( "no session exists with the received session id {}", sessionId );
+ sessionId = null;
+ }
+ }
+
+ if ( uri.endsWith( BIND_URI ) )
+ {
+ if ( sessionId != null )
+ {
+ resp.getWriter().write( "{'message':'session already exists'}" );
+ return;
+ }
+
+ bind( req, resp );
+ return;
+ }
+
+ if ( sessionId == null )
+ {
+ resp.getWriter().write( "{'message':'there is no session associated, need to rebind'}" );
+ return;
+ }
+
+ if ( uri.endsWith( UNBIND_URI ) )
+ {
+ unbind( req, resp, sessionId );
+ return;
+ }
+
+ LdapConnection connection = CONNECTIONS.get( sessionId );
+
+ if ( uri.endsWith( SEARCH_URI ) )
+ {
+ search( req, resp, connection );
+ }
+ else if ( uri.endsWith( MODIFY_URI ) )
+ {
+ modify( req, resp, connection );
+ }
+ else if ( uri.endsWith( ADD_URI ) )
+ {
+ add( req, resp, connection );
+ }
+ else if ( uri.endsWith( DELETE_URI ) )
+ {
+ delete( req, resp, connection );
+ }
+ else if ( uri.endsWith( MODIFY_DN_URI ) )
+ {
+ modifyDn( req, resp, connection );
+ }
+ else if ( uri.endsWith( COMPARE_URI ) )
+ {
+ compare( req, resp, connection );
+ }
+ }
+
+
+ private void bind( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
+ {
+ String json = getPostData( req );
+
+ BindRequestImpl bindReq = JsonBuilder.get().fromJson( json, BindRequestImpl.class );
+ BindResponseHolder bindRespHolder = HttpDirectoryServiceHolder.get().bind( bindReq );
+
+ BindResponse bindResp = bindRespHolder.getResponse();
+
+ if ( bindResp.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS )
+ {
+ LdapConnection connection = bindRespHolder.getConnection();
+
+ String key = UUID.randomUUID().toString();
+
+ CONNECTIONS.put( key, connection );
+
+ resp.setHeader( SESSION_ID, key );
+ }
+
+ resp.getWriter().write( JsonBuilder.get().toJson( bindResp ) );
+ resp.getWriter().flush();
+ }
+
+
+ private void search( HttpServletRequest req, HttpServletResponse resp, LdapConnection connection )
+ throws ServletException, IOException
+ {
+ String reqJson = getPostData( req );
+
+ SearchRequestImpl searchReq = JsonBuilder.get().fromJson( reqJson, SearchRequestImpl.class );
+ try
+ {
+ EntryToResponseCursor<Response> cursor = ( EntryToResponseCursor<Response> ) connection.search( searchReq );
+ cursor.beforeFirst();
+
+ JsonObject jsonResp = new JsonObject();
+
+ JsonArray ja = new JsonArray();
+ Gson builder = JsonBuilder.get();
+
+ while ( cursor.next() )
+ {
+ Response searchResp = cursor.get();
+ if ( searchResp instanceof SearchResultEntry )
+ {
+ Entry entry = ( ( SearchResultEntry ) searchResp ).getEntry();
+
+ LOG.debug( "processing search result entry with dn {}", entry.getDn() );
+
+ JsonElement entryElement = builder.toJsonTree( entry );
+ ja.add( entryElement );
+ }
+ }
+
+ cursor.close();
+
+ jsonResp.add( SEARCH_RESULTS_KEY, ja );
+
+ JsonElement ldapResult = builder.toJsonTree( cursor.getSearchDone() );
+ jsonResp.add( LDAP_RESULT_KEY, ldapResult.getAsJsonObject().get( LDAP_RESULT_KEY ) );
+
+ PrintWriter pw = resp.getWriter();
+ pw.write( jsonResp.toString() );
+ pw.flush();
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void modify( HttpServletRequest req, HttpServletResponse resp, LdapConnection connection )
+ throws ServletException, IOException
+ {
+ String jsonReq = getPostData( req );
+ ModifyRequest modReq = JsonBuilder.fromJson( jsonReq, ModifyRequestImpl.class );
+
+ try
+ {
+ ModifyResponse modResp = connection.modify( modReq );
+ writeResultResponseJson( modResp, resp );
+ }
+ catch ( LdapException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void unbind( HttpServletRequest req, HttpServletResponse resp, String sessionId ) throws ServletException,
+ IOException
+ {
+ try
+ {
+ LdapConnection connection = CONNECTIONS.remove( sessionId );
+ connection.unBind();
+ connection = null;
+ LOG.debug( "connection with session id {} was successfully unbound", sessionId );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void add( HttpServletRequest req, HttpServletResponse resp, LdapConnection connection )
+ throws ServletException, IOException
+ {
+
+ try
+ {
+ String jsonReq = getPostData( req );
+ AddRequestImpl addReq = JsonBuilder.fromJson( jsonReq, AddRequestImpl.class );
+ AddResponse addResp = connection.add( addReq );
+ writeResultResponseJson( addResp, resp );
+ }
+ catch ( LdapException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void delete( HttpServletRequest req, HttpServletResponse resp, LdapConnection connection )
+ throws ServletException, IOException
+ {
+
+ try
+ {
+ String jsonReq = getPostData( req );
+ DeleteRequestImpl deleteReq = JsonBuilder.fromJson( jsonReq, DeleteRequestImpl.class );
+ DeleteResponse deleteResp = connection.delete( deleteReq );
+ writeResultResponseJson( deleteResp, resp );
+ }
+ catch ( LdapException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void modifyDn( HttpServletRequest req, HttpServletResponse resp, LdapConnection connection )
+ throws ServletException, IOException
+ {
+
+ try
+ {
+ String jsonReq = getPostData( req );
+ ModifyDnRequestImpl modDnReq = JsonBuilder.fromJson( jsonReq, ModifyDnRequestImpl.class );
+ ModifyDnResponse modDnResp = connection.modifyDn( modDnReq );
+ writeResultResponseJson( modDnResp, resp );
+ }
+ catch ( LdapException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void compare( HttpServletRequest req, HttpServletResponse resp, LdapConnection connection )
+ throws ServletException, IOException
+ {
+
+ try
+ {
+ String jsonReq = getPostData( req );
+ CompareRequestImpl compareReq = JsonBuilder.fromJson( jsonReq, CompareRequestImpl.class );
+ CompareResponse compareResp = connection.compare( compareReq );
+ writeResultResponseJson( compareResp, resp );
+ }
+ catch ( LdapException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ private void writeResultResponseJson( ResultResponse resultResponse, HttpServletResponse resp ) throws IOException
+ {
+ String jsonResp = JsonBuilder.toJson( resultResponse, commonRespType );
+
+ PrintWriter pw = resp.getWriter();
+ pw.write( jsonResp.toString() );
+ pw.flush();
+ }
+
+
+ private String getPostData( HttpServletRequest req )
+ {
+ try
+ {
+ int len = req.getContentLength();
+ InputStream in = req.getInputStream();
+
+ ByteBuffer data = ByteBuffer.allocate( len );
+
+ byte[] buf = new byte[1024];
+
+ while ( true )
+ {
+ int read = in.read( buf );
+ if ( read > 0 )
+ {
+ data.put( buf, 0, read );
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ data.flip();
+
+ String received = StringTools.utf8ToString( data.array() );
+
+ LOG.debug( "received data {}", received );
+
+ return received;
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+
+ private String removeTrailingSlash( String uri )
+ {
+ if ( uri.endsWith( "/" ) )
+ {
+ uri = uri.substring( 0, uri.length() - 1 );
+ return removeTrailingSlash( uri );
+ }
+
+ return uri;
+ }
+}
Added: directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/LoggingFilter.java
URL: http://svn.apache.org/viewvc/directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/LoggingFilter.java?rev=992827&view=auto
==============================================================================
--- directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/LoggingFilter.java (added)
+++ directory/sandbox/kayyagari/http-directory/directory-webapp/src/main/java/org/apache/directory/server/http/LoggingFilter.java Sun Sep 5 17:13:58 2010
@@ -0,0 +1,60 @@
+/*
+ * 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.http;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * TODO LoggingFilter.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class LoggingFilter implements Filter
+{
+ private static final Logger LOG = LoggerFactory.getLogger( LoggingFilter.class );
+
+ public void init( FilterConfig filterConfig ) throws ServletException
+ {
+ }
+
+ public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException,
+ ServletException
+ {
+ LOG.debug( "received request from {}", request.getRemoteAddr() );
+
+ chain.doFilter( request, response );
+ }
+
+ public void destroy()
+ {
+ }
+
+}