Hi Andereas

What about the
/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src.......
references everywhere? Seems to be your local home directory ;-)

Jann



> New Revision: 653799
> 
> URL: http://svn.apache.org/viewvc?rev=653799&view=rev
> Log:
> Adding capability to handle multi-value attributes with test case.
> 
> Added:
>     
> lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java
> Modified:
>     
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g
>     
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java
>     
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java
>     
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g
> 
> Modified: 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g
> URL: 
> http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g?rev=653799&r1=653798&r2=653799&view=diff
> ==============================================================================
> --- 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g
>  (original)
> +++ 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g
>  Tue May  6 08:11:12 2008
> @@ -3,12 +3,12 @@
>  @header {
>  package org.apache.lenya.ac.impl.antlr;
>  import java.util.HashMap;
> -import org.apache.lenya.ac.impl.ErrorHandler;
> +import org.apache.lenya.ac.ErrorHandler;
>  }
>  
>  @lexer::header {
>  package org.apache.lenya.ac.impl.antlr;
> -import org.apache.lenya.ac.impl.ErrorHandler;
> +import org.apache.lenya.ac.ErrorHandler;
>  }
>  
>  @members {
> @@ -65,17 +65,31 @@
>      ;
>      
>  comparison returns [boolean value]
> -    :   a=atom EQUALS b=atom {$value = $a.value.equals($b.value);}
> +    :   a=atom EQUALS b=atom {
> +            if ($a.value instanceof String && $b.value instanceof String) {
> +                $value = $a.value.equals($b.value);
> +            }
> +            else if ($a.value instanceof String && 
> $b.value.getClass().isArray()) {
> +                $value = java.util.Arrays.asList((String[]) 
> $b.value).contains($a.value);
> +            }
> +            else if ($a.value.getClass().isArray() && $b.value instanceof 
> String) {
> +                $value = java.util.Arrays.asList((String[]) 
> $a.value).contains($b.value);
> +            }
> +            else {
> +                throw new FailedPredicateException(input, $a.text + " == " + 
> $b.text,
> +                    "Incompatible arguments for comparison: " + $a.value + 
> ", " + $b.value);
> +            }
> +        }
>      |   LEFTPAR e=orExpression RIGHTPAR {$value = $e.value;}
>      ;
>  
> -atom returns [String value]
> +atom returns [Object value]
>      :   quotedString {$value = $quotedString.value;}
>      |   ID
>          {
> -            String s = (String) memory.get($ID.text);
> -            if ( s != null ) {
> -                $value = s;
> +            Object v = memory.get($ID.text);
> +            if ( v != null ) {
> +                $value = v;
>              }
>              else {
>               $value = "undefined";
> 
> Modified: 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java
> URL: 
> http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java?rev=653799&r1=653798&r2=653799&view=diff
> ==============================================================================
> --- 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java
>  (original)
> +++ 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java
>  Tue May  6 08:11:12 2008
> @@ -1,4 +1,4 @@
> -// $ANTLR 3.0 src/java/org/apache/lenya/ac/impl/antlr/Expressions.g 
> 2007-06-19 15:30:41
> +// $ANTLR 3.0.1 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g
>  2008-05-06 16:50:47
>  
>  package org.apache.lenya.ac.impl.antlr;
>  import org.apache.lenya.ac.ErrorHandler;
> @@ -37,17 +37,17 @@
>      public ExpressionsLexer(CharStream input) {
>          super(input);
>      }
> -    public String getGrammarFileName() { return 
> "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"; }
> +    public String getGrammarFileName() { return 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g";
>  }
>  
>      // $ANTLR start LITERAL
>      public final void mLITERAL() throws RecognitionException {
>          try {
>              int _type = LITERAL;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:92:10: 
> ( '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:92:10: 
> '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"'
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:106:8:
>  ( '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:106:10:
>  '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"'
>              {
>              match('\"'); 
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:92:14: 
> ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:106:14:
>  ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )*
>              loop1:
>              do {
>                  int alt1=2;
> @@ -60,7 +60,7 @@
>  
>                  switch (alt1) {
>               case 1 :
> -                 // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:
> +                 // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:
>                   {
>                   if ( input.LA(1)==' '||input.LA(1)=='.'||(input.LA(1)>='A' 
> && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && 
> input.LA(1)<='z') ) {
>                       input.consume();
> @@ -96,8 +96,8 @@
>      public final void mID() throws RecognitionException {
>          try {
>              int _type = ID;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:93:5: ( 
> ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:93:5: ( 
> 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:107:3:
>  ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:107:5:
>  ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )*
>              {
>              if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' 
> && input.LA(1)<='z') ) {
>                  input.consume();
> @@ -109,7 +109,7 @@
>                  recover(mse);    throw mse;
>              }
>  
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:93:25: 
> ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:107:25:
>  ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )*
>              loop2:
>              do {
>                  int alt2=2;
> @@ -122,7 +122,7 @@
>  
>                  switch (alt2) {
>               case 1 :
> -                 // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:
> +                 // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:
>                   {
>                   if ( (input.LA(1)>='0' && 
> input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' 
> && input.LA(1)<='z') ) {
>                       input.consume();
> @@ -157,8 +157,8 @@
>      public final void mEQUALS() throws RecognitionException {
>          try {
>              int _type = EQUALS;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:94:9: ( 
> '==' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:94:9: 
> '=='
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:108:7:
>  ( '==' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:108:9:
>  '=='
>              {
>              match("=="); 
>  
> @@ -176,8 +176,8 @@
>      public final void mQUOT() throws RecognitionException {
>          try {
>              int _type = QUOT;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:95:7: ( 
> '\"' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:95:7: 
> '\"'
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:109:5:
>  ( '\"' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:109:7:
>  '\"'
>              {
>              match('\"'); 
>  
> @@ -194,8 +194,8 @@
>      public final void mOR() throws RecognitionException {
>          try {
>              int _type = OR;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:96:5: ( 
> '||' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:96:5: 
> '||'
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:110:3:
>  ( '||' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:110:5:
>  '||'
>              {
>              match("||"); 
>  
> @@ -213,8 +213,8 @@
>      public final void mAND() throws RecognitionException {
>          try {
>              int _type = AND;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:97:6: ( 
> '&&' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:97:6: 
> '&&'
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:111:4:
>  ( '&&' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:111:6:
>  '&&'
>              {
>              match("&&"); 
>  
> @@ -232,8 +232,8 @@
>      public final void mLEFTPAR() throws RecognitionException {
>          try {
>              int _type = LEFTPAR;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:98:10: 
> ( '(' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:98:10: 
> '('
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:112:8:
>  ( '(' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:112:10:
>  '('
>              {
>              match('('); 
>  
> @@ -250,8 +250,8 @@
>      public final void mRIGHTPAR() throws RecognitionException {
>          try {
>              int _type = RIGHTPAR;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:99:11: 
> ( ')' )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:99:11: 
> ')'
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:113:9:
>  ( ')' )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:113:11:
>  ')'
>              {
>              match(')'); 
>  
> @@ -268,10 +268,10 @@
>      public final void mWS() throws RecognitionException {
>          try {
>              int _type = WS;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:100:5: 
> ( ( ' ' | '\\t' )+ )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:100:5: 
> ( ' ' | '\\t' )+
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:114:3:
>  ( ( ' ' | '\\t' )+ )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:114:5:
>  ( ' ' | '\\t' )+
>              {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:100:5: 
> ( ' ' | '\\t' )+
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:114:5:
>  ( ' ' | '\\t' )+
>              int cnt3=0;
>              loop3:
>              do {
> @@ -285,7 +285,7 @@
>  
>                  switch (alt3) {
>               case 1 :
> -                 // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:
> +                 // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:
>                   {
>                   if ( input.LA(1)=='\t'||input.LA(1)==' ' ) {
>                       input.consume();
> @@ -322,7 +322,7 @@
>      // $ANTLR end WS
>  
>      public void mTokens() throws RecognitionException {
> -        // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:10: ( 
> LITERAL | ID | EQUALS | QUOT | OR | AND | LEFTPAR | RIGHTPAR | WS )
> +        // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:8:
>  ( LITERAL | ID | EQUALS | QUOT | OR | AND | LEFTPAR | RIGHTPAR | WS )
>          int alt4=9;
>          switch ( input.LA(1) ) {
>          case '\"':
> @@ -432,63 +432,63 @@
>  
>          switch (alt4) {
>              case 1 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:10: LITERAL
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:10:
>  LITERAL
>                  {
>                  mLITERAL(); 
>  
>                  }
>                  break;
>              case 2 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:18: ID
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:18:
>  ID
>                  {
>                  mID(); 
>  
>                  }
>                  break;
>              case 3 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:21: EQUALS
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:21:
>  EQUALS
>                  {
>                  mEQUALS(); 
>  
>                  }
>                  break;
>              case 4 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:28: QUOT
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:28:
>  QUOT
>                  {
>                  mQUOT(); 
>  
>                  }
>                  break;
>              case 5 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:33: OR
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:33:
>  OR
>                  {
>                  mOR(); 
>  
>                  }
>                  break;
>              case 6 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:36: AND
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:36:
>  AND
>                  {
>                  mAND(); 
>  
>                  }
>                  break;
>              case 7 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:40: LEFTPAR
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:40:
>  LEFTPAR
>                  {
>                  mLEFTPAR(); 
>  
>                  }
>                  break;
>              case 8 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:48: RIGHTPAR
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:48:
>  RIGHTPAR
>                  {
>                  mRIGHTPAR(); 
>  
>                  }
>                  break;
>              case 9 :
> -                // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:57: WS
> +                // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:57:
>  WS
>                  {
>                  mWS(); 
>  
> 
> Modified: 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java
> URL: 
> http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java?rev=653799&r1=653798&r2=653799&view=diff
> ==============================================================================
> --- 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java
>  (original)
> +++ 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java
>  Tue May  6 08:11:12 2008
> @@ -1,8 +1,7 @@
> -// $ANTLR 3.0 src/java/org/apache/lenya/ac/impl/antlr/Expressions.g 
> 2007-06-19 15:30:40
> +// $ANTLR 3.0.1 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g
>  2008-05-06 16:50:45
>  
>  package org.apache.lenya.ac.impl.antlr;
>  import java.util.HashMap;
> -
>  import org.apache.lenya.ac.ErrorHandler;
>  
>  
> @@ -32,7 +31,7 @@
>          
>  
>      public String[] getTokenNames() { return tokenNames; }
> -    public String getGrammarFileName() { return 
> "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"; }
> +    public String getGrammarFileName() { return 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g";
>  }
>  
>  
>      /** Map variable name to object holding value */
> @@ -62,7 +61,7 @@
>  
>  
>      // $ANTLR start prog
> -    // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:53:1: prog 
> returns [boolean value] : e= orExpression ;
> +    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:53:1:
>  prog returns [boolean value] : e= orExpression ;
>      public final boolean prog() throws RecognitionException {
>          boolean value = false;
>  
> @@ -70,8 +69,8 @@
>  
>  
>          try {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:7: 
> (e= orExpression )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:7: 
> e= orExpression
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:5:
>  (e= orExpression )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:7:
>  e= orExpression
>              {
>              pushFollow(FOLLOW_orExpression_in_prog50);
>              e=orExpression();
> @@ -94,7 +93,7 @@
>  
>  
>      // $ANTLR start orExpression
> -    // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:57:1: 
> orExpression returns [boolean value] : e= andExpression ( OR e= andExpression 
> )* ;
> +    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:57:1:
>  orExpression returns [boolean value] : e= andExpression ( OR e= 
> andExpression )* ;
>      public final boolean orExpression() throws RecognitionException {
>          boolean value = false;
>  
> @@ -102,15 +101,15 @@
>  
>  
>          try {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:9: 
> (e= andExpression ( OR e= andExpression )* )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:9: 
> e= andExpression ( OR e= andExpression )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:5:
>  (e= andExpression ( OR e= andExpression )* )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:9:
>  e= andExpression ( OR e= andExpression )*
>              {
>              pushFollow(FOLLOW_andExpression_in_orExpression77);
>              e=andExpression();
>              _fsp--;
>  
>              value = e; 
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:5: ( 
> OR e= andExpression )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:5:
>  ( OR e= andExpression )*
>              loop1:
>              do {
>                  int alt1=2;
> @@ -123,7 +122,7 @@
>  
>                  switch (alt1) {
>               case 1 :
> -                 // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:7: OR e= 
> andExpression
> +                 // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:7:
>  OR e= andExpression
>                   {
>                   match(input,OR,FOLLOW_OR_in_orExpression87); 
>                   pushFollow(FOLLOW_andExpression_in_orExpression91);
> @@ -156,7 +155,7 @@
>  
>  
>      // $ANTLR start andExpression
> -    // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:62:1: 
> andExpression returns [boolean value] : e= comparison ( AND e= comparison )* ;
> +    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:62:1:
>  andExpression returns [boolean value] : e= comparison ( AND e= comparison )* 
> ;
>      public final boolean andExpression() throws RecognitionException {
>          boolean value = false;
>  
> @@ -164,15 +163,15 @@
>  
>  
>          try {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:9: 
> (e= comparison ( AND e= comparison )* )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:9: 
> e= comparison ( AND e= comparison )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:5:
>  (e= comparison ( AND e= comparison )* )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:9:
>  e= comparison ( AND e= comparison )*
>              {
>              pushFollow(FOLLOW_comparison_in_andExpression125);
>              e=comparison();
>              _fsp--;
>  
>              value = e;
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:5: ( 
> AND e= comparison )*
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:5:
>  ( AND e= comparison )*
>              loop2:
>              do {
>                  int alt2=2;
> @@ -185,7 +184,7 @@
>  
>                  switch (alt2) {
>               case 1 :
> -                 // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:7: AND e= comparison
> +                 // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:7:
>  AND e= comparison
>                   {
>                   match(input,AND,FOLLOW_AND_in_andExpression135); 
>                   pushFollow(FOLLOW_comparison_in_andExpression139);
> @@ -218,19 +217,19 @@
>  
>  
>      // $ANTLR start comparison
> -    // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:67:1: 
> comparison returns [boolean value] : (a= atom EQUALS b= atom | LEFTPAR e= 
> orExpression RIGHTPAR );
> +    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:67:1:
>  comparison returns [boolean value] : (a= atom EQUALS b= atom | LEFTPAR e= 
> orExpression RIGHTPAR );
>      public final boolean comparison() throws RecognitionException {
>          boolean value = false;
>  
> -        String a = null;
> +        atom_return a = null;
>  
> -        String b = null;
> +        atom_return b = null;
>  
>          boolean e = false;
>  
>  
>          try {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:9: 
> (a= atom EQUALS b= atom | LEFTPAR e= orExpression RIGHTPAR )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:5:
>  (a= atom EQUALS b= atom | LEFTPAR e= orExpression RIGHTPAR )
>              int alt3=2;
>              int LA3_0 = input.LA(1);
>  
> @@ -248,7 +247,7 @@
>              }
>              switch (alt3) {
>                  case 1 :
> -                    // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:9: a= atom EQUALS b= 
> atom
> +                    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:9:
>  a= atom EQUALS b= atom
>                      {
>                      pushFollow(FOLLOW_atom_in_comparison173);
>                      a=atom();
> @@ -259,12 +258,26 @@
>                      b=atom();
>                      _fsp--;
>  
> -                    value = a.equals(b);
> +
> +                                if (a.value instanceof String && b.value 
> instanceof String) {
> +                                    value = a.value.equals(b.value);
> +                                }
> +                                else if (a.value instanceof String && 
> b.value.getClass().isArray()) {
> +                                    value = 
> java.util.Arrays.asList((String[]) b.value).contains(a.value);
> +                                }
> +                                else if (a.value.getClass().isArray() && 
> b.value instanceof String) {
> +                                    value = 
> java.util.Arrays.asList((String[]) a.value).contains(b.value);
> +                                }
> +                                else {
> +                                    throw new 
> FailedPredicateException(input, input.toString(a.start,a.stop) + " == " + 
> input.toString(b.start,b.stop),
> +                                        "Incompatible arguments for 
> comparison: " + a.value + ", " + b.value);
> +                                }
> +                            
>  
>                      }
>                      break;
>                  case 2 :
> -                    // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:69:9: LEFTPAR e= 
> orExpression RIGHTPAR
> +                    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:83:9:
>  LEFTPAR e= orExpression RIGHTPAR
>                      {
>                      match(input,LEFTPAR,FOLLOW_LEFTPAR_in_comparison191); 
>                      pushFollow(FOLLOW_orExpression_in_comparison195);
> @@ -289,18 +302,22 @@
>      }
>      // $ANTLR end comparison
>  
> +    public static class atom_return extends ParserRuleReturnScope {
> +        public Object value;
> +    };
>  
>      // $ANTLR start atom
> -    // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:72:1: atom 
> returns [String value] : ( quotedString | ID );
> -    public final String atom() throws RecognitionException {
> -        String value = null;
> +    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:86:1:
>  atom returns [Object value] : ( quotedString | ID );
> +    public final atom_return atom() throws RecognitionException {
> +        atom_return retval = new atom_return();
> +        retval.start = input.LT(1);
>  
>          Token ID2=null;
>          String quotedString1 = null;
>  
>  
>          try {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:73:9: ( 
> quotedString | ID )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:87:5:
>  ( quotedString | ID )
>              int alt4=2;
>              int LA4_0 = input.LA(1);
>  
> @@ -312,34 +329,34 @@
>              }
>              else {
>                  NoViableAltException nvae =
> -                    new NoViableAltException("72:1: atom returns [String 
> value] : ( quotedString | ID );", 4, 0, input);
> +                    new NoViableAltException("86:1: atom returns [Object 
> value] : ( quotedString | ID );", 4, 0, input);
>  
>                  throw nvae;
>              }
>              switch (alt4) {
>                  case 1 :
> -                    // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:73:9: quotedString
> +                    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:87:9:
>  quotedString
>                      {
>                      pushFollow(FOLLOW_quotedString_in_atom222);
>                      quotedString1=quotedString();
>                      _fsp--;
>  
> -                    value = quotedString1;
> +                    retval.value = quotedString1;
>  
>                      }
>                      break;
>                  case 2 :
> -                    // 
> src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:74:9: ID
> +                    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:88:9:
>  ID
>                      {
>                      ID2=(Token)input.LT(1);
>                      match(input,ID,FOLLOW_ID_in_atom234); 
>  
> -                                String s = (String) 
> memory.get(ID2.getText());
> -                                if ( s != null ) {
> -                                    value = s;
> +                                Object v = memory.get(ID2.getText());
> +                                if ( v != null ) {
> +                                    retval.value = v;
>                                  }
>                                  else {
> -                                     value = "undefined";
> +                                     retval.value = "undefined";
>                                      throw new 
> FailedPredicateException(input, ID2.getText(),
>                                          "Undefined variable \"" + 
> ID2.getText() + "\"");
>                                  }
> @@ -349,6 +366,8 @@
>                      break;
>  
>              }
> +            retval.stop = input.LT(-1);
> +
>          }
>          catch (RecognitionException re) {
>              reportError(re);
> @@ -356,21 +375,21 @@
>          }
>          finally {
>          }
> -        return value;
> +        return retval;
>      }
>      // $ANTLR end atom
>  
>  
>      // $ANTLR start quotedString
> -    // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:88:1: 
> quotedString returns [String value] : LITERAL ;
> +    // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:102:1:
>  quotedString returns [String value] : LITERAL ;
>      public final String quotedString() throws RecognitionException {
>          String value = null;
>  
>          Token LITERAL3=null;
>  
>          try {
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:89:9: ( 
> LITERAL )
> -            // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:89:9: 
> LITERAL
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:103:7:
>  ( LITERAL )
> +            // 
> /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:103:9:
>  LITERAL
>              {
>              LITERAL3=(Token)input.LT(1);
>              match(input,LITERAL,FOLLOW_LITERAL_in_quotedString267); 
> 
> Modified: 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g
> URL: 
> http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g?rev=653799&r1=653798&r2=653799&view=diff
> ==============================================================================
> --- 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g
>  (original)
> +++ 
> lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g
>  Tue May  6 08:11:12 2008
> @@ -13,24 +13,24 @@
>  }
>  @header {
>  package org.apache.lenya.ac.impl.antlr;
> -import org.apache.lenya.ac.impl.ErrorHandler;
> +import org.apache.lenya.ac.ErrorHandler;
>  }
>  
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 92
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  106
>  LITERAL: '"' ('a'..'z'|'A'..'Z'|'_'|' '|'.')* '"';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 93
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  107
>  ID: ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')*;
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 94
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  108
>  EQUALS: '==';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 95
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  109
>  QUOT: '"';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 96
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  110
>  OR: '||';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 97
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  111
>  AND: '&&';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 98
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  112
>  LEFTPAR: '(';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 99
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  113
>  RIGHTPAR: ')';
> -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 100
> +// $ANTLR src 
> "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"
>  114
>  WS: (' '|'\t')+ {skip();} ;
> 
> Added: 
> lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java
> URL: 
> http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java?rev=653799&view=auto
> ==============================================================================
> --- 
> lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java
>  (added)
> +++ 
> lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java
>  Tue May  6 08:11:12 2008
> @@ -0,0 +1,55 @@
> +/*
> + * 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.
> + *
> + */
> +
> +/* $Id: GroupManagerTest.java 473841 2006-11-12 00:46:38Z gregor $  */
> +package org.apache.lenya.ac.impl;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.avalon.framework.logger.ConsoleLogger;
> +import org.apache.lenya.ac.AttributeDefinition;
> +import org.apache.lenya.ac.AttributeDefinitionRegistry;
> +import org.apache.lenya.ac.AttributeRuleEvaluator;
> +import org.apache.lenya.ac.file.FileUser;
> +import org.apache.lenya.ac.impl.antlr.AntlrEvaluator;
> +
> +public class RuleEvaluatorTest extends TestCase {
> +    
> +    protected static final String ATTR_NAME = "attr";
> +
> +    public void testRuleEvaluation() throws Exception {
> +        
> +        AttributeDefinition def = new AttributeDefinition() {
> +            public String[] getAttributeNames() {
> +                String[] names = { ATTR_NAME };
> +                return names;
> +            }
> +        };
> +        AttributeDefinitionRegistry.register(def);
> +        
> +        AttributeRuleEvaluator evaluator = new AntlrEvaluator(new 
> ConsoleLogger());
> +        
> +        FileUser user = new FileUser();
> +        String[] values = { "foo", "bar" };
> +        user.setAttributeValues(ATTR_NAME, values);
> +        
> +        assertTrue(evaluator.isComplied(user, ATTR_NAME + " == \"bar\""));
> +        assertFalse(evaluator.isComplied(user, ATTR_NAME + " == \"baz\""));
> +    }
> +
> +}
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


-- 
Jann Forrer
Informatikdienste
Universität Zürich
Winterthurerstr. 190
CH-8057 Zürich

oooO   mail:  [EMAIL PROTECTED]
(  )   phone: +41 44 63 56772
 \ (   fax:   +41 44 63 54505
  \_)  http://www.id.unizh.ch


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to