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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





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


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

Reply via email to