You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2010/03/23 17:15:27 UTC

svn commit: r926643 [2/6] - in /directory/studio/trunk/apacheds-configuration/src/main: java/org/apache/directory/studio/apacheds/configuration/ java/org/apache/directory/studio/apacheds/configuration/editor/ java/org/apache/directory/studio/apacheds/c...

Added: directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/GeneralPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/GeneralPage.java?rev=926643&view=auto
==============================================================================
--- directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/GeneralPage.java (added)
+++ directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/GeneralPage.java Tue Mar 23 16:15:26 2010
@@ -0,0 +1,581 @@
+/*
+ *  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.studio.apacheds.configuration.editor.v156;
+
+
+import org.apache.directory.studio.apacheds.configuration.ApacheDSConfigurationPluginConstants;
+import org.apache.directory.studio.apacheds.configuration.editor.SaveableFormPage;
+import org.apache.directory.studio.apacheds.configuration.editor.ServerConfigurationEditor;
+import org.apache.directory.studio.apacheds.configuration.model.v156.ServerConfigurationV156;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+
+/**
+ * This class represents the General Page of the Server Configuration Editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class GeneralPage extends FormPage implements SaveableFormPage
+{
+    /** The Page ID*/
+    public static final String ID = ServerConfigurationEditor.ID + ".V156.GeneralPage"; //$NON-NLS-1$
+
+    /** The Page Title */
+    private static final String TITLE = Messages.getString( "GeneralPage.General" ); //$NON-NLS-1$
+
+    // UI Fields
+    private Button allowAnonymousAccessCheckbox;
+    private Text maxTimeLimitText;
+    private Text maxSizeLimitText;
+    private Text synchPeriodText;
+    private Text maxThreadsText;
+    private Button enableAccesControlCheckbox;
+    private Button enableKerberosCheckbox;
+    private Button enableChangePasswordCheckbox;
+    private Button denormalizeOpAttrCheckbox;
+    private Button enableLdapCheckbox;
+    private Text ldapPortText;
+    private Button enableLdapsCheckbox;
+    private Text ldapsPortText;
+    private Text kerberosPortText;
+    private Button enableNtpCheckbox;
+    private Text ntpPortText;
+    private Button enableDnsCheckbox;
+    private Text dnsPortText;
+    private Text changePasswordPortText;
+
+
+    /**
+     * Creates a new instance of GeneralPage.
+     *
+     * @param editor
+     *      the associated editor
+     */
+    public GeneralPage( FormEditor editor )
+    {
+        super( editor, ID, TITLE );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
+     */
+    protected void createFormContent( IManagedForm managedForm )
+    {
+        PlatformUI.getWorkbench().getHelpSystem().setHelp( getPartControl(),
+            ApacheDSConfigurationPluginConstants.PLUGIN_ID + "." + "configuration_editor_156" ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        ScrolledForm form = managedForm.getForm();
+        form.setText( Messages.getString( "GeneralPage.General" ) ); //$NON-NLS-1$
+
+        Composite parent = form.getBody();
+        TableWrapLayout twl = new TableWrapLayout();
+        twl.numColumns = 2;
+        parent.setLayout( twl );
+        FormToolkit toolkit = managedForm.getToolkit();
+
+        Composite composite = toolkit.createComposite( parent );
+        composite.setLayout( new GridLayout() );
+        TableWrapData compositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 1, 2 );
+        compositeTableWrapData.grabHorizontal = true;
+        composite.setLayoutData( compositeTableWrapData );
+
+        Composite leftComposite = toolkit.createComposite( parent );
+        leftComposite.setLayout( new GridLayout() );
+        TableWrapData leftCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP );
+        leftCompositeTableWrapData.grabHorizontal = true;
+        leftComposite.setLayoutData( leftCompositeTableWrapData );
+
+        Composite rightComposite = toolkit.createComposite( parent );
+        rightComposite.setLayout( new GridLayout() );
+        TableWrapData rightCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP );
+        rightCompositeTableWrapData.grabHorizontal = true;
+        rightComposite.setLayoutData( rightCompositeTableWrapData );
+
+        createProtocolsSection( composite, toolkit );
+        createLimitsSection( leftComposite, toolkit );
+        createOptionsSection( rightComposite, toolkit );
+
+        initFromInput();
+        addListeners();
+    }
+
+
+    /**
+     * Creates the Protocols Section
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the toolkit to use
+     */
+    private void createProtocolsSection( Composite parent, FormToolkit toolkit )
+    {
+        // Creation of the section
+        Section section = toolkit.createSection( parent, Section.TITLE_BAR );
+        section.setText( Messages.getString( "GeneralPage.Protocols" ) ); //$NON-NLS-1$
+        section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        Composite client = toolkit.createComposite( section );
+        toolkit.paintBordersFor( client );
+        client.setLayout( new GridLayout( 3, true ) );
+        section.setClient( client );
+
+        // LDAP
+        Composite ldapProtocolComposite = createProtocolComposite( toolkit, client );
+        enableLdapCheckbox = toolkit.createButton( ldapProtocolComposite,
+            Messages.getString( "GeneralPage.EnableLDAP" ), SWT.CHECK ); //$NON-NLS-1$
+        enableLdapCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false, 3, 1 ) );
+        toolkit.createLabel( ldapProtocolComposite, "    " ); //$NON-NLS-1$
+        toolkit.createLabel( ldapProtocolComposite, Messages.getString( "GeneralPage.Port" ) ); //$NON-NLS-1$
+        ldapPortText = createPortText( toolkit, ldapProtocolComposite );
+
+        // LDAPS
+        Composite ldapsProtocolComposite = createProtocolComposite( toolkit, client );
+        enableLdapsCheckbox = toolkit.createButton( ldapsProtocolComposite, Messages
+            .getString( "GeneralPage.EnableLDAPS" ), SWT.CHECK ); //$NON-NLS-1$
+        enableLdapsCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false, 3, 1 ) );
+        toolkit.createLabel( ldapsProtocolComposite, "    " ); //$NON-NLS-1$
+        toolkit.createLabel( ldapsProtocolComposite, Messages.getString( "GeneralPage.Port" ) ); //$NON-NLS-1$
+        ldapsPortText = createPortText( toolkit, ldapsProtocolComposite );
+
+        // Kerberos
+        Composite kerberosProtocolComposite = createProtocolComposite( toolkit, client );
+        enableKerberosCheckbox = toolkit.createButton( kerberosProtocolComposite, Messages
+            .getString( "GeneralPage.EnableKerberos" ), SWT.CHECK ); //$NON-NLS-1$
+        enableKerberosCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false, 3, 1 ) );
+        toolkit.createLabel( kerberosProtocolComposite, "    " ); //$NON-NLS-1$
+        toolkit.createLabel( kerberosProtocolComposite, Messages.getString( "GeneralPage.Port" ) ); //$NON-NLS-1$
+        kerberosPortText = createPortText( toolkit, kerberosProtocolComposite );
+
+        // NTP
+        Composite ntpProtocolComposite = createProtocolComposite( toolkit, client );
+        enableNtpCheckbox = toolkit.createButton( ntpProtocolComposite,
+            Messages.getString( "GeneralPage.EnableNTP" ), SWT.CHECK ); //$NON-NLS-1$
+        enableNtpCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false, 3, 1 ) );
+        toolkit.createLabel( ntpProtocolComposite, "    " ); //$NON-NLS-1$
+        toolkit.createLabel( ntpProtocolComposite, Messages.getString( "GeneralPage.Port" ) ); //$NON-NLS-1$
+        ntpPortText = createPortText( toolkit, ntpProtocolComposite );
+
+        // DNS
+        Composite dnsProtocolComposite = createProtocolComposite( toolkit, client );
+        enableDnsCheckbox = toolkit.createButton( dnsProtocolComposite,
+            Messages.getString( "GeneralPage.EnableDNS" ), SWT.CHECK ); //$NON-NLS-1$
+        enableDnsCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false, 3, 1 ) );
+        toolkit.createLabel( dnsProtocolComposite, "    " ); //$NON-NLS-1$
+        toolkit.createLabel( dnsProtocolComposite, Messages.getString( "GeneralPage.Port" ) ); //$NON-NLS-1$
+        dnsPortText = createPortText( toolkit, dnsProtocolComposite );
+
+        // Change Password
+        Composite changePasswordProtocolComposite = createProtocolComposite( toolkit, client );
+        enableChangePasswordCheckbox = toolkit.createButton( changePasswordProtocolComposite, Messages
+            .getString( "GeneralPage.EnableChangePassword" ), //$NON-NLS-1$
+            SWT.CHECK );
+        enableChangePasswordCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false, 3, 1 ) );
+        toolkit.createLabel( changePasswordProtocolComposite, "    " ); //$NON-NLS-1$
+        toolkit.createLabel( changePasswordProtocolComposite, Messages.getString( "GeneralPage.Port" ) ); //$NON-NLS-1$
+        changePasswordPortText = createPortText( toolkit, changePasswordProtocolComposite );
+    }
+
+
+    /**
+     * Creates a Protocol Composite : a Composite composed of a GridLayout with
+     * 3 columns and marginHeight and marginWidth set to 0.
+     *
+     * @param toolkit
+     *      the toolkit
+     * @param parent
+     *      the parent
+     * @return
+     *      a Protocol Composite
+     */
+    private Composite createProtocolComposite( FormToolkit toolkit, Composite parent )
+    {
+        Composite protocolComposite = toolkit.createComposite( parent );
+        GridLayout protocolGridLayout = new GridLayout( 3, false );
+        protocolGridLayout.marginHeight = protocolGridLayout.marginWidth = 0;
+        toolkit.paintBordersFor( protocolComposite );
+        protocolComposite.setLayout( protocolGridLayout );
+
+        return protocolComposite;
+    }
+
+
+    /**
+     * Creates a Text that can be used to enter a port number.
+     *
+     * @param toolkit
+     *      the toolkit
+     * @param parent
+     *      the parent
+     * @return
+     *      a Text that can be used to enter a port number
+     */
+    private Text createPortText( FormToolkit toolkit, Composite parent )
+    {
+        Text portText = toolkit.createText( parent, "" ); //$NON-NLS-1$
+        GridData gd = new GridData( SWT.NONE, SWT.NONE, false, false );
+        gd.widthHint = 42;
+        portText.setLayoutData( gd );
+        portText.addVerifyListener( new VerifyListener()
+        {
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+        portText.setTextLimit( 5 );
+
+        return portText;
+    }
+
+
+    /**
+     * Creates the Limits Section
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the toolkit to use
+     */
+    private void createLimitsSection( Composite parent, FormToolkit toolkit )
+    {
+        // Creation of the section
+        Section section = toolkit.createSection( parent, Section.TITLE_BAR );
+        section.setText( Messages.getString( "GeneralPage.Limits" ) ); //$NON-NLS-1$
+        section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        Composite client = toolkit.createComposite( section );
+        toolkit.paintBordersFor( client );
+        GridLayout glayout = new GridLayout( 2, false );
+        client.setLayout( glayout );
+        section.setClient( client );
+
+        // Max. Time Limit
+        toolkit.createLabel( client, Messages.getString( "GeneralPage.MaxTimeLimit" ) ); //$NON-NLS-1$
+        maxTimeLimitText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        maxTimeLimitText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        maxTimeLimitText.addVerifyListener( new VerifyListener()
+        {
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+
+        // Max. Size Limit
+        toolkit.createLabel( client, Messages.getString( "GeneralPage.MaxSizeLimit" ) ); //$NON-NLS-1$
+        maxSizeLimitText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        maxSizeLimitText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        maxSizeLimitText.addVerifyListener( new VerifyListener()
+        {
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+
+        // Synchronization Period
+        toolkit.createLabel( client, Messages.getString( "GeneralPage.SyncPeriod" ) ); //$NON-NLS-1$
+        synchPeriodText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        synchPeriodText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        synchPeriodText.addVerifyListener( new VerifyListener()
+        {
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+
+        // Max. Threads
+        toolkit.createLabel( client, Messages.getString( "GeneralPage.MaxThreads" ) ); //$NON-NLS-1$
+        maxThreadsText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        maxThreadsText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        maxThreadsText.addVerifyListener( new VerifyListener()
+        {
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+    }
+
+
+    /**
+     * Creates the Options Section
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the toolkit to use
+     */
+    private void createOptionsSection( Composite parent, FormToolkit toolkit )
+    {
+        // Creation of the section
+        Section section = toolkit.createSection( parent, Section.TITLE_BAR );
+        section.setText( Messages.getString( "GeneralPage.Options" ) ); //$NON-NLS-1$
+        section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        Composite client = toolkit.createComposite( section );
+        toolkit.paintBordersFor( client );
+        client.setLayout( new GridLayout() );
+        section.setClient( client );
+
+        // Allow Anonymous Access
+        allowAnonymousAccessCheckbox = toolkit.createButton( client, Messages
+            .getString( "GeneralPage.AllowAnonymousAccess" ), SWT.CHECK ); //$NON-NLS-1$
+        allowAnonymousAccessCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false ) );
+
+        // Enable Access Control
+        enableAccesControlCheckbox = toolkit.createButton( client, Messages
+            .getString( "GeneralPage.EnableAccessControl" ), SWT.CHECK ); //$NON-NLS-1$
+        enableAccesControlCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false ) );
+
+        // Denormalize Operational Attributes
+        denormalizeOpAttrCheckbox = toolkit.createButton( client, Messages
+            .getString( "GeneralPage.DenormalizeOperationalAttributes" ), SWT.CHECK ); //$NON-NLS-1$
+        denormalizeOpAttrCheckbox.setLayoutData( new GridData( SWT.NONE, SWT.NONE, true, false ) );
+    }
+
+
+    /**
+     * Initializes the page with the Editor input.
+     */
+    private void initFromInput()
+    {
+        ServerConfigurationV156 configuration = ( ServerConfigurationV156 ) ( ( ServerConfigurationEditor ) getEditor() )
+            .getServerConfiguration();
+
+        // LDAP Protocol
+        enableLdapCheckbox.setSelection( configuration.isEnableLdap() );
+        ldapPortText.setEnabled( enableLdapCheckbox.getSelection() );
+        ldapPortText.setText( "" + configuration.getLdapPort() ); //$NON-NLS-1$
+
+        // LDAPS Protocol
+        enableLdapsCheckbox.setSelection( configuration.isEnableLdaps() );
+        ldapsPortText.setEnabled( enableLdapsCheckbox.getSelection() );
+        ldapsPortText.setText( "" + configuration.getLdapsPort() ); //$NON-NLS-1$
+
+        // Kerberos Protocol
+        enableKerberosCheckbox.setSelection( configuration.isEnableKerberos() );
+        kerberosPortText.setEnabled( enableKerberosCheckbox.getSelection() );
+        kerberosPortText.setText( "" + configuration.getKerberosPort() ); //$NON-NLS-1$
+
+        // NTP Protocol
+        enableNtpCheckbox.setSelection( configuration.isEnableNtp() );
+        ntpPortText.setEnabled( enableNtpCheckbox.getSelection() );
+        ntpPortText.setText( "" + configuration.getNtpPort() ); //$NON-NLS-1$
+
+        // DNS Protocol
+        enableDnsCheckbox.setSelection( configuration.isEnableDns() );
+        dnsPortText.setEnabled( enableDnsCheckbox.getSelection() );
+        dnsPortText.setText( "" + configuration.getDnsPort() ); //$NON-NLS-1$
+
+        // Change Password Protocol
+        enableChangePasswordCheckbox.setSelection( configuration.isEnableChangePassword() );
+        changePasswordPortText.setEnabled( enableChangePasswordCheckbox.getSelection() );
+        changePasswordPortText.setText( "" + configuration.getChangePasswordPort() ); //$NON-NLS-1$
+
+        // Max Time Limit
+        maxTimeLimitText.setText( "" + configuration.getMaxTimeLimit() ); //$NON-NLS-1$
+
+        // Max Size Limit
+        maxSizeLimitText.setText( "" + configuration.getMaxSizeLimit() ); //$NON-NLS-1$
+
+        // Synchronization Period
+        synchPeriodText.setText( "" + configuration.getSynchronizationPeriod() ); //$NON-NLS-1$
+
+        // Max Threads
+        maxThreadsText.setText( "" + configuration.getMaxThreads() ); //$NON-NLS-1$
+
+        // Allow Anonymous Access
+        allowAnonymousAccessCheckbox.setSelection( configuration.isAllowAnonymousAccess() );
+
+        // Enable Access Control
+        enableAccesControlCheckbox.setSelection( configuration.isEnableAccessControl() );
+
+        // Denormalize Op Attr
+        denormalizeOpAttrCheckbox.setSelection( configuration.isDenormalizeOpAttr() );
+    }
+
+
+    /**
+     * Add listeners to UI fields.
+     */
+    private void addListeners()
+    {
+        // The Modify Listener
+        ModifyListener modifyListener = new ModifyListener()
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                setEditorDirty();
+            }
+        };
+
+        //  The Selection Listener
+        SelectionListener selectionListener = new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                setEditorDirty();
+            }
+        };
+
+        enableLdapCheckbox.addSelectionListener( selectionListener );
+        enableLdapCheckbox.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                ldapPortText.setEnabled( enableLdapCheckbox.getSelection() );
+            }
+        } );
+        ldapPortText.addModifyListener( modifyListener );
+        enableLdapsCheckbox.addSelectionListener( selectionListener );
+        enableLdapsCheckbox.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                ldapsPortText.setEnabled( enableLdapsCheckbox.getSelection() );
+            }
+        } );
+        ldapsPortText.addModifyListener( modifyListener );
+        enableKerberosCheckbox.addSelectionListener( selectionListener );
+        enableKerberosCheckbox.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                kerberosPortText.setEnabled( enableKerberosCheckbox.getSelection() );
+            }
+        } );
+        kerberosPortText.addModifyListener( modifyListener );
+        enableNtpCheckbox.addSelectionListener( selectionListener );
+        enableNtpCheckbox.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                ntpPortText.setEnabled( enableNtpCheckbox.getSelection() );
+            }
+        } );
+        ntpPortText.addModifyListener( modifyListener );
+        enableDnsCheckbox.addSelectionListener( selectionListener );
+        enableDnsCheckbox.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                dnsPortText.setEnabled( enableDnsCheckbox.getSelection() );
+            }
+        } );
+        dnsPortText.addModifyListener( modifyListener );
+        enableChangePasswordCheckbox.addSelectionListener( selectionListener );
+        enableChangePasswordCheckbox.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                changePasswordPortText.setEnabled( enableChangePasswordCheckbox.getSelection() );
+            }
+        } );
+        changePasswordPortText.addModifyListener( modifyListener );
+
+        maxTimeLimitText.addModifyListener( modifyListener );
+        maxSizeLimitText.addModifyListener( modifyListener );
+        synchPeriodText.addModifyListener( modifyListener );
+        maxThreadsText.addModifyListener( modifyListener );
+
+        allowAnonymousAccessCheckbox.addSelectionListener( selectionListener );
+        enableAccesControlCheckbox.addSelectionListener( selectionListener );
+        denormalizeOpAttrCheckbox.addSelectionListener( selectionListener );
+    }
+
+
+    /**
+     * Sets the Editor as dirty.
+     */
+    private void setEditorDirty()
+    {
+        ( ( ServerConfigurationEditor ) getEditor() ).setDirty( true );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.studio.apacheds.configuration.editor.SavableWizardPage#save()
+     */
+    public void save()
+    {
+        ServerConfigurationV156 configuration = ( ServerConfigurationV156 ) ( ( ServerConfigurationEditor ) getEditor() )
+            .getServerConfiguration();
+
+        configuration.setEnableLdap( enableLdapCheckbox.getSelection() );
+        configuration.setLdapPort( Integer.parseInt( ldapPortText.getText() ) );
+        configuration.setEnableLdaps( enableLdapsCheckbox.getSelection() );
+        configuration.setLdapsPort( Integer.parseInt( ldapsPortText.getText() ) );
+        configuration.setEnableKerberos( enableKerberosCheckbox.getSelection() );
+        configuration.setKerberosPort( Integer.parseInt( kerberosPortText.getText() ) );
+        configuration.setEnableNtp( enableNtpCheckbox.getSelection() );
+        configuration.setNtpPort( Integer.parseInt( ntpPortText.getText() ) );
+        configuration.setEnableDns( enableDnsCheckbox.getSelection() );
+        configuration.setDnsPort( Integer.parseInt( dnsPortText.getText() ) );
+        configuration.setEnableChangePassword( enableChangePasswordCheckbox.getSelection() );
+        configuration.setChangePasswordPort( Integer.parseInt( changePasswordPortText.getText() ) );
+
+        configuration.setMaxTimeLimit( Integer.parseInt( maxTimeLimitText.getText() ) );
+        configuration.setMaxSizeLimit( Integer.parseInt( maxSizeLimitText.getText() ) );
+        configuration.setSynchronizationPeriod( Long.parseLong( synchPeriodText.getText() ) );
+        configuration.setMaxThreads( Integer.parseInt( maxThreadsText.getText() ) );
+
+        configuration.setAllowAnonymousAccess( allowAnonymousAccessCheckbox.getSelection() );
+        configuration.setEnableAccessControl( enableAccesControlCheckbox.getSelection() );
+        configuration.setDenormalizeOpAttr( denormalizeOpAttrCheckbox.getSelection() );
+    }
+}

Added: directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorDetailsPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorDetailsPage.java?rev=926643&view=auto
==============================================================================
--- directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorDetailsPage.java (added)
+++ directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorDetailsPage.java Tue Mar 23 16:15:26 2010
@@ -0,0 +1,225 @@
+/*
+ *  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.studio.apacheds.configuration.editor.v156;
+
+
+import org.apache.directory.studio.apacheds.configuration.model.v156.InterceptorEnum;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.IDetailsPage;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+
+/**
+ * This class represents the Details Page of the Server Configuration Editor for the Interceptor type
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class InterceptorDetailsPage implements IDetailsPage
+{
+    /** The associated Master Details Block */
+    private InterceptorsMasterDetailsBlock masterDetailsBlock;
+
+    /** The Managed Form */
+    private IManagedForm mform;
+
+    /** The input Interceptor */
+    private InterceptorEnum input;
+
+    /** The dirty flag */
+    private boolean dirty = false;
+
+    // UI fields
+    private Text nameText;
+    private Text descriptionText;
+
+
+    /**
+     * Creates a new instance of InterceptorDetailsPage.
+     *
+     * @param imdb
+     *      The associated Master Details Block
+     */
+    public InterceptorDetailsPage( InterceptorsMasterDetailsBlock imdb )
+    {
+        masterDetailsBlock = imdb;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IDetailsPage#createContents(org.eclipse.swt.widgets.Composite)
+     */
+    public void createContents( Composite parent )
+    {
+        FormToolkit toolkit = mform.getToolkit();
+        TableWrapLayout layout = new TableWrapLayout();
+        layout.topMargin = 5;
+        layout.leftMargin = 5;
+        layout.rightMargin = 2;
+        layout.bottomMargin = 2;
+        parent.setLayout( layout );
+
+        createDetailsSection( parent, toolkit );
+    }
+
+
+    /**
+     * Creates the Details Section
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the toolkit to use
+     */
+    private void createDetailsSection( Composite parent, FormToolkit toolkit )
+    {
+        Section section = toolkit.createSection( parent, Section.TITLE_BAR );
+        section.marginWidth = 10;
+        section.setText( "Interceptor Details" ); //$NON-NLS-1$
+        TableWrapData td = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP );
+        td.grabHorizontal = true;
+        section.setLayoutData( td );
+        Composite client = toolkit.createComposite( section );
+        toolkit.paintBordersFor( client );
+        GridLayout glayout = new GridLayout( 2, false );
+        client.setLayout( glayout );
+        section.setClient( client );
+
+        // Name
+        toolkit.createLabel( client, Messages.getString( "InterceptorDetailsPage.Name" ) ); //$NON-NLS-1$
+        nameText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        nameText.setEditable( false );
+        nameText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Description
+        toolkit.createLabel( client, Messages.getString( "InterceptorDetailsPage.Description" ) ); //$NON-NLS-1$
+        descriptionText = toolkit.createText( client, "", SWT.MULTI | SWT.WRAP | SWT.V_SCROLL ); //$NON-NLS-1$
+        descriptionText.setEditable( false );
+        GridData gridData = new GridData( SWT.FILL, SWT.NONE, true, false );
+        gridData.widthHint = 100;
+        gridData.heightHint = 75;
+        descriptionText.setLayoutData( gridData );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IPartSelectionListener#selectionChanged(org.eclipse.ui.forms.IFormPart, org.eclipse.jface.viewers.ISelection)
+     */
+    public void selectionChanged( IFormPart part, ISelection selection )
+    {
+        IStructuredSelection ssel = ( IStructuredSelection ) selection;
+        if ( ssel.size() == 1 )
+        {
+            input = ( InterceptorEnum ) ssel.getFirstElement();
+        }
+        else
+        {
+            input = null;
+        }
+        refresh();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#commit(boolean)
+     */
+    public void commit( boolean onSave )
+    {
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#dispose()
+     */
+    public void dispose()
+    {
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
+     */
+    public void initialize( IManagedForm form )
+    {
+        this.mform = form;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#isDirty()
+     */
+    public boolean isDirty()
+    {
+        return dirty;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#isStale()
+     */
+    public boolean isStale()
+    {
+        return false;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#refresh()
+     */
+    public void refresh()
+    {
+        // Name
+        String name = input.getName();
+        nameText.setText( ( name == null ) ? "" : name ); //$NON-NLS-1$
+
+        // Description
+        String description = input.getDescription();
+        descriptionText.setText( ( description == null ) ? "" : description ); //$NON-NLS-1$
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#setFocus()
+     */
+    public void setFocus()
+    {
+        nameText.setFocus();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#setFormInput(java.lang.Object)
+     */
+    public boolean setFormInput( Object input )
+    {
+        return false;
+    }
+}

Added: directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsMasterDetailsBlock.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsMasterDetailsBlock.java?rev=926643&view=auto
==============================================================================
--- directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsMasterDetailsBlock.java (added)
+++ directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsMasterDetailsBlock.java Tue Mar 23 16:15:26 2010
@@ -0,0 +1,377 @@
+/*
+ *  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.studio.apacheds.configuration.editor.v156;
+
+
+import java.util.List;
+
+import org.apache.directory.studio.apacheds.configuration.ApacheDSConfigurationPlugin;
+import org.apache.directory.studio.apacheds.configuration.ApacheDSConfigurationPluginConstants;
+import org.apache.directory.studio.apacheds.configuration.editor.ServerConfigurationEditor;
+import org.apache.directory.studio.apacheds.configuration.editor.v156.dialogs.InterceptorDialog;
+import org.apache.directory.studio.apacheds.configuration.model.v156.InterceptorEnum;
+import org.apache.directory.studio.apacheds.configuration.model.v156.ServerConfigurationV156;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.forms.DetailsPart;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.MasterDetailsBlock;
+import org.eclipse.ui.forms.SectionPart;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+
+
+/**
+ * This class represents the Interceptors Master/Details Block used in the Interceptors Page.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class InterceptorsMasterDetailsBlock extends MasterDetailsBlock
+{
+    /** The associated page */
+    private FormPage page;
+
+    /** The input Server Configuration */
+    private ServerConfigurationV156 serverConfiguration;
+
+    /** The Interceptors List */
+    private List<InterceptorEnum> interceptors;
+
+    /** The Details Page */
+    private InterceptorDetailsPage detailsPage;
+
+    // UI Fields
+    private TableViewer viewer;
+    private Button addButton;
+    private Button deleteButton;
+    private Button upButton;
+    private Button downButton;
+
+
+    /**
+     * Creates a new instance of InterceptorsMasterDetailsBlock.
+     *
+     * @param page
+     */
+    public InterceptorsMasterDetailsBlock( FormPage page )
+    {
+        this.page = page;
+        serverConfiguration = ( ServerConfigurationV156 ) ( ( ServerConfigurationEditor ) page.getEditor() )
+            .getServerConfiguration();
+        interceptors = serverConfiguration.getInterceptors();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.MasterDetailsBlock#createMasterPart(org.eclipse.ui.forms.IManagedForm, org.eclipse.swt.widgets.Composite)
+     */
+    protected void createMasterPart( final IManagedForm managedForm, Composite parent )
+    {
+        FormToolkit toolkit = managedForm.getToolkit();
+
+        // Creating the Section
+        Section section = toolkit.createSection( parent, Section.TITLE_BAR | Section.DESCRIPTION );
+        section.setText( Messages.getString( "InterceptorsMasterDetailsBlock.AllInterceptors" ) ); //$NON-NLS-1$
+        section.setDescription( Messages.getString( "InterceptorsMasterDetailsBlock.SetTheInterceptorsDescription" ) ); //$NON-NLS-1$
+        section.marginWidth = 10;
+        section.marginHeight = 5;
+        Composite client = toolkit.createComposite( section, SWT.WRAP );
+        GridLayout layout = new GridLayout();
+        layout.numColumns = 2;
+        layout.makeColumnsEqualWidth = false;
+        layout.marginWidth = 2;
+        layout.marginHeight = 2;
+        client.setLayout( layout );
+        toolkit.paintBordersFor( client );
+        section.setClient( client );
+
+        // Creatig the Table and Table Viewer
+        Table table = toolkit.createTable( client, SWT.NULL );
+        GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true, 1, 4 );
+        gd.heightHint = 20;
+        gd.widthHint = 100;
+        table.setLayoutData( gd );
+        final SectionPart spart = new SectionPart( section );
+        managedForm.addPart( spart );
+        viewer = new TableViewer( table );
+        viewer.addSelectionChangedListener( new ISelectionChangedListener()
+        {
+            public void selectionChanged( SelectionChangedEvent event )
+            {
+                managedForm.fireSelectionChanged( spart, event.getSelection() );
+            }
+        } );
+        viewer.setContentProvider( new ArrayContentProvider() );
+        viewer.setLabelProvider( new LabelProvider()
+        {
+            public Image getImage( Object element )
+            {
+                return ApacheDSConfigurationPlugin.getDefault().getImage(
+                    ApacheDSConfigurationPluginConstants.IMG_INTERCEPTOR );
+            }
+
+
+            public String getText( Object element )
+            {
+                if ( element instanceof InterceptorEnum )
+                {
+                    return ( ( InterceptorEnum ) element ).getName();
+
+                }
+
+                return super.getText( element );
+            }
+        } );
+
+        // Creating the button(s)
+        addButton = toolkit.createButton( client, Messages.getString( "InterceptorsMasterDetailsBlock.Add" ), SWT.PUSH ); //$NON-NLS-1$
+        addButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+
+        deleteButton = toolkit.createButton( client,
+            Messages.getString( "InterceptorsMasterDetailsBlock.Delete" ), SWT.PUSH ); //$NON-NLS-1$
+        deleteButton.setEnabled( false );
+        deleteButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+
+        upButton = toolkit.createButton( client, Messages.getString( "InterceptorsMasterDetailsBlock.Up" ), SWT.PUSH ); //$NON-NLS-1$
+        upButton.setEnabled( false );
+        upButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+
+        downButton = toolkit.createButton( client,
+            Messages.getString( "InterceptorsMasterDetailsBlock.Down" ), SWT.PUSH ); //$NON-NLS-1$
+        downButton.setEnabled( false );
+        downButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+
+        initFromInput();
+        addListeners();
+    }
+
+
+    /**
+     * Initializes the page with the Editor input.
+     */
+    private void initFromInput()
+    {
+        viewer.setInput( interceptors );
+    }
+
+
+    /**
+     * Add listeners to UI fields.
+     */
+    private void addListeners()
+    {
+        viewer.addSelectionChangedListener( new ISelectionChangedListener()
+        {
+            public void selectionChanged( SelectionChangedEvent event )
+            {
+                viewer.refresh();
+                deleteButton.setEnabled( !event.getSelection().isEmpty() );
+                enableDisableUpDownButtons();
+            }
+        } );
+
+        addButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                InterceptorDialog dialog = new InterceptorDialog( interceptors );
+                if ( Dialog.OK == dialog.open() )
+                {
+                    InterceptorEnum newInterceptor = dialog.getInterceptor();
+                    interceptors.add( newInterceptor );
+                    viewer.refresh();
+                    viewer.setSelection( new StructuredSelection( newInterceptor ) );
+                    setEditorDirty();
+                }
+            }
+        } );
+
+        deleteButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                StructuredSelection selection = ( StructuredSelection ) viewer.getSelection();
+                if ( !selection.isEmpty() )
+                {
+                    InterceptorEnum interceptor = ( InterceptorEnum ) selection.getFirstElement();
+                    interceptors.remove( interceptor );
+                    viewer.refresh();
+                    setEditorDirty();
+                }
+            }
+        } );
+
+        upButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                StructuredSelection selection = ( StructuredSelection ) viewer.getSelection();
+                if ( !selection.isEmpty() )
+                {
+                    InterceptorEnum interceptor = ( InterceptorEnum ) selection.getFirstElement();
+
+                    int index = interceptors.indexOf( interceptor );
+                    if ( index > 0 )
+                    {
+                        InterceptorEnum interceptorBefore = interceptors.get( index - 1 );
+                        if ( interceptorBefore != null )
+                        {
+                            interceptors.set( index - 1, interceptor );
+                            interceptors.set( index, interceptorBefore );
+                            viewer.refresh();
+                            setEditorDirty();
+                            enableDisableUpDownButtons();
+                        }
+                    }
+                }
+            }
+        } );
+
+        downButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                StructuredSelection selection = ( StructuredSelection ) viewer.getSelection();
+                if ( !selection.isEmpty() )
+                {
+                    InterceptorEnum interceptor = ( InterceptorEnum ) selection.getFirstElement();
+
+                    int index = interceptors.indexOf( interceptor );
+                    if ( index < ( interceptors.size() - 1 ) )
+                    {
+                        InterceptorEnum interceptorAfter = interceptors.get( index + 1 );
+                        if ( interceptorAfter != null )
+                        {
+                            interceptors.set( index + 1, interceptor );
+                            interceptors.set( index, interceptorAfter );
+
+                            viewer.refresh();
+                            setEditorDirty();
+                            enableDisableUpDownButtons();
+                        }
+                    }
+                }
+            }
+        } );
+    }
+
+
+    /**
+     * Enables or Disables the Up and Down Buttons.
+     */
+    private void enableDisableUpDownButtons()
+    {
+        StructuredSelection selection = ( StructuredSelection ) viewer.getSelection();
+
+        upButton.setEnabled( !selection.isEmpty() );
+        downButton.setEnabled( !selection.isEmpty() );
+        if ( !selection.isEmpty() )
+        {
+            InterceptorEnum interceptor = ( InterceptorEnum ) selection.getFirstElement();
+            upButton.setEnabled( interceptors.indexOf( interceptor ) != 0 );
+            downButton.setEnabled( interceptors.indexOf( interceptor ) != ( interceptors.size() - 1 ) );
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.MasterDetailsBlock#createToolBarActions(org.eclipse.ui.forms.IManagedForm)
+     */
+    protected void createToolBarActions( IManagedForm managedForm )
+    {
+        final ScrolledForm form = managedForm.getForm();
+
+        // Horizontal layout Action
+        Action horizontalAction = new Action( "Horizontal layout", Action.AS_RADIO_BUTTON ) { //$NON-NLS-1$
+            public void run()
+            {
+                sashForm.setOrientation( SWT.HORIZONTAL );
+                form.reflow( true );
+            }
+        };
+        horizontalAction.setChecked( true );
+        horizontalAction.setToolTipText( "Horizontal Orientation" ); //$NON-NLS-1$
+        horizontalAction.setImageDescriptor( ApacheDSConfigurationPlugin.getDefault().getImageDescriptor(
+            ApacheDSConfigurationPluginConstants.IMG_HORIZONTAL_ORIENTATION ) );
+
+        // Vertical layout Action
+        Action verticalAction = new Action( "Vertical Orientation", Action.AS_RADIO_BUTTON ) { //$NON-NLS-1$
+            public void run()
+            {
+                sashForm.setOrientation( SWT.VERTICAL );
+                form.reflow( true );
+            }
+        };
+        verticalAction.setChecked( false );
+        verticalAction.setToolTipText( "Vertical Orientation" ); //$NON-NLS-1$
+        verticalAction.setImageDescriptor( ApacheDSConfigurationPlugin.getDefault().getImageDescriptor(
+            ApacheDSConfigurationPluginConstants.IMG_VERTICAL_ORIENTATION ) );
+
+        form.getToolBarManager().add( horizontalAction );
+        form.getToolBarManager().add( verticalAction );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.MasterDetailsBlock#registerPages(org.eclipse.ui.forms.DetailsPart)
+     */
+    protected void registerPages( DetailsPart detailsPart )
+    {
+        detailsPage = new InterceptorDetailsPage( this );
+        detailsPart.registerPage( InterceptorEnum.class, detailsPage );
+    }
+
+
+    /**
+     * Sets the Editor as dirty.
+     */
+    public void setEditorDirty()
+    {
+        ( ( ServerConfigurationEditor ) page.getEditor() ).setDirty( true );
+    }
+
+
+    /**
+     * Saves the necessary elements to the input model.
+     */
+    public void save()
+    {
+        detailsPage.commit( true );
+        viewer.setInput( interceptors );
+    }
+}

Added: directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsPage.java?rev=926643&view=auto
==============================================================================
--- directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsPage.java (added)
+++ directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/InterceptorsPage.java Tue Mar 23 16:15:26 2010
@@ -0,0 +1,88 @@
+/*
+ *  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.studio.apacheds.configuration.editor.v156;
+
+
+import org.apache.directory.studio.apacheds.configuration.ApacheDSConfigurationPluginConstants;
+import org.apache.directory.studio.apacheds.configuration.editor.SaveableFormPage;
+import org.apache.directory.studio.apacheds.configuration.editor.ServerConfigurationEditor;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+
+/**
+ * This class represents the Interceptors Page of the Server Configuration Editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class InterceptorsPage extends FormPage implements SaveableFormPage
+{
+    /** The Page ID*/
+    public static final String ID = ServerConfigurationEditor.ID + ".V156.InterceptorsPage"; //$NON-NLS-1$
+
+    /** The Page Title */
+    private static final String TITLE = Messages.getString( "InterceptorsPage.Interceptors" ); //$NON-NLS-1$
+
+    /** The Master/Details Block */
+    private InterceptorsMasterDetailsBlock masterDetailsBlock;
+
+
+    /**
+     * Creates a new instance of InterceptorsPage.
+     *
+     * @param editor
+     *      the associated editor
+     */
+    public InterceptorsPage( FormEditor editor )
+    {
+        super( editor, ID, TITLE );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
+     */
+    protected void createFormContent( IManagedForm managedForm )
+    {
+        PlatformUI.getWorkbench().getHelpSystem().setHelp( getPartControl(),
+            ApacheDSConfigurationPluginConstants.PLUGIN_ID + "." + "configuration_editor_156" ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        final ScrolledForm form = managedForm.getForm();
+        form.setText( Messages.getString( "InterceptorsPage.Interceptors" ) ); //$NON-NLS-1$
+        masterDetailsBlock = new InterceptorsMasterDetailsBlock( this );
+        masterDetailsBlock.createContent( managedForm );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.studio.apacheds.configuration.editor.SavableWizardPage#save()
+     */
+    public void save()
+    {
+        if ( masterDetailsBlock != null )
+        {
+            masterDetailsBlock.save();
+        }
+    }
+}

Added: directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/Messages.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/Messages.java?rev=926643&view=auto
==============================================================================
--- directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/Messages.java (added)
+++ directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/Messages.java Tue Mar 23 16:15:26 2010
@@ -0,0 +1,50 @@
+/*
+ *  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.studio.apacheds.configuration.editor.v156;
+
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+
+public class Messages
+{
+    private static final String BUNDLE_NAME = "org.apache.directory.studio.apacheds.configuration.editor.v156.messages"; //$NON-NLS-1$
+
+    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle( BUNDLE_NAME );
+
+
+    private Messages()
+    {
+    }
+
+
+    public static String getString( String key )
+    {
+        try
+        {
+            return RESOURCE_BUNDLE.getString( key );
+        }
+        catch ( MissingResourceException e )
+        {
+            return '!' + key + '!';
+        }
+    }
+}

Added: directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/PartitionDetailsPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/PartitionDetailsPage.java?rev=926643&view=auto
==============================================================================
--- directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/PartitionDetailsPage.java (added)
+++ directory/studio/trunk/apacheds-configuration/src/main/java/org/apache/directory/studio/apacheds/configuration/editor/v156/PartitionDetailsPage.java Tue Mar 23 16:15:26 2010
@@ -0,0 +1,496 @@
+/*
+ *  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.studio.apacheds.configuration.editor.v156;
+
+
+import java.util.List;
+
+import org.apache.directory.studio.apacheds.configuration.editor.v156.dialogs.IndexedAttributeDialog;
+import org.apache.directory.studio.apacheds.configuration.model.v156.IndexedAttribute;
+import org.apache.directory.studio.apacheds.configuration.model.v156.Partition;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.IDetailsPage;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+
+/**
+ * This class represents the Details Page of the Server Configuration Editor for the Partition type
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class PartitionDetailsPage implements IDetailsPage
+{
+    /** The associated Master Details Block */
+    private PartitionsMasterDetailsBlock masterDetailsBlock;
+
+    /** The Managed Form */
+    private IManagedForm mform;
+
+    /** The input Partition */
+    private Partition input;
+
+    /** The Indexed Attributes List */
+    private List<IndexedAttribute> indexedAttributes;
+
+    /** The dirty flag */
+    private boolean dirty = false;
+
+    // UI fields
+    private Text idText;
+    private Text cacheSizeText;
+    private Text suffixText;
+    private Button enableOptimizerCheckbox;
+    private Button synchOnWriteCheckbox;
+    private TableViewer indexedAttributesTableViewer;
+    private Button indexedAttributeAddButton;
+    private Button indexedAttributeEditButton;
+    private Button indexedAttributeDeleteButton;
+
+    // Listeners
+    /** The Text Modify Listener */
+    private ModifyListener textModifyListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            masterDetailsBlock.setEditorDirty();
+            dirty = true;
+        }
+    };
+
+    /** The Checkbox Selection Listener */
+    private SelectionListener checkboxSelectionListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            masterDetailsBlock.setEditorDirty();
+            dirty = true;
+        }
+    };
+
+    /** The Selection Changed Listener for the Indexed Attributes Table Viewer */
+    private ISelectionChangedListener indexedAttributesTableViewerListener = new ISelectionChangedListener()
+    {
+        public void selectionChanged( SelectionChangedEvent event )
+        {
+            indexedAttributeEditButton.setEnabled( !event.getSelection().isEmpty() );
+            indexedAttributeDeleteButton.setEnabled( !event.getSelection().isEmpty() );
+        }
+    };
+
+    /** The Double Click Listener for the Indexed Attributes Table Viewer */
+    private IDoubleClickListener indexedAttributesTableViewerDoubleClickListener = new IDoubleClickListener()
+    {
+        public void doubleClick( DoubleClickEvent event )
+        {
+            editSelectedIndexedAttribute();
+        }
+    };
+
+    /** The Listener for the Add button of the Indexed Attributes Section */
+    private SelectionListener indexedAttributeAddButtonListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            IndexedAttributeDialog dialog = new IndexedAttributeDialog( new IndexedAttribute( "", 0 ) ); //$NON-NLS-1$
+            if ( Dialog.OK == dialog.open() )
+            {
+                indexedAttributes.add( dialog.getIndexedAttribute() );
+                indexedAttributesTableViewer.refresh();
+                masterDetailsBlock.setEditorDirty();
+                dirty = true;
+            }
+        }
+    };
+
+    /** The Listener for the Edit button of the Indexed Attributes Section */
+    private SelectionListener indexedAttributeEditButtonListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            editSelectedIndexedAttribute();
+        }
+    };
+
+    /** The Listener for the Delete button of the Indexed Attributes Section */
+    private SelectionListener indexedAttributeDeleteButtonListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) indexedAttributesTableViewer.getSelection();
+            if ( !selection.isEmpty() )
+            {
+                IndexedAttribute indexedAttribute = ( IndexedAttribute ) selection.getFirstElement();
+
+                indexedAttributes.remove( indexedAttribute );
+                indexedAttributesTableViewer.refresh();
+                masterDetailsBlock.setEditorDirty();
+                dirty = true;
+            }
+        }
+    };
+
+
+    /**
+     * Creates a new instance of PartitionDetailsPage.
+     *
+     * @param pmdb
+     *      the associated Master Details Block
+     */
+    public PartitionDetailsPage( PartitionsMasterDetailsBlock pmdb )
+    {
+        masterDetailsBlock = pmdb;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IDetailsPage#createContents(org.eclipse.swt.widgets.Composite)
+     */
+    public void createContents( Composite parent )
+    {
+        FormToolkit toolkit = mform.getToolkit();
+        TableWrapLayout layout = new TableWrapLayout();
+        layout.topMargin = 5;
+        layout.leftMargin = 5;
+        layout.rightMargin = 2;
+        layout.bottomMargin = 2;
+        parent.setLayout( layout );
+
+        createDetailsSection( parent, toolkit );
+        createIndexedAttributesSection( parent, toolkit );
+    }
+
+
+    /**
+     * Creates the Details Section
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the toolkit to use
+     */
+    private void createDetailsSection( Composite parent, FormToolkit toolkit )
+    {
+        Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
+        section.marginWidth = 10;
+        section.setText( Messages.getString( "PartitionDetailsPage.PartitionDetails" ) ); //$NON-NLS-1$
+        section.setDescription( Messages.getString( "PartitionDetailsPage.PartitionsDetailsDescription" ) ); //$NON-NLS-1$
+        TableWrapData td = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP );
+        td.grabHorizontal = true;
+        section.setLayoutData( td );
+        Composite client = toolkit.createComposite( section );
+        toolkit.paintBordersFor( client );
+        GridLayout glayout = new GridLayout( 3, false );
+        client.setLayout( glayout );
+        section.setClient( client );
+
+        // ID
+        toolkit.createLabel( client, Messages.getString( "PartitionDetailsPage.ID" ) ); //$NON-NLS-1$
+        idText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        idText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+
+        // Cache Size
+        toolkit.createLabel( client, Messages.getString( "PartitionDetailsPage.CacheSize" ) ); //$NON-NLS-1$
+        cacheSizeText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        cacheSizeText.addVerifyListener( new VerifyListener()
+        {
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+        cacheSizeText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+
+        // Suffix
+        toolkit.createLabel( client, Messages.getString( "PartitionDetailsPage.Suffix" ) ); //$NON-NLS-1$
+        suffixText = toolkit.createText( client, "" ); //$NON-NLS-1$
+        suffixText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+
+        // Enable Optimizer
+        enableOptimizerCheckbox = toolkit.createButton( client, Messages
+            .getString( "PartitionDetailsPage.EnableOptimizer" ), SWT.CHECK ); //$NON-NLS-1$
+        enableOptimizerCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 3, 1 ) );
+
+        // Synchronisation On Write
+        synchOnWriteCheckbox = toolkit.createButton( client, Messages
+            .getString( "PartitionDetailsPage.SynchronizationOnWrite" ), SWT.CHECK ); //$NON-NLS-1$
+        synchOnWriteCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 3, 1 ) );
+    }
+
+
+    /**
+     * Creates the Indexed Attributes Section
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the toolkit to use
+     */
+    private void createIndexedAttributesSection( Composite parent, FormToolkit toolkit )
+    {
+        Section indexedAttributesSection = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
+        indexedAttributesSection.marginWidth = 10;
+        indexedAttributesSection.setText( Messages.getString( "PartitionDetailsPage.IndexedAttributes" ) ); //$NON-NLS-1$
+        indexedAttributesSection.setDescription( Messages
+            .getString( "PartitionDetailsPage.IndexedAttributesDescription" ) ); //$NON-NLS-1$
+        indexedAttributesSection.setLayoutData( new TableWrapData( TableWrapData.FILL ) );
+        Composite indexedAttributesClient = toolkit.createComposite( indexedAttributesSection );
+        toolkit.paintBordersFor( indexedAttributesClient );
+        indexedAttributesClient.setLayout( new GridLayout( 2, false ) );
+        indexedAttributesSection.setClient( indexedAttributesClient );
+
+        Table indexedAttributesTable = toolkit.createTable( indexedAttributesClient, SWT.NONE );
+        GridData gd = new GridData( SWT.FILL, SWT.NONE, true, false, 1, 3 );
+        gd.heightHint = 80;
+        indexedAttributesTable.setLayoutData( gd );
+        indexedAttributesTableViewer = new TableViewer( indexedAttributesTable );
+        indexedAttributesTableViewer.setContentProvider( new ArrayContentProvider() );
+        indexedAttributesTableViewer.setLabelProvider( new LabelProvider() );
+
+        GridData buttonsGD = new GridData( SWT.FILL, SWT.BEGINNING, false, false );
+        buttonsGD.widthHint = IDialogConstants.BUTTON_WIDTH;
+
+        indexedAttributeAddButton = toolkit.createButton( indexedAttributesClient, Messages
+            .getString( "PartitionDetailsPage.Add" ), SWT.PUSH ); //$NON-NLS-1$
+        indexedAttributeAddButton.setLayoutData( buttonsGD );
+
+        indexedAttributeEditButton = toolkit.createButton( indexedAttributesClient, Messages
+            .getString( "PartitionDetailsPage.Edit" ), SWT.PUSH ); //$NON-NLS-1$
+        indexedAttributeEditButton.setEnabled( false );
+        indexedAttributeEditButton.setLayoutData( buttonsGD );
+
+        indexedAttributeDeleteButton = toolkit.createButton( indexedAttributesClient, Messages
+            .getString( "PartitionDetailsPage.Delete" ), SWT.PUSH ); //$NON-NLS-1$
+        indexedAttributeDeleteButton.setEnabled( false );
+        indexedAttributeDeleteButton.setLayoutData( buttonsGD );
+    }
+
+
+    /**
+     * Adds listeners to UI fields.
+     */
+    private void addListeners()
+    {
+        idText.addModifyListener( textModifyListener );
+        cacheSizeText.addModifyListener( textModifyListener );
+        suffixText.addModifyListener( textModifyListener );
+        enableOptimizerCheckbox.addSelectionListener( checkboxSelectionListener );
+        synchOnWriteCheckbox.addSelectionListener( checkboxSelectionListener );
+
+        indexedAttributesTableViewer.addSelectionChangedListener( indexedAttributesTableViewerListener );
+        indexedAttributesTableViewer.addDoubleClickListener( indexedAttributesTableViewerDoubleClickListener );
+        indexedAttributeAddButton.addSelectionListener( indexedAttributeAddButtonListener );
+        indexedAttributeEditButton.addSelectionListener( indexedAttributeEditButtonListener );
+        indexedAttributeDeleteButton.addSelectionListener( indexedAttributeDeleteButtonListener );
+    }
+
+
+    /**
+     * Removes listeners to UI fields.
+     */
+    private void removeListeners()
+    {
+        idText.removeModifyListener( textModifyListener );
+        cacheSizeText.removeModifyListener( textModifyListener );
+        suffixText.removeModifyListener( textModifyListener );
+        enableOptimizerCheckbox.removeSelectionListener( checkboxSelectionListener );
+        synchOnWriteCheckbox.removeSelectionListener( checkboxSelectionListener );
+
+        indexedAttributesTableViewer.removeSelectionChangedListener( indexedAttributesTableViewerListener );
+        indexedAttributesTableViewer.removeDoubleClickListener( indexedAttributesTableViewerDoubleClickListener );
+        indexedAttributeAddButton.removeSelectionListener( indexedAttributeAddButtonListener );
+        indexedAttributeEditButton.removeSelectionListener( indexedAttributeEditButtonListener );
+        indexedAttributeDeleteButton.removeSelectionListener( indexedAttributeDeleteButtonListener );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IPartSelectionListener#selectionChanged(org.eclipse.ui.forms.IFormPart, org.eclipse.jface.viewers.ISelection)
+     */
+    public void selectionChanged( IFormPart part, ISelection selection )
+    {
+        IStructuredSelection ssel = ( IStructuredSelection ) selection;
+        if ( ssel.size() == 1 )
+        {
+            input = ( Partition ) ssel.getFirstElement();
+        }
+        else
+        {
+            input = null;
+        }
+        refresh();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#commit(boolean)
+     */
+    public void commit( boolean onSave )
+    {
+        if ( input != null )
+        {
+            input.setId( idText.getText() );
+            input.setCacheSize( Integer.parseInt( cacheSizeText.getText() ) );
+            input.setSuffix( suffixText.getText() );
+            input.setEnableOptimizer( enableOptimizerCheckbox.getSelection() );
+            input.setSynchronizationOnWrite( synchOnWriteCheckbox.getSelection() );
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#dispose()
+     */
+    public void dispose()
+    {
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
+     */
+    public void initialize( IManagedForm form )
+    {
+        this.mform = form;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#isDirty()
+     */
+    public boolean isDirty()
+    {
+        return dirty;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#isStale()
+     */
+    public boolean isStale()
+    {
+        return false;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#refresh()
+     */
+    public void refresh()
+    {
+        removeListeners();
+
+        // ID
+        String id = input.getId();
+        idText.setText( ( id == null ) ? "" : id ); //$NON-NLS-1$
+
+        // Cache Size
+        cacheSizeText.setText( "" + input.getCacheSize() ); //$NON-NLS-1$
+
+        // Suffix
+        String suffix = input.getSuffix();
+        suffixText.setText( ( suffix == null ) ? "" : suffix ); //$NON-NLS-1$
+
+        // Enable Optimizer
+        enableOptimizerCheckbox.setSelection( input.isEnableOptimizer() );
+
+        // Synchronization on write
+        synchOnWriteCheckbox.setSelection( input.isSynchronizationOnWrite() );
+
+        // Indexed Attributes
+        indexedAttributes = input.getIndexedAttributes();
+        indexedAttributesTableViewer.setInput( indexedAttributes );
+
+        addListeners();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#setFocus()
+     */
+    public void setFocus()
+    {
+        idText.setFocus();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.IFormPart#setFormInput(java.lang.Object)
+     */
+    public boolean setFormInput( Object input )
+    {
+        return false;
+    }
+
+
+    /**
+     * Opens an Indexed Attribute Dialog with the selected Indexed Attribute in the
+     * Indexed Attributes Table Viewer.
+     */
+    private void editSelectedIndexedAttribute()
+    {
+        StructuredSelection selection = ( StructuredSelection ) indexedAttributesTableViewer.getSelection();
+        if ( !selection.isEmpty() )
+        {
+            IndexedAttribute indexedAttribute = ( IndexedAttribute ) selection.getFirstElement();
+
+            IndexedAttributeDialog dialog = new IndexedAttributeDialog( indexedAttribute );
+            if ( Dialog.OK == dialog.open() && dialog.isDirty() )
+            {
+                indexedAttributesTableViewer.refresh();
+                masterDetailsBlock.setEditorDirty();
+                dirty = true;
+            }
+        }
+    }
+}