001 package org.apache.myfaces.tobago.webapp; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes; 021 import org.apache.myfaces.tobago.renderkit.html.HtmlConstants; 022 import org.apache.myfaces.tobago.renderkit.html.HtmlStyleMap; 023 import org.apache.myfaces.tobago.renderkit.html.StyleClasses; 024 025 import javax.faces.component.UIComponent; 026 import javax.faces.context.ResponseWriter; 027 import java.io.IOException; 028 import java.io.Writer; 029 030 /** 031 * This provides an alternative ResponseWriter interfaces, which allows optimizations. 032 * E. g. some attributes needed to to be escaped. 033 * <p/> 034 * User: lofwyr 035 * Date: 08.05.2007 13:51:43 036 */ 037 public abstract class TobagoResponseWriter extends ResponseWriter { 038 039 // same as in ResponseWriter 040 041 public abstract void startElement(String name, UIComponent component) throws IOException; 042 043 /** 044 * @deprecated Use {@link #startElement(String, UIComponent) startElement(name, null)} instead. 045 */ 046 @Deprecated 047 public void startElement(String name) throws IOException { 048 startElement(name, null); 049 } 050 051 public abstract void endElement(String name) throws IOException; 052 053 public abstract void write(String string) throws IOException; 054 055 public abstract void writeComment(Object comment) throws IOException; 056 057 public abstract ResponseWriter cloneWithWriter(Writer writer); 058 059 /** 060 * @deprecated Should not directly called via this interface. There is be a special method which might be better. 061 */ 062 @Deprecated 063 public abstract void writeAttribute(String name, Object value, final String property) throws IOException; 064 065 /** 066 * @deprecated Should not directly called via this interface. There is be a special method which might be better. 067 */ 068 @Deprecated 069 public abstract void writeText(Object text, String property) throws IOException; 070 071 public abstract void flush() throws IOException; 072 073 // others (not from ResponseWriter) 074 075 /** 076 * Writes a string attribute. The renderer may set escape=false to switch of escaping of the string, 077 * if it is not necessary. 078 */ 079 public abstract void writeAttribute(String name, String string, boolean escape) throws IOException; 080 081 /** 082 * Writes a boolean attribute. The value will not escaped. 083 */ 084 public void writeAttribute(String name, boolean on) throws IOException { 085 if (on) { 086 writeAttribute(name, name, false); 087 } 088 } 089 090 /** 091 * Writes a integer attribute. The value will not escaped. 092 */ 093 public void writeAttribute(String name, int number) throws IOException { 094 writeAttribute(name, Integer.toString(number), false); 095 } 096 097 /** 098 * Writes a propery as attribute. The value will be escaped. 099 */ 100 public void writeAttributeFromComponent(String name, String property) throws IOException { 101 writeAttribute(name, null, property); 102 } 103 104 /** 105 * Write the id attribute. The value will not escaped. 106 */ 107 public void writeIdAttribute(String id) throws IOException { 108 writeAttribute(HtmlAttributes.ID, id, false); 109 } 110 111 /** 112 * Write the name attribute. The value will not escaped. 113 */ 114 public void writeNameAttribute(String name) throws IOException { 115 writeAttribute(HtmlAttributes.NAME, name, false); 116 } 117 118 /** 119 * Write the class attribute. The value will not escaped. 120 */ 121 public void writeClassAttribute(String cssClass) throws IOException { 122 writeAttribute(HtmlAttributes.CLASS, cssClass, false); 123 } 124 125 /** 126 * Write the class attribute. The value will not escaped. 127 */ 128 public void writeClassAttribute(StyleClasses styleClasses) throws IOException { 129 writeAttribute(HtmlAttributes.CLASS, styleClasses.toString(), false); 130 } 131 132 /** 133 * Write the class attribute. The value will not escaped. 134 */ 135 public abstract void writeClassAttribute() throws IOException; 136 137 /** 138 * Write the style attribute. The value will not escaped. 139 */ 140 public void writeStyleAttribute(HtmlStyleMap style) throws IOException { 141 if (style != null) { 142 writeAttribute(HtmlAttributes.STYLE, style.toString(), false); 143 } 144 } 145 146 /** 147 * Write the style attribute. The value will not escaped. 148 */ 149 public void writeStyleAttribute(String style) throws IOException { 150 writeAttribute(HtmlAttributes.STYLE, style, false); 151 } 152 153 /** 154 * Write the style attribute. The value will not escaped. 155 */ 156 public abstract void writeStyleAttribute() throws IOException; 157 158 public void writeJavascript(String script) throws IOException { 159 startElement(HtmlConstants.SCRIPT, null); 160 writeAttribute(HtmlAttributes.TYPE, "text/javascript", false); 161 write("\n<!--\n"); 162 write(script); 163 write("\n// -->\n"); 164 endElement(HtmlConstants.SCRIPT); 165 } 166 167 /** 168 * Write text content. The text will be escaped. 169 */ 170 public void writeText(String text) throws IOException { 171 writeText(text, null); 172 } 173 174 /** 175 * Writes a propery as text. The text will be escaped. 176 */ 177 public void writeTextFromComponent(String property) throws IOException { 178 writeText(null, property); 179 } 180 181 public String getContentTypeWithCharSet() { 182 String contentType = getContentType(); 183 if (contentType == null) { 184 contentType = "text/html"; 185 } 186 String characterEncoding = getCharacterEncoding(); 187 if (characterEncoding == null) { 188 characterEncoding = "UTF-8"; 189 } 190 191 StringBuilder builder = new StringBuilder(); 192 builder.append(contentType); 193 builder.append("; charset="); 194 builder.append(characterEncoding); 195 return builder.toString(); 196 197 } 198 }