001: /* SpringJdbcValidator.java
002: *
003: * DDSteps - Data Driven JUnit Test Steps
004: * Copyright (C) 2005 Jayway AB
005: * www.ddsteps.org
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License version 2.1 as published by the Free Software Foundation.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, visit
018: * http://www.opensource.org/licenses/lgpl-license.php
019: */
020:
021: package org.ddsteps.step.spring.jdbc;
022:
023: import java.sql.ResultSet;
024: import java.sql.SQLException;
025: import java.util.List;
026:
027: import javax.sql.DataSource;
028:
029: import org.apache.commons.lang.ObjectUtils;
030: import org.ddsteps.step.TestStep;
031: import org.springframework.jdbc.object.MappingSqlQuery;
032:
033: /**
034: * Base class for Spring JDBC validators.
035: *
036: * @author adam
037: * @version $Id: SpringJdbcValidator.java,v 1.1 2005/12/03 12:51:41 adamskogman Exp $
038: */
039: public abstract class SpringJdbcValidator extends MappingSqlQuery
040: implements TestStep {
041:
042: /**
043: * Use this constructor when you subclass this validator. You should have the datasource as a constructor argument,
044: * but have a static SQL string in your constructor.
045: * <p>
046: * Remember to add parameters using (@link #declareParameter(org.springframework.jdbc.core.SqlParameter)) and lastly
047: * call (@link #compile()).
048: *
049: * @param ds DataSource
050: * @param sql SQL
051: */
052: public SpringJdbcValidator(DataSource ds, String sql) {
053: super (ds, sql);
054: }
055:
056: /**
057: * @return NULL object
058: * @see org.springframework.jdbc.object.MappingSqlQuery#mapRow(java.sql.ResultSet, int)
059: */
060: final protected Object mapRow(ResultSet rs, int rowNum)
061: throws SQLException {
062: validateRow(rs, rowNum);
063: return ObjectUtils.NULL;
064: }
065:
066: /**
067: * @see org.ddsteps.step.TestStep#runStep()
068: */
069: final public void runStep() throws Exception {
070:
071: // Query and validate found rows
072: List list = execute(assembleParameters());
073:
074: // Validate row count
075: validateRowCount(list.size());
076: }
077:
078: /**
079: * Implement your asserts here. If no rows are foudn by the query, this method is never called, but you will still
080: * get a call to (@link #validateRowCount(int)).
081: *
082: * @param rs The result set.
083: * @param rowNum First row is 0
084: * @throws SQLException Feel free to throw this, as Sprign will turn it into something useful for you.
085: * @see org.springframework.jdbc.object.MappingSqlQuery#mapRow(java.sql.ResultSet, int) Has the same parameters.
086: */
087: protected abstract void validateRow(ResultSet rs, int rowNum)
088: throws SQLException;
089:
090: /**
091: * Validate the number of rows you expected.
092: *
093: * @param numRows The number of rows found. May be 0.
094: */
095: protected abstract void validateRowCount(int numRows);
096:
097: /**
098: * Assemble the query parameters from your properties.
099: *
100: * @return An object array, used with the query.
101: */
102: protected abstract Object[] assembleParameters();
103:
104: }
|