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\""));
+ }
+
+}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.