You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/09/03 01:47:38 UTC

svn commit: r267349 - in /directory/shared/ldap/trunk/common/src: antlr/ java/org/apache/ldap/common/subtree/ test/org/apache/ldap/common/subtree/

Author: akarasulu
Date: Fri Sep  2 16:47:31 2005
New Revision: 267349

URL: http://svn.apache.org/viewcvs?rev=267349&view=rev
Log:
Applied Ersin Er's patch for fixing white space issues with the subtree 
specification parser in DIREVE-52 here:

    http://issues.apache.org/jira/browse/DIRLDAP-52


Modified:
    directory/shared/ldap/trunk/common/src/antlr/subtree-specification.g
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationLexer.java
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationParser.java
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/SubtreeSpecificationParser.java
    directory/shared/ldap/trunk/common/src/test/org/apache/ldap/common/subtree/SubtreeSpecificationParserTest.java

Modified: directory/shared/ldap/trunk/common/src/antlr/subtree-specification.g
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/antlr/subtree-specification.g?rev=267349&r1=267348&r2=267349&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/antlr/subtree-specification.g (original)
+++ directory/shared/ldap/trunk/common/src/antlr/subtree-specification.g Fri Sep  2 16:47:31 2005
@@ -1,7 +1,7 @@
 header
 {
 /*
- *   Copyright 2004 The Apache Software Foundation
+ *   Copyright 2005 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.
@@ -62,7 +62,7 @@
 
 options
 {
-    k = 3;
+    k = 2;
 
     defaultErrorHandler = false;
 }
@@ -76,6 +76,8 @@
     private static final Logger log = LoggerFactory.getLogger( AntlrSubtreeSpecificationParser.class );
     private DnParser dnParser;
     
+    private boolean matchedAnyComponentYet = false;
+    
     private boolean isNormalizing = false;
     NameComponentNormalizer normalizer;
     
@@ -150,25 +152,76 @@
     ss = null;
     ssModifier = new SubtreeSpecificationModifier();
 } :
-    LBRACKET
-        ( SP ss_base )?
-        ( SEP SP ss_specificExclusions )?
-        ( SEP SP ss_minimum )?
-        ( SEP SP ss_maximum )?
-        ( SEP SP ss_specificationFilter )?
-    SP RBRACKET
+    LBRACKET ( SP )*
+        (
+            (
+              ss_base ss_base_follower
+            | ss_specificExclusions ss_specificExclusions_follower
+            | ss_minimum ss_minimum_follower
+            | ss_maximum ss_maximum_follower
+            | ss_specificationFilter
+            )
+            ( SP )*
+        )?
+    RBRACKET
     {
         ss = ssModifier.getSubtreeSpecification();
     }
     ;
 
+    
+ss_base_follower
+    :
+    ( SEP ( SP )*
+        (
+            ss_specificExclusions ss_specificExclusions_follower
+            | ss_minimum ss_minimum_follower
+            | ss_maximum ss_maximum_follower
+            | ss_specificationFilter
+        )
+    )?
+    ;
+
+    
+ss_specificExclusions_follower
+    :
+    ( SEP ( SP )*
+        (
+            ss_minimum ss_minimum_follower
+            | ss_maximum ss_maximum_follower
+            | ss_specificationFilter
+        )
+    )?
+    ;
+
+    
+ss_minimum_follower
+    :
+    ( SEP ( SP )*
+        (
+            ss_maximum ss_maximum_follower
+            | ss_specificationFilter
+        )
+    )?
+    ;
+
+    
+ss_maximum_follower
+    :
+    ( SEP ( SP )*
+        (
+            ss_specificationFilter
+        )
+    )?
+    ;
+
 
 ss_base
 {
     log.debug( "entered ss_base()" );
     Name base = null;
 } :
-    "base" (SP)+ base=localName
+    "base" ( SP )+ base=localName
     {
         ssModifier.setBase( base );
     }
@@ -192,8 +245,8 @@
     log.debug( "entered specificExclusions()" );
 } :
     LBRACKET
-        ( SP specificExclusion
-            (SEP SP specificExclusion)*
+        ( ( SP )* specificExclusion
+            ( SEP ( SP )* specificExclusion )*
         )?
     SP RBRACKET
     ;
@@ -260,10 +313,10 @@
     log.debug( "entered ss_specificationFilter()" );
     ExprNode theRefinement = null;
 }:
-    ( "specificationFilter" ( SP )+ theRefinement=refinement
+    "specificationFilter" ( SP )+ theRefinement=refinement
     {
         ssModifier.setRefinement( theRefinement );
-    } )?
+    }
     ;
 
 
@@ -386,11 +439,11 @@
         {
             tempChildren.add( child );
         }
-        ( SEP SP child=refinement
+        ( SEP ( SP )* child=refinement
         {
             tempChildren.add( child );
         } )*
-    )? SP RBRACKET
+    )? ( SP )* RBRACKET
     {
         children = tempChildren;
     }
@@ -417,7 +470,7 @@
 
 options
 {
-    k = 3;
+    k = 2;
 
     charVocabulary = '\u0001'..'\u0127';
 
@@ -438,7 +491,7 @@
 // attribute description lexer rules from models
 // ----------------------------------------------------------------------------
 
-SP : ' ' ;
+SP : ' ';
 
 COLON : ':' { log.debug( "matched COLON(':')" ); } ;
 

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationLexer.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationLexer.java?rev=267349&r1=267348&r2=267349&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationLexer.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationLexer.java Fri Sep  2 16:47:31 2005
@@ -1,5 +1,5 @@
 /*
- *   Copyright 2004 The Apache Software Foundation
+ *   Copyright 2005 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationParser.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationParser.java?rev=267349&r1=267348&r2=267349&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationParser.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/ReusableAntlrSubtreeSpecificationParser.java Fri Sep  2 16:47:31 2005
@@ -1,5 +1,5 @@
 /*
- *   Copyright 2004 The Apache Software Foundation
+ *   Copyright 2005 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/SubtreeSpecificationParser.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/SubtreeSpecificationParser.java?rev=267349&r1=267348&r2=267349&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/SubtreeSpecificationParser.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/subtree/SubtreeSpecificationParser.java Fri Sep  2 16:47:31 2005
@@ -1,5 +1,5 @@
 /*
- *   Copyright 2004 The Apache Software Foundation
+ *   Copyright 2005 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.
@@ -123,7 +123,13 @@
             String msg = "Parser failure on subtree specification:\n\t" + spec ;
             msg += "\nAntlr exception trace:\n" + e.getMessage();
             throw new ParseException( msg, e.getColumn() );
-        }   
+        }  
+        catch ( Exception e )
+        {
+            String msg = "Parser failure on subtree specification:\n\t" + spec ;
+            msg += "\nAntlr exception trace:\n" + e.getMessage();
+            throw new ParseException( msg, 0 );
+        }
 
         return ss;
     }

Modified: directory/shared/ldap/trunk/common/src/test/org/apache/ldap/common/subtree/SubtreeSpecificationParserTest.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/test/org/apache/ldap/common/subtree/SubtreeSpecificationParserTest.java?rev=267349&r1=267348&r2=267349&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/test/org/apache/ldap/common/subtree/SubtreeSpecificationParserTest.java (original)
+++ directory/shared/ldap/trunk/common/src/test/org/apache/ldap/common/subtree/SubtreeSpecificationParserTest.java Fri Sep  2 16:47:31 2005
@@ -1,5 +1,5 @@
 /*
- *   Copyright 2004 The Apache Software Foundation
+ *   Copyright 2005 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.
@@ -46,10 +46,6 @@
     /** A valid empty specification with single white space between brackets */
     private static final String EMPTY_SPEC =
         "{ }";
-    
-    /** An invalid empty specification with two white spaces between brackets */
-    private static final String INVALID_EMPTY_SPEC_WITH_EXTRA_WS =
-        "{  }";
 
     /** A valid specification only with base set */
     private static final String SPEC_WITH_BASE =
@@ -58,22 +54,18 @@
     /** An invalid specification with missing white space and base set */
     private static final String INVALID_SPEC_WITH_BASE_AND_MISSING_WS =
         "{ base\"ou=system\"}";
-    
-    /** An invalid specification with extra whitespace and base set */
-    private static final String INVALID_SPEC_WITH_BASE_AND_EXTRA_WS =
-        "{ base ou=system\" }    ";
 
     /** A valid specification with some specific exclusions set */
     private static final String SPEC_WITH_SPECIFICEXCLUSIONS =
-        "{, specificExclusions { chopAfter:\"ef=gh\", chopBefore:\"ab=cd\" } }";
+        "{ specificExclusions { chopAfter:\"ef=gh\", chopBefore:\"ab=cd\" } }";
     
     /** A valid specification with empty specific exclusions set */
     private static final String SPEC_WITH_EMPTY_SPECIFICEXCLUSIONS =
-        "{, specificExclusions { } }";
+        "{ specificExclusions { } }";
 
     /** A valid specification with minimum and maximum set */
     private static final String SPEC_WITH_MINIMUM_AND_MAXIMUM =
-        "{, minimum 1, maximum 2 }";
+        "{ minimum 1, maximum 2 }";
     
     /** A valid specification with base and minimum and maximum set */
     private static final String SPEC_WITH_BASE_AND_MINIMUM_AND_MAXIMUM =
@@ -100,9 +92,11 @@
         ", minimum 7, maximum   77" + 
         ", specificationFilter     and:{ and:{ item:1.2.3, or:{ item:4.5.6, item:7.8.9 } }, not:{ item:10.11.12 } } }";
     
+    /** An invalid specification with wrong component order */
     private static final String INVALID_SPEC_WITH_WRONG_COMPONENT_ORDER =
         "{ base \"ou=system\", minimum 3, specificExclusions { chopBefore:\"x=y\" } }";
 
+    /** An invalid specification with completely unrelated content */
     private static final String INVALID_SILLY_THING =
         "How much wood would a wood chuck chuck if a wood chuck would chuck wood?";
 
@@ -153,27 +147,6 @@
         ss = parser.parse( EMPTY_SPEC );
         assertNotNull( ss );
     }
-
-
-    /**
-     * Tests the parser with an invalid empty specification with extra white spaces.
-     */
-    public void testInvalidEmptySpecWithExtraWS() throws Exception
-    {
-        try
-        {
-           SubtreeSpecification ss = parser.parse( INVALID_EMPTY_SPEC_WITH_EXTRA_WS );
-           fail( "testInvalidEmptySpecWithExtraWS() should never come here..." );
-        }
-        catch ( ParseException e )
-        {
-            assertNotNull( e );
-        }
-        catch ( IOException e )
-        {
-            assertNotNull( e );
-        }
-    }
     
     
     /**
@@ -199,31 +172,6 @@
            fail( "testInvalidSpecWithBaseAndMissingWS() should never come here..." );
         }
         catch ( ParseException e )
-        {
-            assertNotNull( e );
-        }
-        catch ( IOException e )
-        {
-            assertNotNull( e );
-        }
-    }
-
-
-    /**
-     * Tests the parser with an invalid specification with extra white spaces and base set.
-     */
-    public void testInvalidSpecWithBaseAndExtraWS() throws Exception
-    {
-        try
-        {
-           SubtreeSpecification ss = parser.parse( INVALID_SPEC_WITH_BASE_AND_EXTRA_WS );
-           fail( "testInvalidSpecWithBaseAndExtraWS() should never come here..." );
-        }
-        catch ( ParseException e )
-        {
-            assertNotNull( e );
-        }
-        catch ( IOException e )
         {
             assertNotNull( e );
         }