1 31 32 package org.opencms.report; 33 34 import org.opencms.i18n.CmsEncoder; 35 import org.opencms.main.CmsException; 36 import org.opencms.util.CmsStringUtil; 37 38 import java.util.ArrayList ; 39 import java.util.List ; 40 import java.util.Locale ; 41 import java.util.StringTokenizer ; 42 43 55 public class CmsHtmlReport extends A_CmsReport { 56 57 58 private static final String LINEBREAK = "<br>"; 59 60 64 private static final String LINEBREAK_TRADITIONAL = "<br>\\n"; 65 66 67 private List m_content; 68 69 73 private int m_indexNext; 74 75 76 private boolean m_showExceptionStackTracke; 77 78 79 private boolean m_writeHtml; 80 81 87 public CmsHtmlReport(Locale locale, String siteRoot) { 88 89 this(locale, siteRoot, false); 90 } 91 92 99 protected CmsHtmlReport(Locale locale, String siteRoot, boolean writeHtml) { 100 101 init(locale, siteRoot); 102 m_content = new ArrayList (256); 103 m_showExceptionStackTracke = true; 104 m_writeHtml = writeHtml; 105 } 106 107 110 public synchronized String getReportUpdate() { 111 112 StringBuffer result = new StringBuffer (); 113 int indexEnd = m_content.size(); 114 for (int i = m_indexNext; i < indexEnd; i++) { 115 Object obj = m_content.get(i); 116 if (obj instanceof String || obj instanceof StringBuffer ) { 117 result.append(obj); 118 } else if (obj instanceof Throwable ) { 119 result.append(getExceptionElement((Throwable )obj)); 120 } 121 } 122 m_indexNext = indexEnd; 123 124 return result.toString(); 125 } 126 127 130 public synchronized void print(String value, int format) { 131 132 value = CmsStringUtil.escapeJavaScript(value); 133 StringBuffer buf; 134 135 if (!m_writeHtml) { 136 switch (format) { 137 case FORMAT_HEADLINE: 138 buf = new StringBuffer (); 139 buf.append("aH('"); 140 buf.append(value); 141 buf.append("'); "); 142 m_content.add(buf); 143 break; 144 case FORMAT_WARNING: 145 buf = new StringBuffer (); 146 buf.append("aW('"); 147 buf.append(value); 148 buf.append("'); "); 149 m_content.add(buf); 150 addWarning(value); 151 break; 152 case FORMAT_ERROR: 153 buf = new StringBuffer (); 154 buf.append("aE('"); 155 buf.append(value); 156 buf.append("'); "); 157 m_content.add(buf); 158 addError(value); 159 break; 160 case FORMAT_NOTE: 161 buf = new StringBuffer (); 162 buf.append("aN('"); 163 buf.append(value); 164 buf.append("'); "); 165 m_content.add(buf); 166 break; 167 case FORMAT_OK: 168 buf = new StringBuffer (); 169 buf.append("aO('"); 170 buf.append(value); 171 buf.append("'); "); 172 m_content.add(buf); 173 break; 174 case FORMAT_DEFAULT: 175 default: 176 buf = new StringBuffer (); 177 buf.append("a('"); 178 buf.append(value); 179 buf.append("'); "); 180 m_content.add(buf); 181 } 182 183 if (value.trim().endsWith(getLineBreak())) { 187 buf.append("aB(); "); 188 } 189 } else { 190 switch (format) { 192 case FORMAT_HEADLINE: 193 buf = new StringBuffer (); 194 buf.append("<span class='head'>"); 195 buf.append(value); 196 buf.append("</span>"); 197 m_content.add(buf); 198 break; 199 case FORMAT_WARNING: 200 buf = new StringBuffer (); 201 buf.append("<span class='warn'>"); 202 buf.append(value); 203 buf.append("</span>"); 204 m_content.add(buf); 205 addWarning(value); 206 break; 207 case FORMAT_ERROR: 208 buf = new StringBuffer (); 209 buf.append("<span class='err'>"); 210 buf.append(value); 211 buf.append("</span>"); 212 m_content.add(buf); 213 addError(value); 214 break; 215 case FORMAT_NOTE: 216 buf = new StringBuffer (); 217 buf.append("<span class='note'>"); 218 buf.append(value); 219 buf.append("</span>"); 220 m_content.add(buf); 221 break; 222 case FORMAT_OK: 223 buf = new StringBuffer (); 224 buf.append("<span class='ok'>"); 225 buf.append(value); 226 buf.append("</span>"); 227 m_content.add(buf); 228 break; 229 case FORMAT_DEFAULT: 230 default: 231 m_content.add(value); 232 } 233 } 234 } 235 236 239 public void println() { 240 241 print(getLineBreak()); 242 } 243 244 247 public synchronized void println(Throwable t) { 248 249 addError(t.getMessage()); 250 m_content.add(t); 251 } 252 253 258 protected String getLineBreak() { 259 260 return m_writeHtml ? LINEBREAK_TRADITIONAL : LINEBREAK; 261 } 262 263 276 private StringBuffer getExceptionElement(Throwable throwable) { 277 278 StringBuffer buf = new StringBuffer (256); 279 280 if (!m_writeHtml) { 281 if (m_showExceptionStackTracke) { 282 buf.append("aT('"); 283 buf.append(getMessages().key(Messages.RPT_EXCEPTION_0)); 284 String exception = CmsEncoder.escapeXml(CmsException.getStackTraceAsString(throwable)); 285 StringBuffer excBuffer = new StringBuffer (exception.length() + 50); 286 StringTokenizer tok = new StringTokenizer (exception, "\r\n"); 287 while (tok.hasMoreTokens()) { 288 excBuffer.append(tok.nextToken()); 289 excBuffer.append(getLineBreak()); 290 } 291 buf.append(CmsStringUtil.escapeJavaScript(excBuffer.toString())); 292 buf.append("'); "); 293 m_content.add(buf); 294 } else { 295 buf.append("aT('"); 296 buf.append(getMessages().key(Messages.RPT_EXCEPTION_0)); 297 buf.append(CmsStringUtil.escapeJavaScript(throwable.toString())); 298 buf.append("'); "); 299 m_content.add(buf); 300 } 301 } else { 302 if (m_showExceptionStackTracke) { 303 buf.append("<span class='throw'>"); 304 buf.append(getMessages().key(Messages.RPT_EXCEPTION_0)); 305 String exception = CmsEncoder.escapeXml(CmsException.getStackTraceAsString(throwable)); 306 StringBuffer excBuffer = new StringBuffer (exception.length() + 50); 307 StringTokenizer tok = new StringTokenizer (exception, "\r\n"); 308 while (tok.hasMoreTokens()) { 309 excBuffer.append(tok.nextToken()); 310 excBuffer.append(getLineBreak()); 311 } 312 buf.append(CmsStringUtil.escapeJavaScript(excBuffer.toString())); 313 buf.append("</span>"); 314 } else { 315 buf.append("<span class='throw'>"); 316 buf.append(getMessages().key(Messages.RPT_EXCEPTION_0)); 317 buf.append(CmsStringUtil.escapeJavaScript(throwable.toString())); 318 buf.append("</span>"); 319 buf.append(getLineBreak()); 320 } 321 } 322 323 return buf; 324 } 325 }
| Popular Tags
|