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;
030:
031: import java.util.*;
032:
033: import javax.el.*;
034:
035: import javax.faces.*;
036: import javax.faces.context.*;
037: import javax.faces.convert.*;
038:
039: public class UIOutput extends UIComponentBase implements ValueHolder {
040: public static final String COMPONENT_FAMILY = "javax.faces.Output";
041: public static final String COMPONENT_TYPE = "javax.faces.Output";
042:
043: private Converter _converter;
044: private ValueExpression _converterExpr;
045:
046: private Object _value;
047: private ValueExpression _valueExpr;
048:
049: public UIOutput() {
050: setRendererType("javax.faces.Text");
051: }
052:
053: /**
054: * Returns the component family, used to select the renderer.
055: */
056: public String getFamily() {
057: return COMPONENT_FAMILY;
058: }
059:
060: //
061: // Properties
062: //
063:
064: public Object getLocalValue() {
065: return _value;
066: }
067:
068: public Object getValue() {
069: if (_value != null)
070: return _value;
071: else if (_valueExpr != null)
072: return Util.eval(_valueExpr, getFacesContext());
073: else
074: return null;
075: }
076:
077: public void setValue(Object value) {
078: _value = value;
079: }
080:
081: //
082: // expression map override
083: //
084:
085: /**
086: * Returns the value expression with the given name.
087: */
088: @Override
089: public ValueExpression getValueExpression(String name) {
090: if ("value".equals(name))
091: return _valueExpr;
092: else if ("converter".equals(name))
093: return _converterExpr;
094: else
095: return super .getValueExpression(name);
096: }
097:
098: /**
099: * Sets the value expression with the given name.
100: */
101: @Override
102: public void setValueExpression(String name, ValueExpression expr) {
103: if ("value".equals(name)) {
104: if (expr != null && expr.isLiteralText()) {
105: _value = expr.getValue(null);
106: return;
107: } else
108: _valueExpr = expr;
109: } else if ("converter".equals(name)) {
110: _converterExpr = expr;
111: }
112:
113: super .setValueExpression(name, expr);
114: }
115:
116: //
117: // Rendering
118: //
119:
120: public Converter getConverter() {
121: if (_converter != null)
122: return _converter;
123: else if (_converterExpr != null) {
124: Object object = Util
125: .eval(_converterExpr, getFacesContext());
126:
127: if (object == null)
128: return null;
129: else if (object instanceof Converter)
130: return (Converter) object;
131: else if (object instanceof String) {
132: String name = (String) object;
133:
134: return getFacesContext().getApplication()
135: .createConverter(name);
136: } else
137: return (Converter) object;
138: } else
139: return null;
140: }
141:
142: public void setConverter(Converter converter) {
143: _converter = converter;
144: }
145:
146: //
147: // state
148: //
149:
150: public Object saveState(FacesContext context) {
151: Object parent = super .saveState(context);
152:
153: return new Object[] { parent, _value,
154: saveAttachedState(context, _converter), };
155: }
156:
157: public void restoreState(FacesContext context, Object value) {
158: Object[] state = (Object[]) value;
159:
160: super .restoreState(context, state[0]);
161:
162: _value = state[1];
163: _converter = (Converter) restoreAttachedState(context, state[2]);
164: }
165: }
|