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 com.caucho.jsf.html;
030:
031: import java.io.*;
032: import java.util.*;
033:
034: import javax.faces.context.*;
035: import javax.faces.render.*;
036:
037: import com.caucho.util.*;
038: import com.caucho.vfs.*;
039:
040: public class HtmlBasicRenderKit extends RenderKit {
041: private static final L10N L = new L10N(HtmlBasicRenderKit.class);
042:
043: private ResponseStateManager _responseStateManager = new ResponseStateManagerImpl();
044:
045: private HashMap<Key, Renderer> _rendererMap = new HashMap<Key, Renderer>();
046:
047: private Key _key = new Key();
048:
049: public HtmlBasicRenderKit() {
050: addRenderer("javax.faces.Command", "javax.faces.Button",
051: HtmlCommandButtonRenderer.RENDERER);
052:
053: addRenderer("javax.faces.Command", "javax.faces.Link",
054: HtmlCommandLinkRenderer.RENDERER);
055:
056: addRenderer("javax.faces.Data", "javax.faces.Table",
057: HtmlDataTableRenderer.RENDERER);
058:
059: addRenderer("javax.faces.Form", "javax.faces.Form",
060: HtmlFormRenderer.RENDERER);
061:
062: addRenderer("javax.faces.Graphic", "javax.faces.Image",
063: HtmlGraphicImageRenderer.RENDERER);
064:
065: addRenderer("javax.faces.Input", "javax.faces.Secret",
066: HtmlInputSecretRenderer.RENDERER);
067:
068: addRenderer("javax.faces.Input", "javax.faces.Hidden",
069: HtmlInputHiddenRenderer.RENDERER);
070:
071: addRenderer("javax.faces.Input", "javax.faces.Text",
072: HtmlInputTextRenderer.RENDERER);
073:
074: addRenderer("javax.faces.Input", "javax.faces.Textarea",
075: HtmlInputTextareaRenderer.RENDERER);
076:
077: addRenderer("javax.faces.Message", "javax.faces.Message",
078: HtmlMessageRenderer.RENDERER);
079:
080: addRenderer("javax.faces.Messages", "javax.faces.Messages",
081: HtmlMessagesRenderer.RENDERER);
082:
083: addRenderer("javax.faces.Output", "javax.faces.Format",
084: HtmlOutputFormatRenderer.RENDERER);
085:
086: addRenderer("javax.faces.Output", "javax.faces.Label",
087: HtmlOutputLabelRenderer.RENDERER);
088:
089: addRenderer("javax.faces.Output", "javax.faces.Link",
090: HtmlOutputLinkRenderer.RENDERER);
091:
092: addRenderer("javax.faces.Output", "javax.faces.Text",
093: HtmlOutputTextRenderer.RENDERER);
094:
095: addRenderer("javax.faces.Output", "javax.faces.Format",
096: HtmlOutputFormatRenderer.RENDERER);
097:
098: addRenderer("javax.faces.Panel", "javax.faces.Grid",
099: HtmlPanelGridRenderer.RENDERER);
100:
101: addRenderer("javax.faces.Panel", "javax.faces.Group",
102: HtmlPanelGroupRenderer.RENDERER);
103:
104: addRenderer("javax.faces.SelectBoolean",
105: "javax.faces.Checkbox",
106: HtmlBooleanCheckboxRenderer.RENDERER);
107:
108: addRenderer("javax.faces.SelectMany", "javax.faces.Checkbox",
109: HtmlSelectManyCheckboxRenderer.RENDERER);
110:
111: addRenderer("javax.faces.SelectMany", "javax.faces.Listbox",
112: HtmlSelectManyListboxRenderer.RENDERER);
113:
114: addRenderer("javax.faces.SelectMany", "javax.faces.Menu",
115: HtmlSelectManyMenuRenderer.RENDERER);
116:
117: addRenderer("javax.faces.SelectOne", "javax.faces.Listbox",
118: HtmlSelectOneListboxRenderer.RENDERER);
119:
120: addRenderer("javax.faces.SelectOne", "javax.faces.Menu",
121: HtmlSelectOneMenuRenderer.RENDERER);
122:
123: addRenderer("javax.faces.SelectOne", "javax.faces.Radio",
124: HtmlSelectOneRadioRenderer.RENDERER);
125: }
126:
127: public void addRenderer(String family, String rendererType,
128: Renderer renderer) {
129: _rendererMap.put(new Key(family, rendererType), renderer);
130: }
131:
132: public Renderer getRenderer(String family, String rendererType) {
133: if (family == null || rendererType == null)
134: return null;
135:
136: _key.init(family, rendererType);
137:
138: Renderer renderer = _rendererMap.get(_key);
139:
140: return renderer;
141: }
142:
143: public ResponseStateManager getResponseStateManager() {
144: return _responseStateManager;
145: }
146:
147: public ResponseWriter createResponseWriter(Writer writer,
148: String contentTypeList, String characterEncoding) {
149: // jsf/2003
150: /*
151: if (contentTypeList != null
152: && contentTypeList.indexOf("text/html") < 0
153: && contentTypeList.indexOf("application/xhtml+xml") < 0
154: && contentTypeList.indexOf("application/xml") < 0
155: && contentTypeList.indexOf("text/xml") < 0) {
156: throw new IllegalArgumentException(L.l("'{0}' does not have a matching ResponseWriter.",
157: contentTypeList));
158: }
159: */
160:
161: if (characterEncoding != null) {
162:
163: if (Encoding.getWriteEncoding(characterEncoding) == null)
164: throw new IllegalArgumentException(
165: L
166: .l(
167: "'{0}' is an unknown character encoding for ResponseWriter.",
168: characterEncoding));
169: }
170:
171: return new HtmlResponseWriter(writer, contentTypeList,
172: characterEncoding);
173: }
174:
175: public ResponseStream createResponseStream(OutputStream out) {
176: return new HtmlResponseStream(out);
177: }
178:
179: public String toString() {
180: return "HtmlBasicRenderKit[]";
181: }
182:
183: static final class Key {
184: private String _family;
185: private String _type;
186:
187: Key() {
188: }
189:
190: Key(String family, String type) {
191: _family = family;
192: _type = type;
193: }
194:
195: public void init(String family, String type) {
196: _family = family;
197: _type = type;
198: }
199:
200: @Override
201: public int hashCode() {
202: if (_type != null)
203: return _family.hashCode() * 65521 + _type.hashCode();
204: else
205: return _family.hashCode();
206: }
207:
208: public boolean equals(Object o) {
209: Key key = (Key) o;
210:
211: if (_type != null)
212: return _family.equals(key._family)
213: && _type.equals(key._type);
214: else
215: return _family.equals(key._family) && key._type != null;
216: }
217:
218: public String toString() {
219: return "Key[" + _family + ", " + _type + "]";
220: }
221: }
222: }
|