1 /* 2 * $Source$ 3 * $Revision$ 4 * 5 * Copyright (C) 2006 Tim Pizey 6 * 7 * Part of Melati (http://melati.org), a framework for the rapid 8 * development of clean, maintainable web applications. 9 * 10 * Melati is free software; Permission is granted to copy, distribute 11 * and/or modify this software under the terms either: 12 * 13 * a) the GNU General Public License as published by the Free Software 14 * Foundation; either version 2 of the License, or (at your option) 15 * any later version, 16 * 17 * or 18 * 19 * b) any version of the Melati Software License, as published 20 * at http://melati.org 21 * 22 * You should have received a copy of the GNU General Public License and 23 * the Melati Software License along with this program; 24 * if not, write to the Free Software Foundation, Inc., 25 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the 26 * GNU General Public License and visit http://melati.org to obtain the 27 * Melati Software License. 28 * 29 * Feel free to contact the Developers of Melati (http://melati.org), 30 * if you would like to work out a different arrangement than the options 31 * outlined here. It is our intention to allow Melati to be used by as 32 * wide an audience as possible. 33 * 34 * This program is distributed in the hope that it will be useful, 35 * but WITHOUT ANY WARRANTY; without even the implied warranty of 36 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 37 * GNU General Public License for more details. 38 * 39 * Contact details for copyright holder: 40 * 41 * Tim Pizey <Timp At paneris.org> 42 * http://paneris.org/~timp 43 */ 44 package org.melati.template; 45 46 import org.melati.poem.Field; 47 import org.melati.poem.Persistent; 48 49 /** 50 * MarkupLanguage provides a variety of methods for rendering objects in a 51 * template. 52 * 53 * Each object to be rendered has 3 methods: 54 * 1 - String rendered(Object o) - this will render the object to a String 55 * 2 - void render(Object o) - renders the object to melati.getWriter() 56 * 3 - void render(Object o, MelatiWriter w) - render the object to w. 57 * 58 * When this class was written it was thought that for maximum 59 * efficiency one should render the object direct to the output stream using 60 * method (2) above. 61 * However now all but (1) is deprecated. 62 */ 63 public interface MarkupLanguage { 64 65 /** 66 * The AttributeMarkupLanguage associated with this MarkupLanguage. 67 * See org/melati/admin/EditHeader.wm 68 * See org/melati/admin/PrimarySelect.wm 69 * @return the AttributeMarkupLanguage to use for rendering attributes. 70 */ 71 AttributeMarkupLanguage getAttr(); 72 73 /** 74 * Get the name of this Markup Language. 75 * 76 * @return name - the name associated with this markup language. 77 * This is used to determine where to load 78 * templates from ie 'html' templates are 79 * found in the 'html' directory. 80 */ 81 String getName(); 82 83 /** 84 * Render an Object in a MarkupLanguage specific way, returning a String. 85 * 86 * @return - the object rendered as a String in a MarkupLanguage specific way. 87 * @param o - the Object to be rendered 88 */ 89 String rendered(Object o); 90 91 /** 92 * @param s markup fragment to render 93 * @return fragment rendered with markup unchanged 94 */ 95 String renderedMarkup(String s); 96 97 98 /** 99 * Render a String in a MarkupLanguage specific way, limiting it's length. 100 * 101 * @param s - the string to be rendered 102 * @param limit - the lenght to trim the string to 103 * @return - the String having been rendered in a MarkupLanguage specific way. 104 */ 105 String rendered(String s, int limit); 106 107 /** 108 * Render a Field Object in a MarkupLanguage specific way, 109 * returning a String. 110 * Defaults to a limit of 10,000,000. 111 * 112 * @see org.melati.poem.DatePoemType#stringOfCooked 113 * (java.lang.Object,org.melati.poem.PoemLocale, int) 114 * 115 * @param field - the Field to be rendered 116 * @param style - a style to format this Field. 117 * @return - the Field rendered as a String in a MarkupLanguage specific way. 118 * @throws TemplateEngineException - if there is a problem with the 119 * ServletTemplateEngine 120 */ 121 String rendered(Field<?> field, int style) 122 throws TemplateEngineException; 123 124 /** 125 * Render a Field Object in a MarkupLanguage specific way, 126 * returning a String. 127 * 128 * see org.melati.poem.DatePoemType#_stringOfCooked 129 * (java.lang.Object,org.melati.poem.PoemLocale, int) 130 * 131 * @param field - the Field to be rendered 132 * @param style - a DateFormat style to format this Field. 133 * @param limit - the length to trim the rendered string to 134 * @return - the Field rendered as a String in a MarkupLanguage specific way. 135 * @throws TemplateEngineException - if there is a problem with the 136 * ServletTemplateEngine 137 */ 138 String rendered(Field<?> field, int style, int limit) 139 throws TemplateEngineException; 140 141 /** 142 * Render a Date Field Object in a MarkupLanguage specific way, 143 * returning a START Date format String. 144 * 145 * @see org.melati.poem.DatePoemType#stringOfCooked 146 * (java.lang.Object,org.melati.poem.PoemLocale, int) 147 * 148 * @param field - the Field to be rendered 149 * @return - the Field rendered as a String in a MarkupLanguage specific way. 150 */ 151 String renderedStart(Field<?> field); 152 153 154 155 // 156 // ========= 157 // Widgets 158 // ========= 159 // 160 /** 161 * Get an input widget for this Field. 162 * 163 * @param field The Field 164 * @return The default input widget for the Field type 165 * @throws NotFoundException if template not found 166 */ 167 String input(Field<?> field) throws TemplateEngineException, NotFoundException; 168 169 /** 170 * Get an input widget for this Field defined by name. 171 * 172 * @param field The Field 173 * @param templetName the templet to use instead of the default 174 * @return The specified input widget for the Field type 175 * @throws NotFoundException if template not found 176 */ 177 String inputAs(Field<?> field, String templetName) 178 throws TemplateEngineException, NotFoundException; 179 180 /** 181 * Get an input widget for this Field specifying the null value. 182 * 183 * @param field The Field 184 * @param nullValue the value to use for null for example in a dropdown. 185 * @return The default input widget for the Field type with a specified null value 186 * @throws NotFoundException if template not found 187 */ 188 String searchInput(Field<?> field, String nullValue) 189 throws TemplateEngineException, NotFoundException; 190 191 192 /** 193 * Escape a String. 194 * 195 * @param s the String to escape 196 * @return the escaped String 197 */ 198 String escaped(String s); 199 200 /** 201 * Get the DisplayString of a <code>Persistent</code> and 202 * escape that using the current locale and a MEDIUM DateFormat. 203 * 204 * See org/melati/admin/SelectionWindowSelection.wm 205 * See org/melati/admin/Update.wm 206 * @param o 207 * @return the escaped DisplayString 208 */ 209 String escaped(Persistent o); 210 211 /** 212 * Encode a String as a UTF-8 URL. 213 * 214 * @param s the String to encode 215 * @return the encoded String 216 */ 217 String encoded(String s); 218 219 /** 220 * Decode a UTF-8 URL encoded string. 221 * @param s 222 * @return the decoded String 223 */ 224 String decoded(String s); 225 } 226 227