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 2007/04/02 19:27:09 UTC

svn commit: r524845 - in /directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor: ./ model/ widgets/

Author: pamarcelot
Date: Mon Apr  2 10:27:08 2007
New Revision: 524845

URL: http://svn.apache.org/viewvc?view=rev&rev=524845
Log:
Added a first start on the Subtree Specification Value Editor.

Added:
    directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ExclusionValueEditor.java
    directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/SubtreeSpecificationValueEditor.java
Modified:
    directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/RestrictedByValueEditor.java
    directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java

Added: directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ExclusionValueEditor.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ExclusionValueEditor.java?view=auto&rev=524845
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ExclusionValueEditor.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ExclusionValueEditor.java Mon Apr  2 10:27:08 2007
@@ -0,0 +1,247 @@
+/*
+ *  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.ldapstudio.aciitemeditor;
+
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+/**
+ * TODO ExclusionValueEditor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ExclusionValueEditor extends AbstractDialogStringValueEditor
+{
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogValueEditor#openDialog(org.eclipse.swt.widgets.Shell)
+     */
+    @Override
+    protected boolean openDialog( Shell shell )
+    {
+        Object value = getValue();
+        if ( value != null && value instanceof ExclusionWrapper )
+        {
+            ExclusionWrapper wrapper = ( ExclusionWrapper ) value;
+            ExclusionDialog dialog = new ExclusionDialog( shell, wrapper.type, null );
+            dialog.open();
+        }
+        return false;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     * 
+     * Returns an MaxValueCountValueEditorRawValueWrapper.
+     */
+    public Object getRawValue( IConnection connection, Object value )
+    {
+        if ( value == null || !( value instanceof String ) )
+        {
+            return null;
+        }
+
+        String stringValue = ( String ) value;
+        String type = "";
+        String rdn = "";
+        try
+        {
+            // for example: chopAfter: "ou=A"
+            Pattern pattern = Pattern.compile( "\\s*([chopBefore|chopAfter]):\\s*\"(.*)\"\\s*" );
+            Matcher matcher = pattern.matcher( stringValue );
+            type = matcher.matches() ? matcher.group( 1 ) : "";
+            rdn = matcher.matches() ? matcher.group( 2 ) : "";
+        }
+        catch ( Exception e )
+        {
+        }
+
+        ExclusionWrapper wrapper = new ExclusionWrapper( type, rdn );
+        return wrapper;
+    }
+
+    /**
+     * The ExclusionWrapper is used to pass contextual 
+     * information to the opened ExclusionDialog.
+     *
+     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+     * @version $Rev$, $Date$
+     */
+    private class ExclusionWrapper
+    {
+        /** The type, used as initial type. */
+        private String type;
+
+        /** The RDN, used as initial RDN. */
+        private String rdn;
+
+
+        /**
+         * Creates a new instance of ExclusionWrapper.
+         * 
+         * @param type
+         *      the type
+         * @param rdn
+         *      the rdn
+         */
+        private ExclusionWrapper( String type, String rdn )
+        {
+            this.type = type;
+            this.rdn = rdn;
+        }
+    }
+
+    /**
+     * TODO ExclusionDialog.
+     *
+     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+     * @version $Rev$, $Date$
+     */
+    private class ExclusionDialog extends Dialog
+    {
+        /** The dialog title */
+        public static final String DIALOG_TITLE = "Exclusion Editor";
+
+        /** The initial type */
+        private String initialType;
+
+        /** The initial RDN */
+        private String initialRDN;
+
+        /** The return type */
+        private String returnType;
+
+        /** The return RDN */
+        private String returnRDN;
+
+        private Combo typeCombo;
+
+        private static final String CHOP_BEFORE = "chopBefore";
+
+        private static final String CHOP_AFTER = "chopAfter";
+
+
+        /**
+         * Creates a new instance of ExclusionDialog.
+         *
+         * @param parentShell
+         */
+        protected ExclusionDialog( Shell parentShell, String initialType, String initialRDN )
+        {
+            super( parentShell );
+            this.initialType = initialType;
+            this.initialRDN = initialRDN;
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+         */
+        protected void configureShell( Shell shell )
+        {
+            super.configureShell( shell );
+            shell.setText( DIALOG_TITLE );
+        }
+
+
+        /**
+         * {@inheritDoc}
+         */
+        protected void okPressed()
+        {
+            returnType = typeCombo.getText();
+            // initialRDN = rdnFields.getSelection();
+            super.okPressed();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+         */
+        protected Control createDialogArea( Composite parent )
+        {
+            Composite composite = ( Composite ) super.createDialogArea( parent );
+            GridData gd = new GridData( GridData.FILL_BOTH );
+            gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+            composite.setLayoutData( gd );
+            composite.setLayout( new GridLayout( 2, false ) );
+
+            BaseWidgetUtils.createLabel( composite, "Type:", 1 );
+            typeCombo = new Combo( composite, SWT.NONE );
+            String[] types = new String[2];
+            types[0] = CHOP_BEFORE;
+            types[1] = CHOP_AFTER;
+            ComboViewer typeComboViewer = new ComboViewer( typeCombo );
+            typeComboViewer.setContentProvider( new ArrayContentProvider() );
+            typeComboViewer.setLabelProvider( new LabelProvider() );
+            typeComboViewer.setInput( types );
+            typeComboViewer.setSelection( new StructuredSelection( initialType ) );
+
+            BaseWidgetUtils.createLabel( composite, "RDN:", 2 );
+
+            return composite;
+        }
+
+
+        /**
+         * Get the type.
+         *
+         * @return
+         *      the type, null if canceled
+         */
+        public String getType()
+        {
+            return returnType;
+        }
+
+
+        /**
+         * Gets the RDN.
+         *
+         * @return
+         *      the RDN, null if canceled
+         */
+        public String getRDN()
+        {
+            return returnRDN;
+        }
+    }
+}

Modified: directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/RestrictedByValueEditor.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/RestrictedByValueEditor.java?view=diff&rev=524845&r1=524844&r2=524845
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/RestrictedByValueEditor.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/RestrictedByValueEditor.java Mon Apr  2 10:27:08 2007
@@ -154,7 +154,8 @@
         try
         {
             // for example: { type sn, valuesIn cn }
-            Pattern pattern = Pattern.compile( "\\s*\\{\\s*type\\s*([^,\\s]*)\\s*,\\s*valuesIn\\s*([^,\\s]*)\\s*\\}\\s*" );
+            Pattern pattern = Pattern
+                .compile( "\\s*\\{\\s*type\\s*([^,\\s]*)\\s*,\\s*valuesIn\\s*([^,\\s]*)\\s*\\}\\s*" );
             Matcher matcher = pattern.matcher( stringValue );
             type = matcher.matches() ? matcher.group( 1 ) : "";
             valuesIn = matcher.matches() ? matcher.group( 2 ) : "";

Modified: directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java?view=diff&rev=524845&r1=524844&r2=524845
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java Mon Apr  2 10:27:08 2007
@@ -1,6 +1,7 @@
 
 package org.apache.directory.ldapstudio.aciitemeditor.model;
 
+import org.apache.directory.ldapstudio.aciitemeditor.widgets.SubtreeSpecificationValueEditor;
 import org.apache.directory.ldapstudio.browser.ui.valueeditors.internal.DnValueEditor;
 import org.apache.directory.ldapstudio.browser.ui.valueeditors.internal.TextValueEditor;
 import org.apache.directory.shared.ldap.aci.UserClass;
@@ -55,7 +56,7 @@
                     UserClass.Subtree.class, 
                     "",  //$NON-NLS-1$
                     "", //$NON-NLS-1$
-                    new TextValueEditor() // TODO: SubtreeSpecificationValueEditor
+                    new SubtreeSpecificationValueEditor() // TODO: SubtreeSpecificationValueEditor
                 )
             };
         

Added: directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/SubtreeSpecificationValueEditor.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/SubtreeSpecificationValueEditor.java?view=auto&rev=524845
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/SubtreeSpecificationValueEditor.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/SubtreeSpecificationValueEditor.java Mon Apr  2 10:27:08 2007
@@ -0,0 +1,521 @@
+/*
+ *  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.ldapstudio.aciitemeditor.widgets;
+
+
+import org.apache.directory.ldapstudio.aciitemeditor.Activator;
+import org.apache.directory.ldapstudio.aciitemeditor.ExclusionValueEditor;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.apache.directory.ldapstudio.browser.ui.dialogs.TextDialog;
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+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.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+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.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Table;
+
+
+/**
+ * TODO SubtreeSpecificationValueEditor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SubtreeSpecificationValueEditor extends AbstractDialogStringValueEditor
+{
+    /* (non-Javadoc)
+     * @see org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogValueEditor#openDialog(org.eclipse.swt.widgets.Shell)
+     */
+    protected boolean openDialog( Shell shell )
+    {
+        SubtreeDialog dialog = new SubtreeDialog( shell );
+        if ( dialog.open() == TextDialog.OK )
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * TODO SubtreeDialog.
+     *
+     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+     * @version $Rev$, $Date$
+     */
+    private class SubtreeDialog extends Dialog
+    {
+        /** The dialog title */
+        public static final String DIALOG_TITLE = "Subtree Editor";
+
+        private Spinner minimumSpinner;
+        private int initialMinimum = 0;
+        private Spinner maximumSpinner;
+        private int initialMaximum = 0;
+
+        private TableViewer exclusionsTableViewer;
+
+        private Button exclusionsTableAddButton;
+
+        private Button exclusionsTableEditButton;
+
+        private Button exclusionsTableDeleteButton;
+
+        private TableViewer refinementsTableViewer;
+
+        private Button refinementsTableAddButton;
+
+        private Button refinementsTableEditButton;
+
+        private Button refinementsTableDeleteButton;
+
+
+        /**
+         * Creates a new instance of SubtreeDialog.
+         *
+         * @param parentShell
+         */
+        protected SubtreeDialog( Shell parentShell )
+        {
+            super( parentShell );
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+         */
+        protected void configureShell( Shell newShell )
+        {
+            super.configureShell( newShell );
+            newShell.setText( DIALOG_TITLE );
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+         */
+        protected Control createDialogArea( Composite parent )
+        {
+            Composite composite = ( Composite ) super.createDialogArea( parent );
+            GridData gd = new GridData( GridData.FILL_BOTH );
+            gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+            composite.setLayoutData( gd );
+            composite.setLayout( new GridLayout( 3, false ) );
+
+            BaseWidgetUtils.createLabel( composite, "Base:", 3 );
+
+            GridData spinnersGridData = new GridData();
+            spinnersGridData.grabExcessHorizontalSpace = true;
+            spinnersGridData.verticalAlignment = GridData.CENTER;
+            spinnersGridData.horizontalSpan = 2;
+            spinnersGridData.horizontalAlignment = GridData.BEGINNING;
+            spinnersGridData.widthHint = 3 * 12;
+
+            BaseWidgetUtils.createLabel( composite, "Minimum:", 1 );
+            minimumSpinner = new Spinner( composite, SWT.BORDER );
+            minimumSpinner.setMinimum( 0 );
+            minimumSpinner.setMaximum( Integer.MAX_VALUE );
+            minimumSpinner.setDigits( 0 );
+            minimumSpinner.setIncrement( 1 );
+            minimumSpinner.setPageIncrement( 100 );
+            minimumSpinner.setSelection( initialMinimum );
+            minimumSpinner.setLayoutData( spinnersGridData );
+
+            BaseWidgetUtils.createLabel( composite, "Maximum:", 1 );
+            maximumSpinner = new Spinner( composite, SWT.BORDER );
+            maximumSpinner.setMinimum( 0 );
+            maximumSpinner.setMaximum( Integer.MAX_VALUE );
+            maximumSpinner.setDigits( 0 );
+            maximumSpinner.setIncrement( 1 );
+            maximumSpinner.setPageIncrement( 100 );
+            maximumSpinner.setSelection( initialMaximum );
+            maximumSpinner.setLayoutData( spinnersGridData );
+
+            createExclusionsTable( composite );
+
+            createRefinementsTable( composite );
+
+            applyDialogFont( composite );
+            return composite;
+        }
+
+
+        private void createExclusionsTable( Composite composite )
+        {
+            GridData tableGridData = new GridData();
+            tableGridData.grabExcessHorizontalSpace = true;
+            tableGridData.verticalAlignment = GridData.FILL;
+            tableGridData.horizontalAlignment = GridData.FILL;
+            tableGridData.heightHint = 100;
+
+            BaseWidgetUtils.createLabel( composite, "Exclusions:", 1 );
+            Table exclusionsTable = new Table( composite, SWT.BORDER );
+            exclusionsTable.setHeaderVisible( false );
+            exclusionsTable.setLayoutData( tableGridData );
+            exclusionsTable.setLinesVisible( false );
+            exclusionsTableViewer = new TableViewer( exclusionsTable );
+            exclusionsTableViewer.setContentProvider( new ArrayContentProvider() );
+            exclusionsTableViewer.setLabelProvider( new LabelProvider() );
+            exclusionsTableViewer.setInput( new String[]
+                { "chopBefore: \"ou=A\"", "chopAfter: \"ou=A\"" } );
+            exclusionsTableViewer.addSelectionChangedListener( new ISelectionChangedListener()
+            {
+                public void selectionChanged( SelectionChangedEvent event )
+                {
+                    valueSelectedExclusionsTable();
+                }
+            } );
+            exclusionsTableViewer.addDoubleClickListener( new IDoubleClickListener()
+            {
+                public void doubleClick( DoubleClickEvent event )
+                {
+                    editValueExclusionsTable();
+                }
+            } );
+
+            GridLayout gridLayout = new GridLayout();
+            gridLayout.marginWidth = 0;
+            gridLayout.marginHeight = 0;
+            GridData gridData = new GridData();
+            gridData.horizontalAlignment = GridData.CENTER;
+            gridData.grabExcessHorizontalSpace = false;
+            gridData.grabExcessVerticalSpace = false;
+            gridData.verticalAlignment = GridData.FILL;
+
+            Composite buttonComposite = new Composite( composite, SWT.NONE );
+            buttonComposite.setLayoutData( gridData );
+            buttonComposite.setLayout( gridLayout );
+
+            GridData buttonGridData = new GridData();
+            buttonGridData.horizontalAlignment = GridData.FILL;
+            buttonGridData.grabExcessHorizontalSpace = false;
+            buttonGridData.verticalAlignment = GridData.BEGINNING;
+            buttonGridData.widthHint = Activator.getButtonWidth( composite );
+
+            exclusionsTableAddButton = new Button( buttonComposite, SWT.PUSH );
+            exclusionsTableAddButton.setText( "Add..." );
+            exclusionsTableAddButton.setLayoutData( buttonGridData );
+            exclusionsTableAddButton.addSelectionListener( new SelectionAdapter()
+            {
+                public void widgetSelected( SelectionEvent e )
+                {
+                    addValueExclusionsTable();
+                }
+            } );
+
+            exclusionsTableEditButton = new Button( buttonComposite, SWT.PUSH );
+            exclusionsTableEditButton.setText( "Edit..." );
+            exclusionsTableEditButton.setLayoutData( buttonGridData );
+            exclusionsTableEditButton.addSelectionListener( new SelectionAdapter()
+            {
+                public void widgetSelected( SelectionEvent e )
+                {
+                    editValueExclusionsTable();
+                }
+            } );
+            exclusionsTableEditButton.setEnabled( false );
+
+            exclusionsTableDeleteButton = new Button( buttonComposite, SWT.PUSH );
+            exclusionsTableDeleteButton.setText( "Delete" );
+            exclusionsTableDeleteButton.setLayoutData( buttonGridData );
+            exclusionsTableDeleteButton.addSelectionListener( new SelectionAdapter()
+            {
+                public void widgetSelected( SelectionEvent e )
+                {
+                    deleteValueExclusionsTable();
+                }
+            } );
+            exclusionsTableDeleteButton.setEnabled( false );
+        }
+
+
+        /**
+         * TODO valueSelectedExclusionsTable.
+         *
+         */
+        private void valueSelectedExclusionsTable()
+        {
+            String value = getSelectedValueExclusionsTable();
+
+            if ( value == null )
+            {
+                exclusionsTableEditButton.setEnabled( false );
+                exclusionsTableDeleteButton.setEnabled( false );
+            }
+            else
+            {
+                exclusionsTableEditButton.setEnabled( true );
+                exclusionsTableDeleteButton.setEnabled( true );
+            }
+        }
+
+
+        /**
+         * TODO getSelectedValue.
+         *
+         * @return
+         */
+        private String getSelectedValueExclusionsTable()
+        {
+            String value = null;
+
+            IStructuredSelection selection = ( IStructuredSelection ) exclusionsTableViewer.getSelection();
+            if ( !selection.isEmpty() )
+            {
+                Object element = selection.getFirstElement();
+                if ( element instanceof String )
+                {
+                    value = ( String ) element;
+                }
+            }
+
+            return value;
+        }
+
+
+        /**
+         * TODO addValueExclusionsTable.
+         *
+         */
+        private void addValueExclusionsTable()
+        {
+            ExclusionValueEditor valueEditor = new ExclusionValueEditor();
+
+            Object oldRawValue = valueEditor.getRawValue( null, "" );
+
+            CellEditor cellEditor = valueEditor.getCellEditor();
+            cellEditor.setValue( oldRawValue );
+            cellEditor.activate();
+        }
+
+
+        /**
+         * TODO editValueExclusionsTable.
+         *
+         */
+        private void editValueExclusionsTable()
+        {
+            ExclusionValueEditor valueEditor = new ExclusionValueEditor();
+            
+            String oldValue = getSelectedValueExclusionsTable();
+            if ( oldValue != null )
+            {
+                Object oldRawValue = valueEditor.getRawValue( null, oldValue );
+                
+                CellEditor cellEditor = valueEditor.getCellEditor();
+                cellEditor.setValue( oldRawValue );
+                cellEditor.activate();
+                Object newRawValue = cellEditor.getValue();
+                
+                if(newRawValue != null) 
+                {
+                    String newValue = (String) valueEditor.getStringOrBinaryValue( newRawValue );
+                    
+//                    values.remove( oldValue );
+//                    values.add( newValue );
+//                    tableViewer.refresh();
+                }
+            }
+        }
+
+
+        /**
+         * TODO deleteValueExclusionsTable.
+         *
+         */
+        private void deleteValueExclusionsTable()
+        {
+            // TODO Auto-generated method stub
+
+        }
+
+
+        private void createRefinementsTable( Composite composite )
+        {
+            GridData tableGridData = new GridData();
+            tableGridData.grabExcessHorizontalSpace = true;
+            tableGridData.verticalAlignment = GridData.FILL;
+            tableGridData.horizontalAlignment = GridData.FILL;
+            tableGridData.heightHint = 100;
+
+            BaseWidgetUtils.createLabel( composite, "Refinements:", 1 );
+            Table refinementsTable = new Table( composite, SWT.BORDER );
+            refinementsTable.setHeaderVisible( false );
+            refinementsTable.setLayoutData( tableGridData );
+            refinementsTable.setLinesVisible( false );
+            refinementsTableViewer = new TableViewer( refinementsTable );
+            refinementsTableViewer.setContentProvider( new ArrayContentProvider() );
+            refinementsTableViewer.setLabelProvider( new LabelProvider() );
+            refinementsTableViewer.setInput( new String[]
+                { "and:{ item:35.5.2.1, item:inetOrgPerson }" } );
+            refinementsTableViewer.addSelectionChangedListener( new ISelectionChangedListener()
+            {
+                public void selectionChanged( SelectionChangedEvent event )
+                {
+                    valueSelectedRefinementsTable();
+                }
+            } );
+
+            refinementsTableViewer.addDoubleClickListener( new IDoubleClickListener()
+            {
+                public void doubleClick( DoubleClickEvent event )
+                {
+                    editValueRefinementsTable();
+                }
+            } );
+
+            GridLayout gridLayout = new GridLayout();
+            gridLayout.marginWidth = 0;
+            gridLayout.marginHeight = 0;
+            GridData gridData = new GridData();
+            gridData.horizontalAlignment = GridData.CENTER;
+            gridData.grabExcessHorizontalSpace = false;
+            gridData.grabExcessVerticalSpace = false;
+            gridData.verticalAlignment = GridData.FILL;
+
+            Composite buttonComposite = new Composite( composite, SWT.NONE );
+            buttonComposite.setLayoutData( gridData );
+            buttonComposite.setLayout( gridLayout );
+
+            GridData buttonGridData = new GridData();
+            buttonGridData.horizontalAlignment = GridData.FILL;
+            buttonGridData.grabExcessHorizontalSpace = false;
+            buttonGridData.verticalAlignment = GridData.BEGINNING;
+            buttonGridData.widthHint = Activator.getButtonWidth( composite );
+
+            refinementsTableAddButton = new Button( buttonComposite, SWT.PUSH );
+            refinementsTableAddButton.setText( "Add..." );
+            refinementsTableAddButton.setLayoutData( buttonGridData );
+            refinementsTableAddButton.addSelectionListener( new SelectionAdapter()
+            {
+                public void widgetSelected( SelectionEvent e )
+                {
+                    addValueRefinementsTable();
+                }
+            } );
+
+            refinementsTableEditButton = new Button( buttonComposite, SWT.PUSH );
+            refinementsTableEditButton.setText( "Edit..." );
+            refinementsTableEditButton.setLayoutData( buttonGridData );
+            refinementsTableEditButton.addSelectionListener( new SelectionAdapter()
+            {
+                public void widgetSelected( SelectionEvent e )
+                {
+                    editValueRefinementsTable();
+                }
+            } );
+            refinementsTableEditButton.setEnabled( false );
+
+            refinementsTableDeleteButton = new Button( buttonComposite, SWT.PUSH );
+            refinementsTableDeleteButton.setText( "Delete" );
+            refinementsTableDeleteButton.setLayoutData( buttonGridData );
+            refinementsTableDeleteButton.addSelectionListener( new SelectionAdapter()
+            {
+                public void widgetSelected( SelectionEvent e )
+                {
+                    deleteValueRefinementsTable();
+                }
+            } );
+            refinementsTableDeleteButton.setEnabled( false );
+        }
+
+
+        /**
+         * TODO valueSelectedExclusionsTable.
+         *
+         */
+        private void valueSelectedRefinementsTable()
+        {
+            String value = getSelectedValueRefinementsTable();
+
+            if ( value == null )
+            {
+                refinementsTableEditButton.setEnabled( false );
+                refinementsTableDeleteButton.setEnabled( false );
+            }
+            else
+            {
+                refinementsTableEditButton.setEnabled( true );
+                refinementsTableDeleteButton.setEnabled( true );
+            }
+        }
+
+
+        /**
+         * TODO getSelectedValue.
+         *
+         * @return
+         */
+        private String getSelectedValueRefinementsTable()
+        {
+            String value = null;
+
+            IStructuredSelection selection = ( IStructuredSelection ) refinementsTableViewer.getSelection();
+            if ( !selection.isEmpty() )
+            {
+                Object element = selection.getFirstElement();
+                if ( element instanceof String )
+                {
+                    value = ( String ) element;
+                }
+            }
+
+            return value;
+        }
+
+
+        private void addValueRefinementsTable()
+        {
+            // TODO Auto-generated method stub
+
+        }
+
+
+        private void editValueRefinementsTable()
+        {
+            // TODO Auto-generated method stub
+
+        }
+
+
+        private void deleteValueRefinementsTable()
+        {
+        }
+
+    }
+}