1 /*
2 * Copyright 2001,2004 The Apache Software Foundation.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package org.apache.commons.scaffold.util;
18
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.apache.commons.scaffold.lang.Tokens;
24
25
26 /**
27 * Concrete implementation of <code>ProcessResult</code> that can be
28 * used "as-is" to manage a response from the business tier.
29 *
30 * @author Ted Husted
31 * @author Synthis Corporation
32 * @version $Revision: 155464 $ $Date: 2005-02-26 13:26:54 +0000 (Sat, 26 Feb 2005) $
33 */
34 public class ProcessResultBase implements ProcessResult {
35
36
37 // ----------------------------------------------------------- Properties
38
39 /**
40 * The attribute name for the result [null].
41 */
42 private String name = null;
43
44
45 // Inherits JavaDoc
46 public String getName() {
47 return this.name;
48 }
49
50
51 /**
52 * Set the attribute name for this result object.
53 *
54 * @param name The new name
55 */
56 public void setName(String name) {
57 this.name = name;
58 }
59
60
61 /**
62 * Field to store the scope property [request].
63 */
64 private String scope = Tokens.REQUEST;
65
66
67 /**
68 * Return the scope under which to store this result object.
69 *
70 * @return the scope
71 */
72 public String getScope() {
73 return this.scope;
74 }
75
76
77 /**
78 * Set the scope under which to store this result object.
79 *
80 * @param scope The new scope
81 */
82 public void setScope(String scope) {
83 this.scope = scope;
84 }
85
86
87
88 /**
89 * Field to store single-form state [false].
90 */
91 private boolean singleForm = false;
92
93
94 /**
95 * Return the single-form state:
96 * list of 0 or more records=FALSE, exactly one record=TRUE.
97 *
98 * @return True if this is a single record
99 */
100 public boolean isSingleForm() {
101 return this.singleForm;
102 }
103
104
105 /**
106 * Set the single-form state:
107 * list of 0 or more records=FALSE, exactly one record=TRUE.
108 *
109 * @param Set to true for single form.
110 */
111 public void setSingleForm(boolean singleForm) {
112 this.singleForm = singleForm;
113 }
114
115
116 /**
117 * Field to store exposed property [true].
118 */
119 private boolean exposed = true;
120
121
122 /**
123 * Return the exposed state.
124 *
125 * @return True if the result should be exposed
126 */
127 public boolean isExposed() {
128 return this.exposed;
129 }
130
131
132 /**
133 * Indicates whether the result should be exposed
134 * to the rest of the application through a context.
135 *
136 * @param multiple The new exposed
137 */
138 public void setExposed(boolean exposed) {
139 this.exposed = exposed;
140 }
141
142
143 /**
144 * Field to store the data property [null].
145 */
146 private Object data = null;
147
148
149 /**
150 * Return the data object.
151 *
152 * @return The data object
153 */
154 public Object getData() {
155 return this.data;
156 }
157
158
159 /**
160 * Assign a new data object.
161 *
162 * @param data The new data object
163 */
164 public void setData(Object data) {
165 this.data = data;
166 }
167
168
169 /**
170 * Return whether data object has been set.
171 *
172 * @return True if this result contains a data object
173 */
174 public boolean isData() {
175 return (getData()!=null);
176 }
177
178
179 /**
180 * Field to store the aggregate state [false].
181 */
182 protected boolean aggregate = false;
183
184
185 /**
186 * Return whether the result of this ProcessResult is a collection of
187 * contains other ProcessResult objects to be handled individually.
188 * This allows processes to be combined on the business tier and
189 * returned to controller as a single operation.
190 *
191 * @return True if this ProcessResult contains other ProcessResults
192 * objects
193 */
194 public boolean isAggregate() {
195 return aggregate;
196 }
197
198
199 /**
200 * Assign a new container state.
201 *
202 * @param aggregate Set to true for aggregate result
203 */
204 public void setAggregate(boolean aggregate) {
205 this.aggregate = aggregate;
206 }
207
208
209 /**
210 * Field to store the message property [ArrayList].
211 */
212 private List messages = (List) new ArrayList();
213
214
215 /**
216 * Return whether there are any messages queued.
217 *
218 * @return True if there are messages queued.
219 */
220 public boolean isMessages() {
221
222 List messages = getMessages();
223
224 if (null==messages) return false;
225
226 return !(messages.isEmpty());
227
228 } // end isMessages()
229
230
231 /**
232 * Add a message to the list.
233 * Instantiate messages if it does not already exist.
234 *
235 * @return True if message added.
236 */
237 public boolean addMessage(Object message) {
238 return getMessages().add(message);
239 }
240
241
242 /**
243 * Return the messages list (an ArrayList).
244 *
245 * @return The message list
246 */
247 public List getMessages() {
248 return (List) this.messages;
249 }
250
251
252 /**
253 * Set a new list of messages.
254 *
255 * @param The new list of messages
256 */
257 public void setMessages(List messages) {
258 this.messages = messages;
259 }
260
261
262 /**
263 * Field to store dispatch property [null].
264 */
265 private String dispatch = null;
266
267
268 /**
269 * The dispatch property can be used to re-route control to an non-default location,
270 * either as a system path or via a logical name (e.g ActionForward).
271 *
272 * @see <code>setDispatchPath()</code>
273 *
274 * @return The dispatch advice
275 */
276 public String getDispatch() {
277 return (this.dispatch);
278 }
279
280
281 /**
282 * Set the dispatch advice.
283 *
284 * @param dispatch The new dispatch advice.
285 */
286 public void setDispatch(String dispatch) {
287 this.dispatch = dispatch;
288 }
289
290
291 /**
292 * Return whether dispatch advice has been set.
293 *
294 * @return True if dispatch advice has been set.
295 */
296 public boolean isDispatch() {
297 return (getDispatch()!=null);
298 }
299
300
301 /**
302 * Field to store dispatchPath property [false].
303 */
304 private boolean dispatchPath = false;
305
306
307 /**
308 * Return whether dispatch advice is suppose to be a
309 * path or a token (e.g. ActionForward name)
310 *
311 * @return True if dispatch advice is a URI
312 */
313 public boolean isDispatchPath() {
314 return this.dispatchPath;
315 }
316
317
318 /**
319 * Set the dispatchPath state.
320 *
321 * @param Boolean Set to true if dispatch is a URI
322 */
323 public void setDispatchPath(boolean dispatchPath) {
324 this.dispatchPath = dispatchPath;
325 }
326
327
328 /**
329 * Our scroller object for paging through lists.
330 */
331 protected Scroller scroller = null;
332
333
334 public void setScroller(Scroller scroller){
335 this.scroller = scroller;
336 }
337
338
339 public Scroller getScroller() {
340 return this.scroller;
341 }
342
343
344 // ----------------------------------------------------------- Constructors
345
346
347 /**
348 * Default constructor.
349 */
350 public ProcessResultBase() {
351 super();
352 }
353
354
355 /**
356 * Convenience constructor to set result object.
357 *
358 * @param data The default data object
359 */
360 public ProcessResultBase(Object data) {
361
362 super();
363 setData(data);
364
365 } // end ProcessResultBase
366
367
368 /**
369 * Convenience constructor to set result object
370 * and singleForm status.
371 *
372 * @param data The default data object
373 */
374 public ProcessResultBase(Object data, boolean singleForm) {
375
376 super();
377 setData(data);
378 setSingleForm(singleForm);
379
380 } // end ProcessResultBase
381
382
383 /**
384 * Convenience constructor to set forwarding advice.
385 *
386 * @param dispatch The default dispatch advice
387 */
388 public ProcessResultBase(String dispatch) {
389
390 super();
391 setDispatch(dispatch);
392
393 } // end ProcessResultBase
394
395 } // end ProcessResultBase