001: /*
002: * Copyright (c) 2001 - 2005 ivata limited.
003: * All rights reserved.
004: * -----------------------------------------------------------------------------
005: * ivata masks may be redistributed under the GNU General Public
006: * License as published by the Free Software Foundation;
007: * version 2 of the License.
008: *
009: * These programs are free software; you can redistribute them and/or
010: * modify them under the terms of the GNU General Public License
011: * as published by the Free Software Foundation; version 2 of the License.
012: *
013: * These programs are distributed in the hope that they will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: *
017: * See the GNU General Public License in the file LICENSE.txt for more
018: * details.
019: *
020: * If you would like a copy of the GNU General Public License write to
021: *
022: * Free Software Foundation, Inc.
023: * 59 Temple Place - Suite 330
024: * Boston, MA 02111-1307, USA.
025: *
026: *
027: * To arrange commercial support and licensing, contact ivata at
028: * http://www.ivata.com/contact.jsp
029: * -----------------------------------------------------------------------------
030: * $Log: LineBreakFormat.java,v $
031: * Revision 1.5 2005/10/11 18:54:06 colinmacleod
032: * Fixed some checkstyle and javadoc issues.
033: *
034: * Revision 1.4 2005/10/02 14:06:33 colinmacleod
035: * Added/improved log4j logging.
036: *
037: * Revision 1.3 2005/04/11 14:45:38 colinmacleod
038: * Changed HTMLFormat from an abstract class
039: * into an interface.
040: *
041: * Revision 1.2 2005/04/09 18:04:18 colinmacleod
042: * Changed copyright text to GPL v2 explicitly.
043: *
044: * Revision 1.1 2005/01/06 22:41:01 colinmacleod
045: * Moved up a version number.
046: * Changed copyright notices to 2005.
047: * Updated the documentation:
048: * - started working on multiproject:site docu.
049: * - changed the logo.
050: * Added checkstyle and fixed LOADS of style issues.
051: * Added separate thirdparty subproject.
052: * Added struts (in web), util and webgui (in webtheme) from ivata op.
053: *
054: * Revision 1.3 2004/03/21 21:16:37 colinmacleod
055: * Shortened name to ivata op.
056: *
057: * Revision 1.2 2004/02/01 22:07:32 colinmacleod
058: * Added full names to author tags
059: *
060: * Revision 1.1.1.1 2004/01/27 20:59:48 colinmacleod
061: * Moved ivata op to SourceForge.
062: *
063: * Revision 1.2 2003/10/15 14:13:39 colin
064: * Fixes for XDoclet.
065: *
066: * Revision 1.1 2003/02/24 19:33:33 colin
067: * Moved to new subproject.
068: *
069: * Revision 1.2 2003/02/04 17:43:46 colin
070: * copyright notice
071: *
072: * Revision 1.1 2002/06/21 11:58:37 colin
073: * restructured com.ivata.mask.jsp into separate sub-categories:
074: * format, JavaScript, theme and tree.
075: * -----------------------------------------------------------------------------
076: */
077: package com.ivata.mask.web.format;
078:
079: import org.apache.log4j.Logger;
080:
081: import java.util.StringTokenizer;
082:
083: /**
084: * <p>
085: * Convert line breaks into HTML break tags.
086: * </p>
087: *
088: * @since ivata masks 0.4 (2002-06-19)
089: * @author Colin MacLeod
090: * <a href='mailto:colin.macleod@ivata.com'>colin.macleod@ivata.com</a>
091: * @version $Revision: 1.5 $
092: */
093: public class LineBreakFormat implements HTMLFormat {
094: /**
095: * Logger for this class.
096: */
097: private static final Logger logger = Logger
098: .getLogger(LineBreakFormat.class);
099:
100: /**
101: * <p>
102: * Stores the string which is prepended to each new line.
103: * </p>
104: */
105: private String prepend = "";
106: /**
107: * <p>
108: * If set to <code>true</code>, then all line break characters in the
109: * <code>htmText</code> (see {@link #format format}) are converted into
110: * HTML line-breaks (<br/>).
111: * </p>
112: */
113: private boolean convertLineBreaks = false;
114:
115: /**
116: * <p>
117: * Convert all line breaks in the text provided to <br/> tags, and
118: * prepend a string to new each line. One example where this is required is
119: * in'quoted' return emails, where each line is traditionally preceded by
120: * the 'greater than' symbol >
121: * </p>
122: *
123: * @param hTMLTextParam
124: * HTML text to convert line breaks in.
125: * @return formatted text, with all of the line breaks converted to HTML
126: * tags
127: */
128: public final String format(final String hTMLTextParam) {
129: if (logger.isDebugEnabled()) {
130: logger.debug("format(String hTMLTextParam = "
131: + hTMLTextParam + ") - start");
132: }
133:
134: String hTMLText = hTMLTextParam;
135: int index = 0;
136: // should we convert all line breaks to <br/>
137: if (convertLineBreaks) {
138: while ((index = hTMLText.indexOf('\n')) != -1) {
139: if (index > 1) {
140: hTMLText = hTMLText.substring(0, index) + "<br/>"
141: + prepend + hTMLText.substring(index + 1);
142: } else {
143: hTMLText = "<br/>" + prepend
144: + hTMLText.substring(index + 1);
145: }
146: }
147: // otherwise, if a prepend string was specified, use that
148: } else if (!prepend.equals("")) {
149: String sNew = "";
150: StringTokenizer st = new StringTokenizer(hTMLText, "\n");
151: while (st.hasMoreTokens()) {
152: // if this isn't the first one, prepend as you must...
153: if (!sNew.equals("")) {
154: sNew += "\n";
155: }
156: sNew += prepend + st.nextToken();
157: }
158: hTMLText = sNew;
159: }
160:
161: if (logger.isDebugEnabled()) {
162: logger.debug("format(String) - end - return value = "
163: + hTMLText);
164: }
165: return hTMLText;
166: }
167:
168: /**
169: * <p>
170: * Get the string which is prepended to each new line.
171: * </p>
172: *
173: * @return the current value of the string to prepend to each line.
174: */
175: public final String getPrepend() {
176: if (logger.isDebugEnabled()) {
177: logger.debug("getPrepend() - start");
178: }
179:
180: if (logger.isDebugEnabled()) {
181: logger.debug("getPrepend() - end - return value = "
182: + prepend);
183: }
184: return prepend;
185: }
186:
187: /**
188: * <p>
189: * Set the string which is prepended to each new line.
190: * </p>
191: *
192: * @param prependParam
193: * the new value of the string to prepend to each line.
194: */
195: public final void setPrepend(final String prependParam) {
196: if (logger.isDebugEnabled()) {
197: logger.debug("setPrepend(String prependParam = "
198: + prependParam + ") - start");
199: }
200:
201: this .prepend = prependParam;
202:
203: if (logger.isDebugEnabled()) {
204: logger.debug("setPrepend(String) - end");
205: }
206: }
207:
208: /**
209: * <p>
210: * Get whether or not we should convert line breaks. If set to
211: * <code>true</code>, then all line break characters in the
212: * <code>htmText</code> (see {@link #format format}) are converted into
213: * HTML line-breaks (<br/>).
214: * </p>
215: *
216: * @return <code>true</code> if line breaks are converted, otherwise
217: * <code>false</code>.
218: */
219: public final boolean getConvertLineBreaks() {
220: if (logger.isDebugEnabled()) {
221: logger.debug("getConvertLineBreaks() - start");
222: }
223:
224: if (logger.isDebugEnabled()) {
225: logger
226: .debug("getConvertLineBreaks() - end - return value = "
227: + convertLineBreaks);
228: }
229: return convertLineBreaks;
230: }
231:
232: /**
233: * <p>
234: * Set whether or not we should convert line breaks. If set to
235: * <code>true</code>, then all line break characters in the
236: * <code>hTMLText</code> (see {@link #format format}) are converted into
237: * HTML line-breaks (<br/>).
238: * </p>
239: *
240: * @param convertLineBreaksParam
241: * set to <code>true</code> if line breaks should be converted,
242: * otherwise <code>false</code>.
243: */
244: public final void setConvertLineBreaks(
245: final boolean convertLineBreaksParam) {
246: if (logger.isDebugEnabled()) {
247: logger
248: .debug("setConvertLineBreaks(boolean convertLineBreaksParam = "
249: + convertLineBreaksParam + ") - start");
250: }
251:
252: this .convertLineBreaks = convertLineBreaksParam;
253:
254: if (logger.isDebugEnabled()) {
255: logger.debug("setConvertLineBreaks(boolean) - end");
256: }
257: }
258: }
|