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: [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