1 /*** 2 * Copyright (c) 2003 held jointly by the individual authors. 3 * 4 * This library is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU Lesser General Public License as published 6 * by the Free Software Foundation; either version 2.1 of the License, or 7 * (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; with out even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this library; if not, write to the Free Software Foundation, 16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 17 * 18 * > http://www.gnu.org/copyleft/lesser.html 19 * > http://www.opensource.org/licenses/lgpl-license.php 20 */ 21 package net.mlw.vlh.adapter.jdbc.util; 22 23 import java.lang.reflect.InvocationTargetException; 24 import java.sql.ResultSet; 25 import java.sql.ResultSetMetaData; 26 import java.sql.SQLException; 27 import java.util.HashMap; 28 import java.util.Map; 29 30 import org.apache.commons.logging.Log; 31 import org.apache.commons.logging.LogFactory; 32 33 /*** 34 * @author Matthew L. Wilson 35 * @version $Revision: 1.3 $ $Date: 2005/08/19 16:06:29 $ 36 */ 37 public class ResultSetMapGenerator 38 { 39 40 /*** 41 * Logger for this class 42 */ 43 private static final Log LOGGER = LogFactory.getLog(ResultSetMapGenerator.class); 44 45 private ResultSet result; 46 47 private String[] names; 48 49 public ResultSetMapGenerator(ResultSet result, boolean useName, boolean lowerCase) throws SQLException 50 { 51 this.result = result; 52 ResultSetMetaData metadata = result.getMetaData(); 53 54 int columnCount = metadata.getColumnCount(); 55 names = new String[columnCount]; 56 for (int i = 0; i < columnCount; i++) 57 { 58 names[i] = (useName) ? metadata.getColumnName(i + 1) : metadata.getColumnLabel(i + 1); 59 if (names[i] == null || names[i].length() == 0) 60 { 61 names[i] = (useName) ? metadata.getColumnLabel(i + 1) : metadata.getColumnName(i + 1); 62 } 63 64 if (lowerCase) 65 { 66 names[i] = names[i].toLowerCase(); 67 } 68 } 69 LOGGER.debug(names); 70 } 71 72 /*** 73 * @see net.sf.cglib.beans.BeanGenerator#create() 74 */ 75 public Map generateMap() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException 76 { 77 Map map = new HashMap(); 78 for (int i = 0; i < names.length; i++) 79 { 80 Object value = result.getObject(i + 1); 81 map.put(names[i], value); 82 if (LOGGER.isDebugEnabled()) 83 { 84 LOGGER.debug(names[i] + " - " + value); 85 } 86 } 87 88 return map; 89 } 90 91 /*** 92 * @return Returns the result. 93 */ 94 public ResultSet getResultSet() 95 { 96 return result; 97 } 98 99 /*** 100 * <p>Loads and returns the <code>Class</code> of the given name. 101 * By default, a load from the thread context class loader is attempted. 102 * If there is no such class loader, the class loader used to load this 103 * class will be utilized.</p> 104 * 105 * @exception SQLException if an exception was thrown trying to load 106 * the specified class 107 */ 108 protected Class loadClass(String className) throws SQLException 109 { 110 try 111 { 112 ClassLoader cl = Thread.currentThread().getContextClassLoader(); 113 if (cl == null) 114 { 115 cl = this.getClass().getClassLoader(); 116 } 117 return (cl.loadClass(className)); 118 } 119 catch (Exception e) 120 { 121 throw new SQLException("Cannot load column class '" + className + "': " + e); 122 } 123 } 124 125 public static class Bean 126 { 127 128 } 129 }