// 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 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;



/**
 * <p>
 * {@code ResultSetHandler} implementation that returns a Map of Beans.
 * {@code ResultSet} rows are converted into Beans which are then stored in
 * a Map under the given key.
 * </p>
 * <p>
 * If you had a Person table with a primary key column called ID, you could
 * retrieve rows from the table like this:
 *
 * <pre>
 * ResultSetHandler&lt;Map&lt;Long, Person&gt;&gt; h = new BeanMapHandler&lt;Long, Person&gt;(Person.class, &quot;id&quot;);
 * Map&lt;Long, Person&gt; found = queryRunner.query(&quot;select id, name, age from person&quot;, h);
 * Person jane = found.get(1L); // jane's id is 1
 * String janesName = jane.getName();
 * Integer janesAge = jane.getAge();
 * </pre>
 *
 * Note that the "id" passed to BeanMapHandler can be in any case. The data type
 * returned for id is dependent upon how your JDBC driver converts SQL column
 * types from the Person table into Java types. The "name" and "age" columns are
 * converted according to their property descriptors by DbUtils.
 * &lt;/p&gt;
 * <p>
 * This class is thread safe.
 * &lt;/p&gt;
 *
 * @param <K>
 *            the type of keys maintained by the returned map
 * @param <V>
 *            the type of the bean
 * @see org.apache.commons.dbutils.ResultSetHandler
 * @since DbUtils 1.5
 */
public class BeanMapHandler<K, V> extends AbstractKeyedHandler<K, V> {

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

    /**
     * The RowProcessor implementation to use when converting rows into Objects.
     */
// 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/BeanMapHandler.java
import java.sql.ResultSet;
import java.sql.SQLException;
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;



/**
 * <p>
 * {@code ResultSetHandler} implementation that returns a Map of Beans.
 * {@code ResultSet} rows are converted into Beans which are then stored in
 * a Map under the given key.
 * </p>
 * <p>
 * If you had a Person table with a primary key column called ID, you could
 * retrieve rows from the table like this:
 *
 * <pre>
 * ResultSetHandler&lt;Map&lt;Long, Person&gt;&gt; h = new BeanMapHandler&lt;Long, Person&gt;(Person.class, &quot;id&quot;);
 * Map&lt;Long, Person&gt; found = queryRunner.query(&quot;select id, name, age from person&quot;, h);
 * Person jane = found.get(1L); // jane's id is 1
 * String janesName = jane.getName();
 * Integer janesAge = jane.getAge();
 * </pre>
 *
 * Note that the "id" passed to BeanMapHandler can be in any case. The data type
 * returned for id is dependent upon how your JDBC driver converts SQL column
 * types from the Person table into Java types. The "name" and "age" columns are
 * converted according to their property descriptors by DbUtils.
 * &lt;/p&gt;
 * <p>
 * This class is thread safe.
 * &lt;/p&gt;
 *
 * @param <K>
 *            the type of keys maintained by the returned map
 * @param <V>
 *            the type of the bean
 * @see org.apache.commons.dbutils.ResultSetHandler
 * @since DbUtils 1.5
 */
public class BeanMapHandler<K, V> extends AbstractKeyedHandler<K, V> {

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

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