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