Hi Andereas What about the /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src....... references everywhere? Seems to be your local home directory ;-)
Jann > New Revision: 653799 > > URL: http://svn.apache.org/viewvc?rev=653799&view=rev > Log: > Adding capability to handle multi-value attributes with test case. > > Added: > > lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java > Modified: > > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java > > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java > > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g > > Modified: > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > URL: > http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g?rev=653799&r1=653798&r2=653799&view=diff > ============================================================================== > --- > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > (original) > +++ > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > Tue May 6 08:11:12 2008 > @@ -3,12 +3,12 @@ > @header { > package org.apache.lenya.ac.impl.antlr; > import java.util.HashMap; > -import org.apache.lenya.ac.impl.ErrorHandler; > +import org.apache.lenya.ac.ErrorHandler; > } > > @lexer::header { > package org.apache.lenya.ac.impl.antlr; > -import org.apache.lenya.ac.impl.ErrorHandler; > +import org.apache.lenya.ac.ErrorHandler; > } > > @members { > @@ -65,17 +65,31 @@ > ; > > comparison returns [boolean value] > - : a=atom EQUALS b=atom {$value = $a.value.equals($b.value);} > + : a=atom EQUALS b=atom { > + if ($a.value instanceof String && $b.value instanceof String) { > + $value = $a.value.equals($b.value); > + } > + else if ($a.value instanceof String && > $b.value.getClass().isArray()) { > + $value = java.util.Arrays.asList((String[]) > $b.value).contains($a.value); > + } > + else if ($a.value.getClass().isArray() && $b.value instanceof > String) { > + $value = java.util.Arrays.asList((String[]) > $a.value).contains($b.value); > + } > + else { > + throw new FailedPredicateException(input, $a.text + " == " + > $b.text, > + "Incompatible arguments for comparison: " + $a.value + > ", " + $b.value); > + } > + } > | LEFTPAR e=orExpression RIGHTPAR {$value = $e.value;} > ; > > -atom returns [String value] > +atom returns [Object value] > : quotedString {$value = $quotedString.value;} > | ID > { > - String s = (String) memory.get($ID.text); > - if ( s != null ) { > - $value = s; > + Object v = memory.get($ID.text); > + if ( v != null ) { > + $value = v; > } > else { > $value = "undefined"; > > Modified: > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java > URL: > http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java?rev=653799&r1=653798&r2=653799&view=diff > ============================================================================== > --- > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java > (original) > +++ > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsLexer.java > Tue May 6 08:11:12 2008 > @@ -1,4 +1,4 @@ > -// $ANTLR 3.0 src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > 2007-06-19 15:30:41 > +// $ANTLR 3.0.1 > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > 2008-05-06 16:50:47 > > package org.apache.lenya.ac.impl.antlr; > import org.apache.lenya.ac.ErrorHandler; > @@ -37,17 +37,17 @@ > public ExpressionsLexer(CharStream input) { > super(input); > } > - public String getGrammarFileName() { return > "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"; } > + public String getGrammarFileName() { return > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"; > } > > // $ANTLR start LITERAL > public final void mLITERAL() throws RecognitionException { > try { > int _type = LITERAL; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:92:10: > ( '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:92:10: > '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:106:8: > ( '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:106:10: > '\"' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* '\"' > { > match('\"'); > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:92:14: > ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:106:14: > ( 'a' .. 'z' | 'A' .. 'Z' | '_' | ' ' | '.' )* > loop1: > do { > int alt1=2; > @@ -60,7 +60,7 @@ > > switch (alt1) { > case 1 : > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g: > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g: > { > if ( input.LA(1)==' '||input.LA(1)=='.'||(input.LA(1)>='A' > && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && > input.LA(1)<='z') ) { > input.consume(); > @@ -96,8 +96,8 @@ > public final void mID() throws RecognitionException { > try { > int _type = ID; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:93:5: ( > ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:93:5: ( > 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:107:3: > ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:107:5: > ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* > { > if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' > && input.LA(1)<='z') ) { > input.consume(); > @@ -109,7 +109,7 @@ > recover(mse); throw mse; > } > > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:93:25: > ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:107:25: > ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* > loop2: > do { > int alt2=2; > @@ -122,7 +122,7 @@ > > switch (alt2) { > case 1 : > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g: > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g: > { > if ( (input.LA(1)>='0' && > input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' > && input.LA(1)<='z') ) { > input.consume(); > @@ -157,8 +157,8 @@ > public final void mEQUALS() throws RecognitionException { > try { > int _type = EQUALS; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:94:9: ( > '==' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:94:9: > '==' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:108:7: > ( '==' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:108:9: > '==' > { > match("=="); > > @@ -176,8 +176,8 @@ > public final void mQUOT() throws RecognitionException { > try { > int _type = QUOT; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:95:7: ( > '\"' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:95:7: > '\"' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:109:5: > ( '\"' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:109:7: > '\"' > { > match('\"'); > > @@ -194,8 +194,8 @@ > public final void mOR() throws RecognitionException { > try { > int _type = OR; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:96:5: ( > '||' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:96:5: > '||' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:110:3: > ( '||' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:110:5: > '||' > { > match("||"); > > @@ -213,8 +213,8 @@ > public final void mAND() throws RecognitionException { > try { > int _type = AND; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:97:6: ( > '&&' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:97:6: > '&&' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:111:4: > ( '&&' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:111:6: > '&&' > { > match("&&"); > > @@ -232,8 +232,8 @@ > public final void mLEFTPAR() throws RecognitionException { > try { > int _type = LEFTPAR; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:98:10: > ( '(' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:98:10: > '(' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:112:8: > ( '(' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:112:10: > '(' > { > match('('); > > @@ -250,8 +250,8 @@ > public final void mRIGHTPAR() throws RecognitionException { > try { > int _type = RIGHTPAR; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:99:11: > ( ')' ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:99:11: > ')' > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:113:9: > ( ')' ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:113:11: > ')' > { > match(')'); > > @@ -268,10 +268,10 @@ > public final void mWS() throws RecognitionException { > try { > int _type = WS; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:100:5: > ( ( ' ' | '\\t' )+ ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:100:5: > ( ' ' | '\\t' )+ > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:114:3: > ( ( ' ' | '\\t' )+ ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:114:5: > ( ' ' | '\\t' )+ > { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:100:5: > ( ' ' | '\\t' )+ > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:114:5: > ( ' ' | '\\t' )+ > int cnt3=0; > loop3: > do { > @@ -285,7 +285,7 @@ > > switch (alt3) { > case 1 : > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g: > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g: > { > if ( input.LA(1)=='\t'||input.LA(1)==' ' ) { > input.consume(); > @@ -322,7 +322,7 @@ > // $ANTLR end WS > > public void mTokens() throws RecognitionException { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:10: ( > LITERAL | ID | EQUALS | QUOT | OR | AND | LEFTPAR | RIGHTPAR | WS ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:8: > ( LITERAL | ID | EQUALS | QUOT | OR | AND | LEFTPAR | RIGHTPAR | WS ) > int alt4=9; > switch ( input.LA(1) ) { > case '\"': > @@ -432,63 +432,63 @@ > > switch (alt4) { > case 1 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:10: LITERAL > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:10: > LITERAL > { > mLITERAL(); > > } > break; > case 2 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:18: ID > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:18: > ID > { > mID(); > > } > break; > case 3 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:21: EQUALS > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:21: > EQUALS > { > mEQUALS(); > > } > break; > case 4 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:28: QUOT > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:28: > QUOT > { > mQUOT(); > > } > break; > case 5 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:33: OR > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:33: > OR > { > mOR(); > > } > break; > case 6 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:36: AND > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:36: > AND > { > mAND(); > > } > break; > case 7 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:40: LEFTPAR > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:40: > LEFTPAR > { > mLEFTPAR(); > > } > break; > case 8 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:48: RIGHTPAR > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:48: > RIGHTPAR > { > mRIGHTPAR(); > > } > break; > case 9 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:57: WS > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:1:57: > WS > { > mWS(); > > > Modified: > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java > URL: > http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java?rev=653799&r1=653798&r2=653799&view=diff > ============================================================================== > --- > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java > (original) > +++ > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/ExpressionsParser.java > Tue May 6 08:11:12 2008 > @@ -1,8 +1,7 @@ > -// $ANTLR 3.0 src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > 2007-06-19 15:30:40 > +// $ANTLR 3.0.1 > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g > 2008-05-06 16:50:45 > > package org.apache.lenya.ac.impl.antlr; > import java.util.HashMap; > - > import org.apache.lenya.ac.ErrorHandler; > > > @@ -32,7 +31,7 @@ > > > public String[] getTokenNames() { return tokenNames; } > - public String getGrammarFileName() { return > "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"; } > + public String getGrammarFileName() { return > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g"; > } > > > /** Map variable name to object holding value */ > @@ -62,7 +61,7 @@ > > > // $ANTLR start prog > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:53:1: prog > returns [boolean value] : e= orExpression ; > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:53:1: > prog returns [boolean value] : e= orExpression ; > public final boolean prog() throws RecognitionException { > boolean value = false; > > @@ -70,8 +69,8 @@ > > > try { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:7: > (e= orExpression ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:7: > e= orExpression > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:5: > (e= orExpression ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:54:7: > e= orExpression > { > pushFollow(FOLLOW_orExpression_in_prog50); > e=orExpression(); > @@ -94,7 +93,7 @@ > > > // $ANTLR start orExpression > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:57:1: > orExpression returns [boolean value] : e= andExpression ( OR e= andExpression > )* ; > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:57:1: > orExpression returns [boolean value] : e= andExpression ( OR e= > andExpression )* ; > public final boolean orExpression() throws RecognitionException { > boolean value = false; > > @@ -102,15 +101,15 @@ > > > try { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:9: > (e= andExpression ( OR e= andExpression )* ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:9: > e= andExpression ( OR e= andExpression )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:5: > (e= andExpression ( OR e= andExpression )* ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:58:9: > e= andExpression ( OR e= andExpression )* > { > pushFollow(FOLLOW_andExpression_in_orExpression77); > e=andExpression(); > _fsp--; > > value = e; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:5: ( > OR e= andExpression )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:5: > ( OR e= andExpression )* > loop1: > do { > int alt1=2; > @@ -123,7 +122,7 @@ > > switch (alt1) { > case 1 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:7: OR e= > andExpression > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:59:7: > OR e= andExpression > { > match(input,OR,FOLLOW_OR_in_orExpression87); > pushFollow(FOLLOW_andExpression_in_orExpression91); > @@ -156,7 +155,7 @@ > > > // $ANTLR start andExpression > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:62:1: > andExpression returns [boolean value] : e= comparison ( AND e= comparison )* ; > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:62:1: > andExpression returns [boolean value] : e= comparison ( AND e= comparison )* > ; > public final boolean andExpression() throws RecognitionException { > boolean value = false; > > @@ -164,15 +163,15 @@ > > > try { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:9: > (e= comparison ( AND e= comparison )* ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:9: > e= comparison ( AND e= comparison )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:5: > (e= comparison ( AND e= comparison )* ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:63:9: > e= comparison ( AND e= comparison )* > { > pushFollow(FOLLOW_comparison_in_andExpression125); > e=comparison(); > _fsp--; > > value = e; > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:5: ( > AND e= comparison )* > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:5: > ( AND e= comparison )* > loop2: > do { > int alt2=2; > @@ -185,7 +184,7 @@ > > switch (alt2) { > case 1 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:7: AND e= comparison > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:64:7: > AND e= comparison > { > match(input,AND,FOLLOW_AND_in_andExpression135); > pushFollow(FOLLOW_comparison_in_andExpression139); > @@ -218,19 +217,19 @@ > > > // $ANTLR start comparison > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:67:1: > comparison returns [boolean value] : (a= atom EQUALS b= atom | LEFTPAR e= > orExpression RIGHTPAR ); > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:67:1: > comparison returns [boolean value] : (a= atom EQUALS b= atom | LEFTPAR e= > orExpression RIGHTPAR ); > public final boolean comparison() throws RecognitionException { > boolean value = false; > > - String a = null; > + atom_return a = null; > > - String b = null; > + atom_return b = null; > > boolean e = false; > > > try { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:9: > (a= atom EQUALS b= atom | LEFTPAR e= orExpression RIGHTPAR ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:5: > (a= atom EQUALS b= atom | LEFTPAR e= orExpression RIGHTPAR ) > int alt3=2; > int LA3_0 = input.LA(1); > > @@ -248,7 +247,7 @@ > } > switch (alt3) { > case 1 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:9: a= atom EQUALS b= > atom > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:68:9: > a= atom EQUALS b= atom > { > pushFollow(FOLLOW_atom_in_comparison173); > a=atom(); > @@ -259,12 +258,26 @@ > b=atom(); > _fsp--; > > - value = a.equals(b); > + > + if (a.value instanceof String && b.value > instanceof String) { > + value = a.value.equals(b.value); > + } > + else if (a.value instanceof String && > b.value.getClass().isArray()) { > + value = > java.util.Arrays.asList((String[]) b.value).contains(a.value); > + } > + else if (a.value.getClass().isArray() && > b.value instanceof String) { > + value = > java.util.Arrays.asList((String[]) a.value).contains(b.value); > + } > + else { > + throw new > FailedPredicateException(input, input.toString(a.start,a.stop) + " == " + > input.toString(b.start,b.stop), > + "Incompatible arguments for > comparison: " + a.value + ", " + b.value); > + } > + > > } > break; > case 2 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:69:9: LEFTPAR e= > orExpression RIGHTPAR > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:83:9: > LEFTPAR e= orExpression RIGHTPAR > { > match(input,LEFTPAR,FOLLOW_LEFTPAR_in_comparison191); > pushFollow(FOLLOW_orExpression_in_comparison195); > @@ -289,18 +302,22 @@ > } > // $ANTLR end comparison > > + public static class atom_return extends ParserRuleReturnScope { > + public Object value; > + }; > > // $ANTLR start atom > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:72:1: atom > returns [String value] : ( quotedString | ID ); > - public final String atom() throws RecognitionException { > - String value = null; > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:86:1: > atom returns [Object value] : ( quotedString | ID ); > + public final atom_return atom() throws RecognitionException { > + atom_return retval = new atom_return(); > + retval.start = input.LT(1); > > Token ID2=null; > String quotedString1 = null; > > > try { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:73:9: ( > quotedString | ID ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:87:5: > ( quotedString | ID ) > int alt4=2; > int LA4_0 = input.LA(1); > > @@ -312,34 +329,34 @@ > } > else { > NoViableAltException nvae = > - new NoViableAltException("72:1: atom returns [String > value] : ( quotedString | ID );", 4, 0, input); > + new NoViableAltException("86:1: atom returns [Object > value] : ( quotedString | ID );", 4, 0, input); > > throw nvae; > } > switch (alt4) { > case 1 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:73:9: quotedString > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:87:9: > quotedString > { > pushFollow(FOLLOW_quotedString_in_atom222); > quotedString1=quotedString(); > _fsp--; > > - value = quotedString1; > + retval.value = quotedString1; > > } > break; > case 2 : > - // > src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:74:9: ID > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:88:9: > ID > { > ID2=(Token)input.LT(1); > match(input,ID,FOLLOW_ID_in_atom234); > > - String s = (String) > memory.get(ID2.getText()); > - if ( s != null ) { > - value = s; > + Object v = memory.get(ID2.getText()); > + if ( v != null ) { > + retval.value = v; > } > else { > - value = "undefined"; > + retval.value = "undefined"; > throw new > FailedPredicateException(input, ID2.getText(), > "Undefined variable \"" + > ID2.getText() + "\""); > } > @@ -349,6 +366,8 @@ > break; > > } > + retval.stop = input.LT(-1); > + > } > catch (RecognitionException re) { > reportError(re); > @@ -356,21 +375,21 @@ > } > finally { > } > - return value; > + return retval; > } > // $ANTLR end atom > > > // $ANTLR start quotedString > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:88:1: > quotedString returns [String value] : LITERAL ; > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:102:1: > quotedString returns [String value] : LITERAL ; > public final String quotedString() throws RecognitionException { > String value = null; > > Token LITERAL3=null; > > try { > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:89:9: ( > LITERAL ) > - // src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:89:9: > LITERAL > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:103:7: > ( LITERAL ) > + // > /Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g:103:9: > LITERAL > { > LITERAL3=(Token)input.LT(1); > match(input,LITERAL,FOLLOW_LITERAL_in_quotedString267); > > Modified: > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g > URL: > http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g?rev=653799&r1=653798&r2=653799&view=diff > ============================================================================== > --- > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g > (original) > +++ > lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/expressions__.g > Tue May 6 08:11:12 2008 > @@ -13,24 +13,24 @@ > } > @header { > package org.apache.lenya.ac.impl.antlr; > -import org.apache.lenya.ac.impl.ErrorHandler; > +import org.apache.lenya.ac.ErrorHandler; > } > > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 92 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 106 > LITERAL: '"' ('a'..'z'|'A'..'Z'|'_'|' '|'.')* '"'; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 93 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 107 > ID: ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')*; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 94 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 108 > EQUALS: '=='; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 95 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 109 > QUOT: '"'; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 96 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 110 > OR: '||'; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 97 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 111 > AND: '&&'; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 98 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 112 > LEFTPAR: '('; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 99 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 113 > RIGHTPAR: ')'; > -// $ANTLR src "src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" 100 > +// $ANTLR src > "/Users/nobby/apache/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/antlr/Expressions.g" > 114 > WS: (' '|'\t')+ {skip();} ; > > Added: > lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java > URL: > http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java?rev=653799&view=auto > ============================================================================== > --- > lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java > (added) > +++ > lenya/branches/branch_1_2_x_shibboleth/src/test/org/apache/lenya/ac/impl/RuleEvaluatorTest.java > Tue May 6 08:11:12 2008 > @@ -0,0 +1,55 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache License, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > + * See the License for the specific language governing permissions and > + * limitations under the License. > + * > + */ > + > +/* $Id: GroupManagerTest.java 473841 2006-11-12 00:46:38Z gregor $ */ > +package org.apache.lenya.ac.impl; > + > +import junit.framework.TestCase; > + > +import org.apache.avalon.framework.logger.ConsoleLogger; > +import org.apache.lenya.ac.AttributeDefinition; > +import org.apache.lenya.ac.AttributeDefinitionRegistry; > +import org.apache.lenya.ac.AttributeRuleEvaluator; > +import org.apache.lenya.ac.file.FileUser; > +import org.apache.lenya.ac.impl.antlr.AntlrEvaluator; > + > +public class RuleEvaluatorTest extends TestCase { > + > + protected static final String ATTR_NAME = "attr"; > + > + public void testRuleEvaluation() throws Exception { > + > + AttributeDefinition def = new AttributeDefinition() { > + public String[] getAttributeNames() { > + String[] names = { ATTR_NAME }; > + return names; > + } > + }; > + AttributeDefinitionRegistry.register(def); > + > + AttributeRuleEvaluator evaluator = new AntlrEvaluator(new > ConsoleLogger()); > + > + FileUser user = new FileUser(); > + String[] values = { "foo", "bar" }; > + user.setAttributeValues(ATTR_NAME, values); > + > + assertTrue(evaluator.isComplied(user, ATTR_NAME + " == \"bar\"")); > + assertFalse(evaluator.isComplied(user, ATTR_NAME + " == \"baz\"")); > + } > + > +} > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > -- Jann Forrer Informatikdienste Universität Zürich Winterthurerstr. 190 CH-8057 Zürich oooO mail: [EMAIL PROTECTED] ( ) phone: +41 44 63 56772 \ ( fax: +41 44 63 54505 \_) http://www.id.unizh.ch --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
