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 }