001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License version 2
011: * as published by the Free Software Foundation.
012: *
013: * Resin Open Source is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
016: * of NON-INFRINGEMENT. See the GNU General Public License for more
017: * details.
018: *
019: * You should have received a copy of the GNU General Public License
020: * along with Resin Open Source; if not, write to the
021: *
022: * Free Software Foundation, Inc.
023: * 59 Temple Place, Suite 330
024: * Boston, MA 02111-1307 USA
025: *
026: * @author Scott Ferguson
027: */
028:
029: package javax.faces.component.html;
030:
031: import java.util.*;
032:
033: import javax.el.*;
034:
035: import javax.faces.component.*;
036: import javax.faces.context.*;
037:
038: public class HtmlColumn extends UIColumn {
039: public static final String COMPONENT_TYPE = "javax.faces.HtmlColumn";
040:
041: private static final HashMap<String, PropEnum> _propMap = new HashMap<String, PropEnum>();
042:
043: private String _footerClass;
044: private ValueExpression _footerClassExpr;
045:
046: private String _headerClass;
047: private ValueExpression _headerClassExpr;
048:
049: public HtmlColumn() {
050: setRendererType(null);
051: }
052:
053: //
054: // properties
055: //
056:
057: public String getHeaderClass() {
058: if (_headerClass != null)
059: return _headerClass;
060: else if (_headerClassExpr != null)
061: return Util.evalString(_headerClassExpr);
062: else
063: return null;
064: }
065:
066: public void setHeaderClass(String headerClass) {
067: _headerClass = headerClass;
068: }
069:
070: public String getFooterClass() {
071: if (_footerClass != null)
072: return _footerClass;
073: else if (_footerClassExpr != null)
074: return Util.evalString(_footerClassExpr);
075: else
076: return null;
077: }
078:
079: public void setFooterClass(String footerClass) {
080: _footerClass = footerClass;
081: }
082:
083: //
084: // value expression override
085: //
086:
087: /**
088: * Returns the value expression with the given name.
089: */
090: @Override
091: public ValueExpression getValueExpression(String name) {
092: PropEnum prop = _propMap.get(name);
093:
094: if (prop != null) {
095: switch (prop) {
096: case HEADER_CLASS:
097: return _headerClassExpr;
098: case FOOTER_CLASS:
099: return _footerClassExpr;
100: }
101: }
102:
103: return super .getValueExpression(name);
104: }
105:
106: /**
107: * Sets the value expression with the given name.
108: */
109: @Override
110: public void setValueExpression(String name, ValueExpression expr) {
111: PropEnum prop = _propMap.get(name);
112:
113: if (prop != null) {
114: switch (prop) {
115: case HEADER_CLASS:
116: if (expr != null && expr.isLiteralText()) {
117: _headerClass = Util.evalString(expr);
118: return;
119: } else
120: _headerClassExpr = expr;
121: break;
122:
123: case FOOTER_CLASS:
124: if (expr != null && expr.isLiteralText()) {
125: _footerClass = Util.evalString(expr);
126: return;
127: } else
128: _footerClassExpr = expr;
129: break;
130: }
131: }
132:
133: super .setValueExpression(name, expr);
134: }
135:
136: //
137: // state
138: //
139:
140: @Override
141: public Object saveState(FacesContext context) {
142: Object parent = super .saveState(context);
143:
144: return new Object[] { parent, _headerClass, _footerClass, };
145: }
146:
147: @Override
148: public void restoreState(FacesContext context, Object value) {
149: Object[] state = (Object[]) value;
150:
151: int i = 0;
152:
153: if (state != null)
154: super .restoreState(context, state[i++]);
155:
156: _headerClass = (String) state[i++];
157: _footerClass = (String) state[i++];
158: }
159:
160: //
161: // private impl
162: //
163:
164: private enum PropEnum {
165: HEADER_CLASS, FOOTER_CLASS,
166: };
167:
168: static {
169: _propMap.put("headerClass", PropEnum.HEADER_CLASS);
170: _propMap.put("footerClass", PropEnum.FOOTER_CLASS);
171: }
172: }
|