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 under
5 * the terms of the GNU Lesser General Public License as published by the Free
6 * Software Foundation; either version 2.1 of the License, or (at your option)
7 * any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
12 * 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, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. >
17 * http://www.gnu.org/copyleft/lesser.html >
18 * http://www.opensource.org/licenses/lgpl-license.php
19 */
20 package net.mlw.vlh.adapter.jdbc.objectWrapper;
21
22 import java.sql.ResultSet;
23 import java.sql.SQLException;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import net.mlw.vlh.ValueListInfo;
28 import net.mlw.vlh.adapter.jdbc.AbstractJdbcAdapter;
29 import net.mlw.vlh.adapter.util.ObjectWrapper;
30
31 import org.apache.commons.logging.Log;
32 import org.apache.commons.logging.LogFactory;
33
34 /***
35 * DefaultIdWrappedAdapter wrap original record by calling interface
36 * <code>ObjectWrapper</code> method
37 * <code>getWrappedRecord(Object objectToBeWrapped)</code> and with this
38 * result populate the final valueList.. objectToBeWrapped could be whole
39 * resultSet or specific column from resultSet.
40 *
41 * @see net.mlw.vlh.adapter.util.ObjectWrapper
42 * @see net.mlw.vlh.adapter.util.ObjectValidator
43 * @see net.mlw.vlh.adapter.jdbc.objectWrapper.ResultSetDecorator
44 * @see net.mlw.vlh.adapter.jdbc.AbstractJdbcAdapter
45 *
46 * @author Andrej Zachar
47 * @version $Revision: 1.9 $ $Date: 2005/10/17 11:40:25 $
48 */
49 public class DefaultWrapperAdapter extends AbstractJdbcAdapter
50 {
51 /***
52 * Logger for this class
53 */
54 private static final Log LOGGER = LogFactory.getLog(DefaultWrapperAdapter.class);
55
56 private String _columnName = null;
57
58 private int _columnNumber = 1;
59
60 private ObjectWrapper _wrapper;
61
62 private boolean wrapResultSet = false;
63
64 /***
65 * @param result
66 * @return
67 * @throws SQLException
68 */
69 private Object getOrignalRecord(ResultSet result) throws SQLException
70 {
71 if (wrapResultSet)
72 {
73 return result;
74 }
75 else
76 {
77 if (_columnName != null && _columnName.length() > 0)
78 {
79 return result.getObject(_columnName);
80 }
81 else
82 {
83 return result.getObject(_columnNumber);
84 }
85 }
86 }
87
88 public List processResultSet(String name, ResultSet result, int numberPerPage, ValueListInfo info) throws SQLException
89 {
90 if (LOGGER.isDebugEnabled())
91 {
92 LOGGER.debug("Start wrapping using column '"
93 + (_columnName != null && _columnName.length() > 0 ? _columnName : (_columnNumber + "")) + "'.");
94 }
95
96 List list = new ArrayList();
97 if (_wrapper == null)
98 {
99 LOGGER.error("Required _wrapper is null!");
100 }
101 else
102 {
103 _wrapper.setValueListInfo(info);
104 for (int i = 0; result.next() && i < numberPerPage; i++)
105 {
106 list.add(_wrapper.getWrappedRecord(getOrignalRecord(result)));
107 }
108 }
109
110 LOGGER.debug("End wrapping.");
111 return list;
112 }
113
114 /***
115 * @return Returns the columnName.
116 */
117 public String getColumnName()
118 {
119 return _columnName;
120 }
121
122 /***
123 * Specify which column will be objectToBeWrapped. Default value is null. If
124 * is <b>null </b>, is used column <b>Number </b> instead.
125 * <h4>Example</h4>
126 * <ul>
127 * result.getObject(columnName);
128 * </ul>
129 *
130 * @param columnName The columnName to set.
131 */
132 public void setColumnName(String columnName)
133 {
134 _columnName = columnName;
135 }
136
137 /***
138 * @return Returns the columnNumber.
139 */
140 public int getColumnNumber()
141 {
142 return _columnNumber;
143 }
144
145 /***
146 * Specify which column will be objectToBeWrapped. Default is 1;
147 * <h4>Example</h4>
148 * <ul>
149 * result.getObject(columnNumber);
150 * </ul>
151 *
152 * @param columnNumber The columnNumber to set.
153 */
154 public void setColumnNumber(int columnNumber)
155 {
156 _columnNumber = columnNumber;
157 }
158
159 /***
160 * @return Returns the objectWrapper.
161 */
162 public ObjectWrapper getWrapper()
163 {
164 return _wrapper;
165 }
166
167 /***
168 * This param is required.
169 *
170 * @param objectWrapper The objectWrapper to set.
171 * @see net.mlw.vlh.adapter.util.ObjectWrapper
172 */
173 public void setWrapper(ObjectWrapper objectWrapper)
174 {
175 this._wrapper = objectWrapper;
176 }
177
178 /***
179 * @return Returns the wrapResultSet.
180 */
181 public boolean isWrapResultSet()
182 {
183 return wrapResultSet;
184 }
185
186 /***
187 * Determine object to be wrapped - resultSet or column from result set. *
188 * If true, wrapper will call getWrappedRecord with resultSet parameter as
189 * objectToBeWrapped. If false, wrapper will call getWrappedRecord with
190 * object from resultSet. Use false if you need to pass only ids. If you
191 * need to access more than one object, use true. Default is false;
192 *
193 * @param wrapResultSet
194 * @see ObjectWrapper#getWrappedRecord(Object)
195 */
196 public void setWrapResultSet(boolean wrapResultSet)
197 {
198 this.wrapResultSet = wrapResultSet;
199 }
200 }