001 /*
002 * Copyright 2002,2004 The Apache Software Foundation.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.apache.commons.scaffold.sql;
018
019
020 import java.util.Collection;
021
022 import org.apache.commons.scaffold.lang.Tokens;
023
024 import org.apache.commons.scaffold.lang.ParameterException;
025 import org.apache.commons.scaffold.lang.ResourceException;
026
027 import org.apache.commons.scaffold.util.ProcessResult;
028 import org.apache.commons.scaffold.util.ProcessResultBase;
029 import org.apache.commons.scaffold.util.ResultList;
030 import org.apache.commons.scaffold.util.ResultListBase;
031 import org.apache.commons.scaffold.util.Scroller;
032 import org.apache.commons.scaffold.util.ScrollerBean;
033
034
035 /**
036 * Base class for scrolling searches.
037 *
038 * @author Ted Husted
039 * @version $Revision: 155464 $ $Date: 2005-02-26 13:26:54 +0000 (Sat, 26 Feb 2005) $
040 */
041 public class ScrollerBeanBase extends StorageBeanBase implements ScrollerBean {
042
043
044 /**
045 * The entry (or page) from which to scroll [1].
046 */
047 public Integer scrollFrom = new Integer(1);
048
049
050 // See interface for Javadoc
051 public Integer getScrollFrom() {
052 return scrollFrom;
053 }
054
055
056 // See interface for Javadoc
057 public void setScrollFrom(Integer scrollFrom) {
058 this.scrollFrom = scrollFrom;
059 }
060
061
062 // See interface for Javadoc
063 public Integer scrollOffset() {
064 int offset = getScrollFrom().intValue();
065 return new Integer(--offset);
066 }
067
068
069 // See interface for Javadoc
070 public int scrollRows() {
071 return Scroller.SCROLL_ROWS;
072
073 }
074
075
076 // See interface for Javadoc
077 public String countKey() {
078 return null;
079 }
080
081
082 // See interface for Javadoc
083 public boolean hasParameter() {
084 return false;
085 }
086
087
088 // See interface for Javadoc
089 public Object searchValue() {
090 return null;
091 }
092
093
094 // See interface for Javadoc
095 public boolean isLike() {
096 return false;
097 }
098
099
100 // See interface for Javadoc
101 public int entryCount() throws ResourceException {
102
103 if (hasParameter()) {
104
105 if (isLike())
106 return count(countKey(),like(searchValue().toString()));
107 else
108 return count(countKey(),searchValue());
109
110 }
111
112 return count(countKey());
113
114 }
115
116
117 // See interface for Javadoc
118 public String commandKey() {
119 return null;
120 }
121
122
123
124 // See interface for Javadoc
125 public String searchProperty() {
126 return null;
127 }
128
129
130 // See interface for Javadoc
131 public String searchLabel() {
132 return searchProperty();
133 }
134
135
136 // See interface for Javadoc
137 public boolean failsOnEmpty () {
138 return false;
139 }
140
141
142 // See interface for Javadoc
143 public String tokenEmptyMessage() {
144 return Tokens.DATA_ACCESS_EMPTY;
145 }
146
147
148 // See interface for Javadoc
149 public String tokenEmptyDispatch() {
150 return Tokens.FAILURE;
151 }
152
153
154 // See interface for Javadoc
155 public Object[] scrollerParams(String parameter) {
156
157 Object[] parameters = null;
158
159 if (hasParameter()) {
160
161 parameters = new Object[3];
162 parameters[0] = parameter;
163 parameters[1] = scrollOffset();
164 parameters[2] = new Integer(scrollRows());
165 }
166
167 else {
168
169 parameters = new Object[2];
170 parameters[0] = scrollOffset();
171 parameters[1] = new Integer(scrollRows());
172 }
173
174 return parameters;
175 }
176
177
178 // See interface for Javadoc
179 public Collection result(Object target, Object parameter)
180 throws ResourceException {
181
182 String param = null;
183 if (null!=parameter) {
184 if (isLike()) param = like(parameter.toString());
185 else param = parameter.toString();
186 }
187
188 return findCollection(
189 target,
190 commandKey(),
191 scrollerParams(param)
192 );
193 }
194
195
196 // See interface for Javadoc
197 public Scroller newScroller(int entries) throws ResourceException {
198
199 Scroller scroller = new Scroller();
200 scroller.calculate(
201 entries,
202 getScrollFrom().intValue(),
203 entryCount(),
204 scrollRows()
205 );
206
207 if (hasParameter()) {
208 java.util.Map map = new java.util.HashMap();
209 map.put(searchProperty(),searchValue());
210 scroller.setParameters(map);
211 }
212
213 return scroller;
214 }
215
216
217 // See interface for Javadoc
218 public void listLegend(ResultList list) {
219
220 if (hasParameter())
221 list.setLegend(searchLabel(),searchValue().toString());
222 else
223 list.setLegend(searchLabel());
224
225 }
226
227
228 // See interface for Javadoc
229 public ProcessResult scrollerSearch() throws Exception {
230
231 Object key = null;
232 if (hasParameter()) {
233 key = searchValue();
234 if (null==key) {
235 throw new ParameterException();
236 }
237 }
238
239 ResultList list = new ResultListBase (result(this,key));
240 Scroller scroller = newScroller(list.size());
241 list.setScroller(scroller);
242 ProcessResult result = new ProcessResultBase(list);
243
244 listLegend(list);
245
246 if (failsOnEmpty() && list.isEmpty()) {
247 result.addMessage(tokenEmptyMessage());
248 result.setDispatch(tokenEmptyDispatch());
249 }
250 return result;
251
252 } // end scrollerSearch
253
254 } // end ScrollerBeanBase
255