You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2008/05/06 17:11:12 UTC

svn commit: r653799 - in /lenya/branches/branch_1_2_x_shibboleth/src: java/org/apache/lenya/ac/impl/antlr/ test/org/apache/lenya/ac/impl/

Author: andreas
Date: Tue May  6 08:11:12 2008
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: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org


Re: ANTLR and Java 1.4

Posted by Andreas Hartmann <an...@apache.org>.
Jann Forrer schrieb:

[...]

>> If requiring Java 5 is not an option, we have to include the
>> pre-generated lexer and parser Java files. The absolute paths you
>> mentioned shouldn't do any harm, since they only occur in comments and
>> in a method that is never called. Of course it would nevertheless be
>> nice to get rid of them.
>>
> Java 1.5 is ok for me. However on one of our server we still use 1.4.2.
> Could we simply copy the compiled lexer and parser classes to this server?

That wouldn't work (you would also get the 
UnsupportedClassVersionError), but you could try to copy the generated 
lexer and parser Java files in 
build/lenya/src/org/apache/lenya/ac/impl/antlr to the server and let the 
build process compile them.

-- Andreas


-- 
Andreas Hartmann, CTO
BeCompany GmbH
http://www.becompany.ch
Tel.: +41 (0) 43 818 57 01


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


Re: ANTLR and Java 1.4

Posted by Jann Forrer <ja...@id.uzh.ch>.
Andreas Hartmann wrote:
> Andreas Hartmann schrieb:
>> Hi Jann,
>>
>> Jann Forrer schrieb:
>>> Hi Andreas
>>>> Jann Forrer schrieb:
>>>>> 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 ;-)
>>>> thanks for spotting! Now the Java files are generated during the build
>>>> process, so the paths should correspond to your local directory
>>>> structure.
>>>>
>>> Thanks for fixing it. It seems that the used antlr version needs java
>>> 1.5. It does not build with java 1.4.2.
>>
>> do you get this error message?
>>
>> java.lang.UnsupportedClassVersionError:
>> org/apache/tools/ant/antlr/ANTLR3 (Unsupported major.minor version 49.0)
> 

Yes

> Unfortunately the ANTLR3 task works only with Java 5, even if compiled
> for an earlier version. It uses the regex character class
> \p{javaWhitespace} which is only available since Java 5.
> 
> If requiring Java 5 is not an option, we have to include the
> pre-generated lexer and parser Java files. The absolute paths you
> mentioned shouldn't do any harm, since they only occur in comments and
> in a method that is never called. Of course it would nevertheless be
> nice to get rid of them.
> 
Java 1.5 is ok for me. However on one of our server we still use 1.4.2.
Could we simply copy the compiled lexer and parser classes to this server?

Jann




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


Re: ANTLR and Java 1.4

Posted by Andreas Hartmann <an...@apache.org>.
Andreas Hartmann schrieb:
> Hi Jann,
> 
> Jann Forrer schrieb:
>> Hi Andreas
>>> Jann Forrer schrieb:
>>>> 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 ;-)
>>> thanks for spotting! Now the Java files are generated during the build
>>> process, so the paths should correspond to your local directory 
>>> structure.
>>>
>> Thanks for fixing it. It seems that the used antlr version needs java
>> 1.5. It does not build with java 1.4.2.
> 
> do you get this error message?
> 
> java.lang.UnsupportedClassVersionError: 
> org/apache/tools/ant/antlr/ANTLR3 (Unsupported major.minor version 49.0)

Unfortunately the ANTLR3 task works only with Java 5, even if compiled 
for an earlier version. It uses the regex character class 
\p{javaWhitespace} which is only available since Java 5.

If requiring Java 5 is not an option, we have to include the 
pre-generated lexer and parser Java files. The absolute paths you 
mentioned shouldn't do any harm, since they only occur in comments and 
in a method that is never called. Of course it would nevertheless be 
nice to get rid of them.

-- Andreas


> 
> -- Andreas
> 
>>
>> Jann
>>
>>
>>> -- Andreas
>>>
>>>
>>>> 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: commits-unsubscribe@lenya.apache.org
>>>>> For additional commands, e-mail: commits-help@lenya.apache.org
>>>>>
>>>>
>>>
>>
>>
> 
> 


-- 
Andreas Hartmann, CTO
BeCompany GmbH
http://www.becompany.ch
Tel.: +41 (0) 43 818 57 01


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


ANTLR and Java 1.4 (was: Re: svn commit: r653799 - in /lenya/branches/branch_1_2_x_shibboleth/src: java/org/apache/lenya/ac/impl/antlr/ test/org/apache/lenya/ac/impl/)

Posted by Andreas Hartmann <an...@apache.org>.
Hi Jann,

Jann Forrer schrieb:
> Hi Andreas
>> Jann Forrer schrieb:
>>> 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 ;-)
>> thanks for spotting! Now the Java files are generated during the build
>> process, so the paths should correspond to your local directory structure.
>>
> Thanks for fixing it. It seems that the used antlr version needs java
> 1.5. It does not build with java 1.4.2.

do you get this error message?

java.lang.UnsupportedClassVersionError: 
org/apache/tools/ant/antlr/ANTLR3 (Unsupported major.minor version 49.0)

-- Andreas

> 
> Jann
> 
> 
>> -- Andreas
>>
>>
>>> 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: commits-unsubscribe@lenya.apache.org
>>>> For additional commands, e-mail: commits-help@lenya.apache.org
>>>>
>>>
>>
> 
> 


-- 
Andreas Hartmann, CTO
BeCompany GmbH
http://www.becompany.ch
Tel.: +41 (0) 43 818 57 01


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


Re: svn commit: r653799 - in /lenya/branches/branch_1_2_x_shibboleth/src: java/org/apache/lenya/ac/impl/antlr/ test/org/apache/lenya/ac/impl/

Posted by Jann Forrer <ja...@id.uzh.ch>.
Hi Andreas
> 
> Jann Forrer schrieb:
>> 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 ;-)
> 
> thanks for spotting! Now the Java files are generated during the build
> process, so the paths should correspond to your local directory structure.
> 
Thanks for fixing it. It seems that the used antlr version needs java
1.5. It does not build with java 1.4.2.

Jann


> -- Andreas
> 
> 
>>
>> 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: commits-unsubscribe@lenya.apache.org
>>> For additional commands, e-mail: commits-help@lenya.apache.org
>>>
>>
>>
> 
> 


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

oooO   mail:  jann.forrer@id.uzh.ch
(  )   phone: +41 44 63 56772
 \ (   fax:   +41 44 63 54505
  \_)  http://www.id.unizh.ch


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


Re: svn commit: r653799 - in /lenya/branches/branch_1_2_x_shibboleth/src: java/org/apache/lenya/ac/impl/antlr/ test/org/apache/lenya/ac/impl/

Posted by Andreas Hartmann <an...@apache.org>.
Hi Jann,

Jann Forrer schrieb:
> 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 ;-)

thanks for spotting! Now the Java files are generated during the build 
process, so the paths should correspond to your local directory structure.

-- Andreas


> 
> 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: commits-unsubscribe@lenya.apache.org
>> For additional commands, e-mail: commits-help@lenya.apache.org
>>
> 
> 


-- 
Andreas Hartmann, CTO
BeCompany GmbH
http://www.becompany.ch
Tel.: +41 (0) 43 818 57 01


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


Re: svn commit: r653799 - in /lenya/branches/branch_1_2_x_shibboleth/src: java/org/apache/lenya/ac/impl/antlr/ test/org/apache/lenya/ac/impl/

Posted by Jann Forrer <ja...@id.uzh.ch>.
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: commits-unsubscribe@lenya.apache.org
> For additional commands, e-mail: commits-help@lenya.apache.org
> 


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

oooO   mail:  jann.forrer@id.uzh.ch
(  )   phone: +41 44 63 56772
 \ (   fax:   +41 44 63 54505
  \_)  http://www.id.unizh.ch


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org