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