You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2015/07/18 00:00:11 UTC

svn commit: r1691651 - in /directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor: dialogs/ wrappers/

Author: elecharny
Date: Fri Jul 17 22:00:10 2015
New Revision: 1691651

URL: http://svn.apache.org/r1691651
Log:
o Added the SizeTimeLimit dialog to manage the olcLimits content
o Added the OrderedSizeLimitWrapper
o Modified the SizeLimitWrapper to be able to extend it
o Removed a useless import
o Change the way we parse the Limits, as it's ordered : we get rid of the prefix.
o Used OrderedSize/TimeLimit in the LimitsWrapper class


Added:
    directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/dialogs/SizeTimeLimitDialog.java
    directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedSizeLimitWrapper.java
Modified:
    directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitDecorator.java
    directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitsWrapper.java
    directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedTimeLimitWrapper.java
    directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/SizeLimitWrapper.java

Added: directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/dialogs/SizeTimeLimitDialog.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/dialogs/SizeTimeLimitDialog.java?rev=1691651&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/dialogs/SizeTimeLimitDialog.java (added)
+++ directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/dialogs/SizeTimeLimitDialog.java Fri Jul 17 22:00:10 2015
@@ -0,0 +1,441 @@
+/*
+ *  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.openldap.config.editor.dialogs;
+
+
+import org.apache.directory.studio.common.ui.AddEditDialog;
+import org.apache.directory.studio.common.ui.CommonUIConstants;
+import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
+import org.eclipse.jface.dialogs.IDialogConstants;
+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.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.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.apache.directory.studio.openldap.config.editor.wrappers.LimitWrapper;
+import org.apache.directory.studio.openldap.config.editor.wrappers.OrderedSizeLimitWrapper;
+import org.apache.directory.studio.openldap.config.editor.wrappers.OrderedTimeLimitWrapper;
+
+
+/**
+ * The LimitDialog is used to edit the size and time limit parameter<br/>
+ * 
+ * The dialog overlay is like :
+ * 
+ * <pre>
+ * +--------------------------------------------------------------------------+
+ * | Limit                                                                    |
+ * | .----------------------------------------------------------------------. |
+ * | | (o) Size Limit  : [                                      ] (Edit...) | |
+ * | | (o) TimeLimit :   [                                      ] (Edit...) | |
+ * | '----------------------------------------------------------------------' |
+ * |                                                                          |
+ * |  (Cancel)                                                         (OK)   |
+ * +--------------------------------------------------------------------------+
+ * </pre>
+ * 
+ * A second option for the Dialog would be like :
+ * 
+ * +--------------------------------------------------------------------------+
+ * | Limit                                                                    |
+ * | .----------------------------------------------------------------------. |
+ * | |   (o) Size Limit                  (o) TimeLimit                      | |
+ * | '----------------------------------------------------------------------' |
+ * ............................................................................
+ * 
+ * SizeLimit :
+ * ............................................................................
+ * | .----------------------------------------------------------------------. |
+ * | | Soft Limit :          [----------]  [] Unlimited                     | |
+ * | |                                                                      | |
+ * | | Hard Limit :          [----------]  [] Unlimited [] Soft             | |
+ * | |                                                                      | |
+ * | | Global Limit :        [----------]  [] Unlimited                     | |
+ * | |                                                                      | |
+ * | | Unchecked Limit :     [----------]  [] Unlimited [] Disabled         | |
+ * | |                                                                      | |
+ * | | Paged Results Limit : [----------]  [] Unlimited [] No Estimate      | |
+ * | |                                                                      | |
+ * | | Paged Results Total : [----------]  [] Unlimited [] Disabled [] Hard | |
+ * | '----------------------------------------------------------------------' |
+ * ............................................................................
+ * TimeLimit :
+ * ............................................................................
+ * | .----------------------------------------------------------------------. |
+ * | | Soft Limit :  [----------]  [] Unlimited                             | |
+ * | |                                                                      | |
+ * | | Hard Limit :  [----------]  [] Unlimited  [] Soft                    | |
+ * | |                                                                      | |
+ * | | Global :      [----------]  [] Unlimited                             | |
+ * | '----------------------------------------------------------------------' |
+ * ............................................................................
+ * End :
+ * ............................................................................
+ * | Resulting Limit                                                          |
+ * | .----------------------------------------------------------------------. |
+ * | | <//////////////////////////////////////////////////////////////////> | |
+ * | '----------------------------------------------------------------------' |
+ * |                                                                          |
+ * |  (Cancel)                                                         (OK)   |
+ * +--------------------------------------------------------------------------+
+ * </pre>
+ * 
+ * But this would mean a duplication of code.
+ *  
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SizeTimeLimitDialog extends AddEditDialog<LimitWrapper>
+{
+    /** The TimeLimit radio button */
+    private Button timeLimitButton;
+    
+    /** The Text that contains the TimeLimit (either as typed or as built from the TimeLimitDialog) */
+    private Text timeLimitText;
+    
+    /** A Button used to edit the TimeLimit value */
+    private Button timeLimitEditButton;
+    
+    /** The SizeLimit radio button */
+    private Button sizeLimitButton;
+    
+    /** The Text that contains the SizeLimit (either as typed or as built from the SizeLimitDialog) */
+    private Text sizeLimitText;
+    
+    /** A Button used to edit the SizeLimit value */
+    private Button sizeLimitEditButton;
+    
+    /**
+     * Listeners for the Selector radioButtons. It will enable or disable the dnSpec or Group accordingly
+     * to the selection.
+     **/ 
+    private SelectionListener sizeTimeButtonsSelectionListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent event )
+        {
+            if ( event.getSource() instanceof Button )
+            {
+                Button button = (Button)event.getSource();
+                
+                if ( button == sizeLimitButton )
+                {
+                    if ( button.getSelection() )
+                    {
+                        setEditedElement( new OrderedSizeLimitWrapper( "" ) );
+
+                        // Enable the SizeLimit elements, disable the TimeLimit ones
+                        sizeLimitEditButton.setEnabled( true );
+                        sizeLimitText.setEnabled( true );
+                        timeLimitEditButton.setEnabled( false );
+                        timeLimitText.setEnabled( false );
+                        timeLimitText.clearSelection();
+                    }
+                }
+                else
+                {
+                    setEditedElement( new OrderedTimeLimitWrapper( "" ) );
+                    
+                    // Enable the TimeLimit elements, disable the SizeLimit ones
+                    timeLimitEditButton.setEnabled( true );
+                    timeLimitText.setEnabled( true );
+                    sizeLimitEditButton.setEnabled( false );
+                    sizeLimitText.setEnabled( false );
+                    sizeLimitText.clearSelection();
+                }
+            }
+        }
+    };
+    
+    
+    /**
+     * The listener for the sizeLimit Text
+     */
+    private SelectionListener sizeLimitEditSelectionListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            SizeLimitDialog dialog = new SizeLimitDialog( sizeLimitText.getShell(), sizeLimitText.getText() );
+
+            if ( dialog.open() == OverlayDialog.OK )
+            {
+                String newSizeLimitStr = dialog.getNewLimit();
+                
+                if ( newSizeLimitStr != null )
+                {
+                    sizeLimitText.setText( newSizeLimitStr );
+                }
+            }
+        }
+    };
+    
+    
+    /**
+     * The listener for the timeLimit Text
+     */
+    private SelectionListener timeLimitEditSelectionListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            TimeLimitDialog dialog = new TimeLimitDialog( timeLimitText.getShell(), timeLimitText.getText() );
+
+            if ( dialog.open() == OverlayDialog.OK )
+            {
+                String newTimeLimitStr = dialog.getNewLimit();
+                
+                if ( newTimeLimitStr != null )
+                {
+                    timeLimitText.setText( newTimeLimitStr );
+                }
+            }
+        }
+    };
+
+    
+    protected ModifyListener sizeLimitTextListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            Button okButton = getButton( IDialogConstants.OK_ID );
+
+            // This button might be null when the dialog is called.
+            if ( okButton == null )
+            {
+                return;
+            }
+
+            // The String must be a valid SizeLimit
+            String sizeLimitStr = sizeLimitText.getText();
+            
+            OrderedSizeLimitWrapper sizeLimitWrapper = new OrderedSizeLimitWrapper( sizeLimitStr );
+            
+            if ( sizeLimitWrapper.isValid() )
+            {
+                sizeLimitText.setForeground( CommonUIConstants.BLACK_COLOR );
+                setEditedElement( sizeLimitWrapper );
+                okButton.setEnabled( true );
+            }
+            else
+            {
+                sizeLimitText.setForeground( CommonUIConstants.RED_COLOR );
+                okButton.setEnabled( false );
+            }
+        }
+    };
+
+    
+    protected ModifyListener timeLimitTextListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            Button okButton = getButton( IDialogConstants.OK_ID );
+
+            // This button might be null when the dialog is called.
+            if ( okButton == null )
+            {
+                return;
+            }
+
+            // The String must be a valid TimeLimit
+            String timeLimitStr = timeLimitText.getText();
+            
+            OrderedTimeLimitWrapper timeLimitWrapper = new OrderedTimeLimitWrapper( timeLimitStr );
+            
+            if ( timeLimitWrapper.isValid() )
+            {
+                timeLimitText.setForeground( CommonUIConstants.BLACK_COLOR );
+                setEditedElement( timeLimitWrapper );
+                okButton.setEnabled( true );
+            }
+            else
+            {
+                timeLimitText.setForeground( CommonUIConstants.RED_COLOR );
+                okButton.setEnabled( false );
+            }
+        }
+    };
+    
+    /**
+     * Create a new instance of the SizeTimeLimitsDialog
+     * 
+     * @param parentShell The parent Shell
+     */
+    public SizeTimeLimitDialog( Shell parentShell )
+    {
+        super( parentShell );
+        super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+    }
+
+
+    /**
+     * Create a new instance of the SizeTimeLimitDialog
+     * 
+     * @param parentShell The parent Shell
+     * @param timeLimitStr The instance containing the Limits data
+     */
+    public SizeTimeLimitDialog( Shell parentShell, String limitStr )
+    {
+        super( parentShell );
+        super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+    }
+    
+    
+    /**
+     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+     */
+    protected void configureShell( Shell shell )
+    {
+        super.configureShell( shell );
+        shell.setText( "Size/Time Limit" );
+    }
+    
+    
+    /**
+     * Create the Dialog for TimeLimit :
+     * <pre>
+     * Limit
+     * .----------------------------------------------------------------------.
+     * | (o) Size Limit  : [                                      ] (Edit...) |
+     * | (o) TimeLimit :   [                                      ] (Edit...) |
+     * '----------------------------------------------------------------------'
+     * </pre>
+     * @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 );
+        composite.setLayoutData( gd );
+        
+        // Create the selection group
+        Group selectionGroup = BaseWidgetUtils.createGroup( parent, "Limit selection", 1 );
+        GridLayout selectionGridLayout = new GridLayout( 3, false );
+        selectionGroup.setLayout( selectionGridLayout );
+        selectionGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // SizeLimit button
+        sizeLimitButton = BaseWidgetUtils.createRadiobutton( selectionGroup, "SizeLimit", 1 );
+        sizeLimitButton.addSelectionListener( sizeTimeButtonsSelectionListener );
+        
+        // SizeLimit Text
+        sizeLimitText = BaseWidgetUtils.createText( selectionGroup, "", 1 );
+        sizeLimitText.addModifyListener( sizeLimitTextListener );
+
+        // SizeLimit Edit button
+        sizeLimitEditButton = BaseWidgetUtils.createButton( selectionGroup, "Edit...", 1 );
+        sizeLimitEditButton.addSelectionListener( sizeLimitEditSelectionListener );
+
+        // TimeLimit button
+        timeLimitButton = BaseWidgetUtils.createRadiobutton( selectionGroup, "TimeLimit", 1 );
+        timeLimitButton.addSelectionListener( sizeTimeButtonsSelectionListener );
+
+        // TimeLimit Text
+        timeLimitText = BaseWidgetUtils.createText( selectionGroup, "", 1 );
+        timeLimitText.addModifyListener( timeLimitTextListener );
+
+        // TimeLimit Edit button
+        timeLimitEditButton = BaseWidgetUtils.createButton( selectionGroup, "Edit...", 1 );
+        timeLimitEditButton.addSelectionListener( timeLimitEditSelectionListener );
+
+        // create the SizeLimit
+        initDialog();
+        addListeners();
+        
+        applyDialogFont( composite );
+
+        return composite;
+    }
+
+
+    /**
+     * Adds listeners.
+     */
+    private void addListeners()
+    {
+        /*
+        softLimitText.addModifyListener( softLimitTextListener );
+        softUnlimitedCheckbox.addSelectionListener( softUnlimitedCheckboxSelectionListener );
+        hardLimitText.addModifyListener( hardLimitTextListener );
+        hardUnlimitedCheckbox.addSelectionListener( hardUnlimitedCheckboxSelectionListener );
+        hardSoftCheckbox.addSelectionListener( hardSoftCheckboxSelectionListener );
+        globalLimitText.addModifyListener( globalLimitTextListener );
+        globalUnlimitedCheckbox.addSelectionListener( globalUnlimitedCheckboxSelectionListener );
+        */
+    }
+
+
+    @Override
+    public void addNewElement()
+    {
+        setEditedElement( null );
+    }
+
+
+    /**
+     * Initializes the UI from the Limit
+     */
+    protected void initDialog()
+    {
+        LimitWrapper editedElement = (LimitWrapper)getEditedElement();
+        
+        if ( editedElement != null )
+        {
+            if ( editedElement instanceof OrderedSizeLimitWrapper )
+            {
+                sizeLimitButton.setSelection( true );
+                
+                // Enable the SizeLimit elements, disable the TimeLimit ones
+                sizeLimitEditButton.setEnabled( true );
+                sizeLimitText.setEnabled( true );
+                sizeLimitText.setText( editedElement.toString() );
+                timeLimitEditButton.setEnabled( false );
+                timeLimitText.setEnabled( false );
+            }
+            else
+            {
+                timeLimitButton.setSelection( true );
+                
+                // Enable the TimeLimit elements, disable the SizeLimit ones
+                timeLimitEditButton.setEnabled( true );
+                timeLimitText.setEnabled( true );
+                timeLimitText.setText( editedElement.toString() );
+                sizeLimitEditButton.setEnabled( false );
+                sizeLimitText.setEnabled( false );
+            }
+        }
+        else
+        {
+            // Nothing selected, disable the Text and Button
+            timeLimitEditButton.setEnabled( false );
+            timeLimitText.setEnabled( false );
+            timeLimitText.clearSelection();
+            sizeLimitEditButton.setEnabled( false );
+            sizeLimitText.setEnabled( false );
+            sizeLimitText.clearSelection();
+        }
+    }
+}

Modified: directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitDecorator.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitDecorator.java?rev=1691651&r1=1691650&r2=1691651&view=diff
==============================================================================
--- directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitDecorator.java (original)
+++ directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitDecorator.java Fri Jul 17 22:00:10 2015
@@ -20,16 +20,29 @@
 package org.apache.directory.studio.openldap.config.editor.wrappers;
 
 import org.apache.directory.studio.common.ui.TableDecorator;
+import org.apache.directory.studio.openldap.config.editor.dialogs.LimitsDialog;
+import org.apache.directory.studio.openldap.config.editor.dialogs.SizeTimeLimitDialog;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
 
 /**
  * A decorator for the TimeLimitWrapper class.
  *  
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public abstract class LimitDecorator<E> extends TableDecorator<E>
+public class LimitDecorator extends TableDecorator<LimitWrapper>
 {
     /**
+     * Create a new instance of LimitDecorator
+     * @param parentShell The parent Shell
+     */
+    public LimitDecorator( Shell parentShell, String title )
+    {
+        setDialog( new SizeTimeLimitDialog( parentShell ) );
+    }
+    
+    
+    /**
      * Construct the label for a TimeLimit. It can be one of :
      * 
      */
@@ -52,5 +65,13 @@ public abstract class LimitDecorator<E>
     public Image getImage( Object element )
     {
         return null;
+    }
+
+
+    @Override
+    public int compare( LimitWrapper e1, LimitWrapper e2 )
+    {
+        // TODO Auto-generated method stub
+        return 0;
     };
 }

Modified: directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitsWrapper.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitsWrapper.java?rev=1691651&r1=1691650&r2=1691651&view=diff
==============================================================================
--- directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitsWrapper.java (original)
+++ directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/LimitsWrapper.java Fri Jul 17 22:00:10 2015
@@ -106,46 +106,78 @@ public class LimitsWrapper implements Cl
             String lowerCaseLimits = limitsStr.toLowerCase();
             int pos = 0;
             
-            // Process the selector
-            if ( lowerCaseLimits.startsWith( LimitSelectorEnum.ANY.getName() ) )
+            // It's ordered : process the prefix
+            if ( Strings.isCharASCII( lowerCaseLimits, pos, '{' ) )
             {
-                selector = LimitSelectorEnum.ANY;
-                pos += LimitSelectorEnum.ANY.getName().length();
-            }
-            if ( lowerCaseLimits.startsWith( LimitSelectorEnum.ANONYMOUS.getName() ) )
-            {
-                selector = LimitSelectorEnum.ANONYMOUS;
-                pos += LimitSelectorEnum.ANONYMOUS.getName().length();
-            }
-            else if ( lowerCaseLimits.startsWith( LimitSelectorEnum.USERS.getName() ) )
-            {
-                selector = LimitSelectorEnum.USERS;
-                pos += LimitSelectorEnum.USERS.getName().length();
-            }
-            else if ( lowerCaseLimits.startsWith( LimitSelectorEnum.DNSPEC.getName() ) )
-            {
-                selector = LimitSelectorEnum.DNSPEC;
-                pos += LimitSelectorEnum.DNSPEC.getName().length();
+                pos++;
+                prefix = 0;
                 
-                // parse the type
-                pos = parseDnSpec( lowerCaseLimits, pos );
-                
-                if ( pos == ERROR )
+                while ( pos < lowerCaseLimits.length() )
                 {
-                    isValid = false;
+                    char c = lowerCaseLimits.charAt( pos );
+                    
+                    if ( ( c >= '0' ) && ( c <= '9' ) )
+                    {
+                        prefix = prefix * 10 + ( c - '0' );
+                        pos++;
+                    }
+                    else if ( c == '}' )
+                    {
+                        pos++;
+                        break;
+                    }
+                    else
+                    {
+                        isValid = false;
+                        break;
+                    }
                 }
             }
-            else if ( lowerCaseLimits.startsWith( LimitSelectorEnum.GROUP.getName() ) )
+            
+            if ( isValid )
             {
-                selector = LimitSelectorEnum.GROUP;
-                pos += LimitSelectorEnum.GROUP.getName().length();
-                
-                pos = parseGroup( lowerCaseLimits, pos );
-                
-                if ( pos == ERROR )
+                lowerCaseLimits = lowerCaseLimits.substring( pos );
+                // Process the selector
+                if ( lowerCaseLimits.startsWith( LimitSelectorEnum.ANY.getName() ) )
+                {
+                    selector = LimitSelectorEnum.ANY;
+                    pos += LimitSelectorEnum.ANY.getName().length();
+                }
+                if ( lowerCaseLimits.startsWith( LimitSelectorEnum.ANONYMOUS.getName() ) )
                 {
-                    // This is an error
-                    isValid = false;
+                    selector = LimitSelectorEnum.ANONYMOUS;
+                    pos += LimitSelectorEnum.ANONYMOUS.getName().length();
+                }
+                else if ( lowerCaseLimits.startsWith( LimitSelectorEnum.USERS.getName() ) )
+                {
+                    selector = LimitSelectorEnum.USERS;
+                    pos += LimitSelectorEnum.USERS.getName().length();
+                }
+                else if ( lowerCaseLimits.startsWith( LimitSelectorEnum.DNSPEC.getName() ) )
+                {
+                    selector = LimitSelectorEnum.DNSPEC;
+                    pos += LimitSelectorEnum.DNSPEC.getName().length();
+                    
+                    // parse the type
+                    pos = parseDnSpec( lowerCaseLimits, pos );
+                    
+                    if ( pos == ERROR )
+                    {
+                        isValid = false;
+                    }
+                }
+                else if ( lowerCaseLimits.startsWith( LimitSelectorEnum.GROUP.getName() ) )
+                {
+                    selector = LimitSelectorEnum.GROUP;
+                    pos += LimitSelectorEnum.GROUP.getName().length();
+                    
+                    pos = parseGroup( lowerCaseLimits, pos );
+                    
+                    if ( pos == ERROR )
+                    {
+                        // This is an error
+                        isValid = false;
+                    }
                 }
             }
             
@@ -423,7 +455,7 @@ public class LimitsWrapper implements Cl
                 return ERROR;
             }
             
-            TimeLimitWrapper timeLimitWrapper = new TimeLimitWrapper( limitStr.substring( 0, i ) );
+            OrderedTimeLimitWrapper timeLimitWrapper = new OrderedTimeLimitWrapper( limitStr.substring( 0, i ) );
             
             if ( timeLimitWrapper.isValid() )
             {
@@ -451,7 +483,7 @@ public class LimitsWrapper implements Cl
                 return ERROR;
             }
             
-            SizeLimitWrapper sizeLimitWrapper = new SizeLimitWrapper( limitStr.substring( 0, i ) );
+            OrderedSizeLimitWrapper sizeLimitWrapper = new OrderedSizeLimitWrapper( limitStr.substring( 0, i ) );
             
             if ( sizeLimitWrapper.isValid() )
             {

Added: directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedSizeLimitWrapper.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedSizeLimitWrapper.java?rev=1691651&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedSizeLimitWrapper.java (added)
+++ directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedSizeLimitWrapper.java Fri Jul 17 22:00:10 2015
@@ -0,0 +1,177 @@
+/*
+ *  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.openldap.config.editor.wrappers;
+
+import org.apache.directory.studio.common.ui.widgets.OrderedElement;
+
+/**
+ * This class wraps the SizeLimit parameter :
+ * <pre>
+ * size      ::= 'size' sizeLimit size-e
+ * size-e    ::= ' size' sizeLimit size-e | e
+ * sizeLimit ::= '.soft=' limit | '.hard=' hardLimit | '.pr=' prLimit | '.prtotal=' prTLimit
+ *                  | '.unchecked=' uLimit | '=' limit
+ * limit     ::= 'unlimited' | 'none' | INT
+ * hardLimit ::= 'soft' | limit
+ * ulimit    ::= 'disabled' | limit
+ * prLimit   ::= 'noEstimate' | limit
+ * prTLimit  ::= ulimit | 'hard'
+ * </pre>
+ * 
+ * Note : each of the limit is an Integer, so that we can have two states :
+ * <ul>
+ * <li>not existent</li>
+ * <li>has a value</li>
+ * </ul>
+ * A -1 value means unlimited. Any other value is accepted, if > 0.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OrderedSizeLimitWrapper extends SizeLimitWrapper implements OrderedElement
+{
+    /** The prefix, used to order the values */
+    private int prefix;
+
+
+    /**
+     * Create a SizeLimitWrapper instance from a String. 
+     * 
+     * @param sizeLimitStr The String that contain the value
+     */
+    public OrderedSizeLimitWrapper( String sizeLimitStr )
+    {
+        super( sizeLimitStr );
+    }
+
+
+    /**
+     * Sets a new prefix
+     * 
+     * @param prefix the prefix to set
+     */
+    public void setPrefix( int prefix )
+    {
+        this.prefix = prefix;
+    }
+
+    
+    /**
+     * @return the prefix
+     */
+    public int getPrefix()
+    {
+        return prefix;
+    }
+    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void decrementPrefix()
+    {
+        prefix--;
+    }
+    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void incrementPrefix()
+    {
+        prefix++;
+    }
+    
+    
+    /**
+     * @see Comparable#compareTo()
+     */
+    public int compareTo( OrderedSizeLimitWrapper that )
+    {
+        if ( that == null )
+        {
+            return 1;
+        }
+        
+        // Check the prefix
+        if ( prefix < that.prefix )
+        {
+            return -1;
+        }
+        else if ( prefix > that.prefix )
+        {
+            return 1;
+        }
+        
+        return super.compareTo( that );
+    }
+
+    
+    /**
+     * @see Object#hashCode()
+     */
+    public int hashCode()
+    {
+        int h = 37;
+        
+        h += h*17 + prefix;
+        
+        h += h*17 + super.hashCode();
+        
+        return h;
+    }
+
+    
+    /**
+     * @see Object#equals(Object)
+     */
+    public boolean equals( Object that )
+    {
+        // Quick test
+        if ( this == that )
+        {
+            return true;
+        }
+        
+        if ( that instanceof OrderedSizeLimitWrapper )
+        {
+            OrderedSizeLimitWrapper thatInstance = (OrderedSizeLimitWrapper)that;
+            
+            if ( prefix != thatInstance.prefix )
+            {
+                return false;
+            }
+
+            return super.equals( that );
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+
+    /**
+     * @see Object#toString()
+     */
+    public String toString()
+    {
+        return '{' + Integer.toString( prefix ) + '}' + super.toString();
+    }
+}

Modified: directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedTimeLimitWrapper.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedTimeLimitWrapper.java?rev=1691651&r1=1691650&r2=1691651&view=diff
==============================================================================
--- directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedTimeLimitWrapper.java (original)
+++ directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/OrderedTimeLimitWrapper.java Fri Jul 17 22:00:10 2015
@@ -19,7 +19,6 @@
  */
 package org.apache.directory.studio.openldap.config.editor.wrappers;
 
-import org.apache.directory.api.util.Strings;
 import org.apache.directory.studio.common.ui.widgets.OrderedElement;
 
 /**

Modified: directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/SizeLimitWrapper.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/SizeLimitWrapper.java?rev=1691651&r1=1691650&r2=1691651&view=diff
==============================================================================
--- directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/SizeLimitWrapper.java (original)
+++ directory/studio/trunk/plugins/openldap.config.editor/src/main/java/org/apache/directory/studio/openldap/config/editor/wrappers/SizeLimitWrapper.java Fri Jul 17 22:00:10 2015
@@ -70,7 +70,7 @@ public class SizeLimitWrapper extends Ab
     /**
      * Create a SizeLimitWrapper instance
      */
-    private SizeLimitWrapper()
+    protected SizeLimitWrapper()
     {
         super();
     }