You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by vt...@apache.org on 2004/12/01 04:50:30 UTC
svn commit: r109273 - in incubator/directory/janus/trunk/jdbc: . src/java/org/apache/janus/authentication/realm src/test/org/apache/janus/authentication/realm
Author: vtence
Date: Tue Nov 30 19:50:29 2004
New Revision: 109273
URL: http://svn.apache.org/viewcvs?view=rev&rev=109273
Log:
Selector will now detect unsupported expression
Modified:
incubator/directory/janus/trunk/jdbc/project.xml
incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java
incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java
incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java
incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java
incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java
incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java
incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java
incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java
Modified: incubator/directory/janus/trunk/jdbc/project.xml
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/project.xml?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/project.xml&r1=109272&p2=incubator/directory/janus/trunk/jdbc/project.xml&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/project.xml (original)
+++ incubator/directory/janus/trunk/jdbc/project.xml Tue Nov 30 19:50:29 2004
@@ -23,5 +23,10 @@
<artifactId>janus-impl</artifactId>
<version>${pom.currentVersion}</version>
</dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.7.2.2</version>
+ </dependency>
</dependencies>
</project>
Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/AndExpression.java Tue Nov 30 19:50:29 2004
@@ -55,6 +55,11 @@
return ( String[] ) parameters.toArray( new String[parameters.size()] );
}
+ public boolean supports( Table table )
+ {
+ return m_left.supports( table ) && m_right.supports( table );
+ }
+
protected String operand()
{
return "and";
Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/EqExpression.java Tue Nov 30 19:50:29 2004
@@ -47,6 +47,11 @@
return new String[] { table.getColumnValue( m_value ) };
}
+ public boolean supports( Table table )
+ {
+ return table.supports( m_type ) ;
+ }
+
protected String operand()
{
return "=";
Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Expression.java Tue Nov 30 19:50:29 2004
@@ -23,4 +23,6 @@
int getParameterCount();
String[] getParameterValues( Table table );
+
+ boolean supports( Table table );
}
Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java Tue Nov 30 19:50:29 2004
@@ -18,8 +18,8 @@
import java.sql.Connection;
import java.sql.PreparedStatement;
-import java.sql.SQLException;
import java.sql.ResultSet;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -37,13 +37,14 @@
public void addExpression( Expression expression )
{
+ if ( !expression.supports( m_table ) ) throw new IllegalArgumentException( "Expression does not support table metadata" );
m_expressions.add( expression );
}
public boolean select( Connection c ) throws SQLException
{
PreparedStatement statement = c.prepareStatement( buildQueryString() );
- bindParameterValues ( statement );
+ bindParameterValues( statement );
ResultSet rs = statement.executeQuery();
boolean found = rs.next();
statement.close();
@@ -51,7 +52,7 @@
return found;
}
- protected String buildQueryString()
+ private String buildQueryString()
{
StringBuffer statement = new StringBuffer();
statement.append( "select * from " ).append( m_table.getName() ).append( " where " );
@@ -66,33 +67,33 @@
return statement.toString();
}
- protected void bindParameterValues( PreparedStatement statement ) throws SQLException
+ private void bindParameterValues( PreparedStatement statement ) throws SQLException
{
- int index = 1;
+ Parameters parameters = new Parameters( statement );
for ( Iterator it = m_expressions.iterator(); it.hasNext(); )
{
Expression expression = ( Expression ) it.next();
- index += bindExpressionParameters( statement, index, expression );
+ parameters.bind( expression );
}
-
}
- private int bindExpressionParameters( PreparedStatement statement, int startIndex, Expression expression )
- throws SQLException
+ private class Parameters
{
- String[] values = expression.getParameterValues( m_table );
- for ( int i = 0; i < values.length; i++ )
+ private final PreparedStatement m_statement;
+ private int m_index = 1;
+
+ public Parameters( PreparedStatement statement )
{
- statement.setString( startIndex + i, values[i] );
+ m_statement = statement;
}
- return values.length;
- }
-
- protected String[] getParameterValues()
- {
- Collection parameters = new ArrayList();
-
- return ( String[] ) parameters.toArray( new String[parameters.size()] );
+ public void bind( Expression expression ) throws SQLException
+ {
+ String[] values = expression.getParameterValues( m_table );
+ for ( int i = 0; i < values.length; i++ )
+ {
+ m_statement.setString( m_index++, values[i] );
+ }
+ }
}
}
Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java Tue Nov 30 19:50:29 2004
@@ -16,11 +16,10 @@
*/
package org.apache.janus.authentication.realm;
-import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.Collections;
public class Table
{
@@ -50,21 +49,27 @@
m_columns.put( column.getMappedType(), column );
}
- public String getColumnName( Class credentialType )
+ public String getColumnName( Class type )
{
- return column( credentialType ).getName();
+ Column column = column( type );
+ return column != null ? column.getName() : null;
}
- public String getColumnValue( Object credential )
+ public String getColumnValue( Object object )
{
- Converter converter = ( Converter ) m_converters.get( credential.getClass() );
- return converter != null ? converter.convert( credential ) : credential.toString();
+ Converter converter = ( Converter ) m_converters.get( object.getClass() );
+ return converter != null ? converter.convert( object ) : object.toString();
}
- private Column column( Class credentialType )
+ private Column column( Class type )
{
- Column column = ( Column ) m_columns.get( credentialType );
+ Column column = ( Column ) m_columns.get( type );
return column;
+ }
+
+ public boolean supports( Class type )
+ {
+ return m_columns.containsKey( type );
}
}
Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java Tue Nov 30 19:50:29 2004
@@ -44,12 +44,6 @@
m_db.dropAll();
}
- /**
- * o several same credential -> should be caught by authentication method
- * o parametrize credential type -> column name
- * <p/>
- * undefined column for credential type?
- */
public void testExecutesSelectionQueriesAgainstDatabase() throws Exception
{
JDBCSelector selector = new JDBCSelector( Tables.users() );
Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java Tue Nov 30 19:50:29 2004
@@ -18,11 +18,8 @@
import junit.framework.TestCase;
-import java.util.Arrays;
import java.sql.Connection;
-import org.jmock.Mock;
-
public class JDBCSelectorTest extends TestCase
{
private JDBCSelector m_selector;
@@ -48,13 +45,8 @@
}
/**
- *
- * run selection on JDBC connection
- *
* conversion of credential object values to string values
- * expression not a JDBC expression?
*/
-
public void testFindsDataBasedOnCredentialExpression() throws Exception
{
m_selector.addExpression( new EqExpression( UsernameCredential.class, "joe" ) );
@@ -74,5 +66,18 @@
m_selector.addExpression( new AndExpression( new EqExpression( UsernameCredential.class, "joe" ),
new EqExpression( PasswordCredential.class, "foo" ) ) );
assertTrue( m_selector.select( m_connection ) );
+ }
+
+ public void testValidatesExpressionAgainstTableMetadata()
+ {
+ try
+ {
+ m_selector.addExpression( new EqExpression( Object.class, new Object() ) );
+ fail( "IllegalArgumentException expected" );
+ }
+ catch ( IllegalArgumentException expected )
+ {
+ assertTrue( true );
+ }
}
}
Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java?view=diff&rev=109273&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java&r1=109272&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java&r2=109273
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java (original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/MemoryDatabase.java Tue Nov 30 19:50:29 2004
@@ -99,7 +99,6 @@
for ( int i = 0; i < tables.length; i++ )
{
drop( tables[i] );
-
}
}
}