01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: *
17: * $Header:$
18: */
19: package org.apache.beehive.netui.databinding.datagrid.api.rendering;
20:
21: import javax.servlet.jsp.JspContext;
22:
23: import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
24: import org.apache.beehive.netui.databinding.datagrid.api.exceptions.CellDecoratorException;
25:
26: /**
27: * <p>
28: * Abstract basee class used to render the contents of a data grid cell. CellDecorators are used so that
29: * code used to render the contents of a data grid cell can be chained together in order to compose
30: * different rendering patterns. For example, an HTML anchor and image decorator could be composed together
31: * to create an image anchor renderer. In addition, cell decoration can be used to display UI exposing
32: * custom data grid features such as sort or filter UI on data grid header cells.
33: * </p>
34: * <p>
35: * CellDecorators are intended to be <b>stateless</b>. State required for rendering should be passed to
36: * a CellDecorator using an instance of a {@link CellModel} class.
37: * </p>
38: */
39: public abstract class CellDecorator {
40:
41: /**
42: * This decorator can be optionally used by implementations to
43: * render additional UI for the cell.
44: */
45: private CellDecorator _cellDecorator = null;
46:
47: /**
48: * Default constructor.
49: */
50: public CellDecorator() {
51: }
52:
53: /**
54: * Constructor that takes a nested CellDecorator.
55: *
56: * @param cellDecorator the nested decorator which can optionally be used by implementations
57: * to render additional UI for the cell.
58: */
59: public CellDecorator(CellDecorator cellDecorator) {
60: this ();
61: _cellDecorator = cellDecorator;
62: }
63:
64: /**
65: * Get the nested decorator.
66: *
67: * @return the cell decorator if one has been provided. <code>null</code> otherwise.
68: */
69: public CellDecorator getNestedDecorator() {
70: return _cellDecorator;
71: }
72:
73: /**
74: * Set the nested cell decorator.
75: *
76: * @param cellDecorator the cell decorator.
77: */
78: public void setNestedDecorator(CellDecorator cellDecorator) {
79: _cellDecorator = cellDecorator;
80: }
81:
82: /**
83: * This method is implemented by subclasses to provide decoration behavior. The use of a nested CellDecorator
84: * is left to specific implementations; it is possible that some implementations will ignore such
85: * nested instances.
86: *
87: * @param jspContext the {@link JspContext} for the current page
88: * @param appender the {@link AbstractRenderAppender} to which markup should be rendered
89: * @param cellModel the {@link CellModel} JavaBean that contains
90: * @throws CellDecoratorException an exception thrown when an error occurs running the decorator.
91: */
92: public abstract void decorate(JspContext jspContext,
93: AbstractRenderAppender appender, CellModel cellModel)
94: throws CellDecoratorException;
95: }
|