// Path: src/main/java/org/apache/commons/dbutils/ResultSetHandler.java
// public interface ResultSetHandler<T> {
// 
//     /**
//      * Turn the {@code ResultSet} into an Object.
//      *
//      * @param rs The {@code ResultSet} to handle.  It has not been touched
//      * before being passed to this method.
//      *
//      * @return An Object initialized with {@code ResultSet} data. It is
//      * legal for implementations to return {@code null} if the
//      * {@code ResultSet} contained 0 rows.
//      *
//      * @throws SQLException if a database access error occurs
//      */
//     T handle(ResultSet rs) throws SQLException;
// 
// }
// 
// Path: src/main/java/org/apache/commons/dbutils/RowProcessor.java
// public interface RowProcessor {
// 
//     /**
//      * Create an {@code Object[]} from the column values in one
//      * {@code ResultSet} row.  The {@code ResultSet} should be
//      * positioned on a valid row before passing it to this method.
//      * Implementations of this method must not alter the row position of
//      * the {@code ResultSet}.
//      *
//      * @param rs ResultSet that supplies the array data
//      * @throws SQLException if a database access error occurs
//      * @return the newly created array
//      */
//     Object[] toArray(ResultSet rs) throws SQLException;
// 
//     /**
//      * Create a JavaBean from the column values in one {@code ResultSet}
//      * row.  The {@code ResultSet} should be positioned on a valid row before
//      * passing it to this method.  Implementations of this method must not
//      * alter the row position of the {@code ResultSet}.
//      * @param <T> The type of bean to create
//      * @param rs ResultSet that supplies the bean data
//      * @param type Class from which to create the bean instance
//      * @throws SQLException if a database access error occurs
//      * @return the newly created bean
//      */
//     <T> T toBean(ResultSet rs, Class<? extends T> type) throws SQLException;
// 
//     /**
//      * Create a {@code List} of JavaBeans from the column values in all
//      * {@code ResultSet} rows.  {@code ResultSet.next()} should
//      * <strong>not</strong> be called before passing it to this method.
//      * @param <T> The type of bean to create
//      * @param rs ResultSet that supplies the bean data
//      * @param type Class from which to create the bean instance
//      * @throws SQLException if a database access error occurs
//      * @return A {@code List} of beans with the given type in the order
//      * they were returned by the {@code ResultSet}.
//      */
//     <T> List<T> toBeanList(ResultSet rs, Class<? extends T> type) throws SQLException;
// 
//     /**
//      * Create a {@code Map} from the column values in one
//      * {@code ResultSet} row.  The {@code ResultSet} should be
//      * positioned on a valid row before
//      * passing it to this method.  Implementations of this method must not
//      * alter the row position of the {@code ResultSet}.
//      *
//      * @param rs ResultSet that supplies the map data
//      * @throws SQLException if a database access error occurs
//      * @return the newly created Map
//      */
//     Map<String, Object> toMap(ResultSet rs) throws SQLException;
// 
// }


import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.RowProcessor;
/*
 * 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.
 */
package org.apache.commons.dbutils.handlers;



/**
 * {@code ResultSetHandler} implementation that converts a
 * {@code ResultSet} into a {@code List} of beans. This class is
 * thread safe.
 *
 * @param <T> the target bean type
 * @see org.apache.commons.dbutils.ResultSetHandler
 */
public class BeanListHandler<T> implements ResultSetHandler<List<T>> {

    /**
     * The Class of beans produced by this handler.
     */
    private final Class<? extends T> type;

    /**
     * The RowProcessor implementation to use when converting rows
     * into beans.
     */
    private final RowProcessor convert;

    /**
     * Creates a new instance of BeanListHandler.
     *
     * @param type The Class that objects returned from {@code handle()}
     * are created from.
     */
    public BeanListHandler(final Class<? extends T> type) {
        this(type, ArrayHandler.ROW_PROCESSOR);
    }

    /**
     * Creates a new instance of BeanListHandler.
     *
     * @param type The Class that objects returned from {@code handle()}
     * are created from.
     * @param convert The {@code RowProcessor} implementation
     * to use when converting rows into beans.
     */
// Path: src/main/java/org/apache/commons/dbutils/ResultSetHandler.java
// public interface ResultSetHandler<T> {
// 
//     /**
//      * Turn the {@code ResultSet} into an Object.
//      *
//      * @param rs The {@code ResultSet} to handle.  It has not been touched
//      * before being passed to this method.
//      *
//      * @return An Object initialized with {@code ResultSet} data. It is
//      * legal for implementations to return {@code null} if the
//      * {@code ResultSet} contained 0 rows.
//      *
//      * @throws SQLException if a database access error occurs
//      */
//     T handle(ResultSet rs) throws SQLException;
// 
// }
// 
// Path: src/main/java/org/apache/commons/dbutils/RowProcessor.java
// public interface RowProcessor {
// 
//     /**
//      * Create an {@code Object[]} from the column values in one
//      * {@code ResultSet} row.  The {@code ResultSet} should be
//      * positioned on a valid row before passing it to this method.
//      * Implementations of this method must not alter the row position of
//      * the {@code ResultSet}.
//      *
//      * @param rs ResultSet that supplies the array data
//      * @throws SQLException if a database access error occurs
//      * @return the newly created array
//      */
//     Object[] toArray(ResultSet rs) throws SQLException;
// 
//     /**
//      * Create a JavaBean from the column values in one {@code ResultSet}
//      * row.  The {@code ResultSet} should be positioned on a valid row before
//      * passing it to this method.  Implementations of this method must not
//      * alter the row position of the {@code ResultSet}.
//      * @param <T> The type of bean to create
//      * @param rs ResultSet that supplies the bean data
//      * @param type Class from which to create the bean instance
//      * @throws SQLException if a database access error occurs
//      * @return the newly created bean
//      */
//     <T> T toBean(ResultSet rs, Class<? extends T> type) throws SQLException;
// 
//     /**
//      * Create a {@code List} of JavaBeans from the column values in all
//      * {@code ResultSet} rows.  {@code ResultSet.next()} should
//      * <strong>not</strong> be called before passing it to this method.
//      * @param <T> The type of bean to create
//      * @param rs ResultSet that supplies the bean data
//      * @param type Class from which to create the bean instance
//      * @throws SQLException if a database access error occurs
//      * @return A {@code List} of beans with the given type in the order
//      * they were returned by the {@code ResultSet}.
//      */
//     <T> List<T> toBeanList(ResultSet rs, Class<? extends T> type) throws SQLException;
// 
//     /**
//      * Create a {@code Map} from the column values in one
//      * {@code ResultSet} row.  The {@code ResultSet} should be
//      * positioned on a valid row before
//      * passing it to this method.  Implementations of this method must not
//      * alter the row position of the {@code ResultSet}.
//      *
//      * @param rs ResultSet that supplies the map data
//      * @throws SQLException if a database access error occurs
//      * @return the newly created Map
//      */
//     Map<String, Object> toMap(ResultSet rs) throws SQLException;
// 
// }


// Path: src/main/java/org/apache/commons/dbutils/handlers/BeanListHandler.java
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.RowProcessor;

/*
 * 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.
 */
package org.apache.commons.dbutils.handlers;



/**
 * {@code ResultSetHandler} implementation that converts a
 * {@code ResultSet} into a {@code List} of beans. This class is
 * thread safe.
 *
 * @param <T> the target bean type
 * @see org.apache.commons.dbutils.ResultSetHandler
 */
public class BeanListHandler<T> implements ResultSetHandler<List<T>> {

    /**
     * The Class of beans produced by this handler.
     */
    private final Class<? extends T> type;

    /**
     * The RowProcessor implementation to use when converting rows
     * into beans.
     */
    private final RowProcessor convert;

    /**
     * Creates a new instance of BeanListHandler.
     *
     * @param type The Class that objects returned from {@code handle()}
     * are created from.
     */
    public BeanListHandler(final Class<? extends T> type) {
        this(type, ArrayHandler.ROW_PROCESSOR);
    }

    /**
     * Creates a new instance of BeanListHandler.
     *
     * @param type The Class that objects returned from {@code handle()}
     * are created from.
     * @param convert The {@code RowProcessor} implementation
     * to use when converting rows into beans.
     */
    public BeanListHandler(final Class<? extends T> type, final RowProcessor convert) {