1 25 package org.snipsnap.jsp; 26 27 import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; 28 import org.radeox.filter.Filter; 29 import org.radeox.filter.HtmlRemoveFilter; 30 import org.radeox.util.logging.Logger; 31 import org.snipsnap.snip.Snip; 32 import org.dom4j.io.XMLWriter; 33 import org.dom4j.io.OutputFormat; 34 35 import javax.servlet.jsp.JspException ; 36 import javax.servlet.jsp.JspWriter ; 37 import javax.servlet.jsp.tagext.TagSupport ; 38 import java.io.IOException ; 39 import java.io.StringWriter ; 40 41 42 49 50 public class ContentTag extends TagSupport { 51 Snip snip = null; 52 boolean extract = false; 53 boolean removeHtml = false; 54 boolean encodeHtml = false; 55 56 public int doStartTag() throws JspException { 57 if (null != snip) { 58 String content = snip.getXMLContent(); 59 if (removeHtml) { 60 Filter filter = new HtmlRemoveFilter(); 61 content = filter.filter(content, null); 62 if (extract) { 63 if (content.length() > 40) { 64 content = content.substring(0, 40); 65 int ampIndex = content.lastIndexOf("&"); 66 int colonIndex = content.lastIndexOf(";"); 67 if (ampIndex > colonIndex) { 69 content = content.substring(0, ampIndex - 1); 70 } 71 content = content + " ..."; 72 } 73 } 74 } 75 if (encodeHtml) { 76 StringWriter stringWriter = new StringWriter (); 77 try { 78 OutputFormat outputFormat = new OutputFormat(); 79 outputFormat.setNewlines(true); 80 XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat); 81 xmlWriter.write(content); 82 xmlWriter.flush(); 83 } catch (IOException e) { 84 Logger.warn("ContentTag: unable to write encoded content: "+e); 85 } 86 content = stringWriter.toString(); 87 } 88 try { 89 JspWriter out = pageContext.getOut(); 90 out.print(content); 91 } catch (IOException e) { 92 Logger.warn("doStartTag in ContentTag", e); 93 } 94 } 95 return super.doStartTag(); 96 } 97 98 public void setEncode(boolean encode) { 99 this.encodeHtml = encode; 100 } 101 102 public void setExtract(boolean extract) { 103 this.extract = extract; 104 } 105 106 public void setRemoveHtml(boolean removeHtml) { 107 this.removeHtml = removeHtml; 108 } 109 110 public void setSnip(String snip) { 111 try { 112 this.snip = (Snip) ExpressionEvaluatorManager.evaluate("snip", snip, Snip.class, this, pageContext); 113 } catch (JspException e) { 114 Logger.warn("unable to evaluate expression", e); 115 } 116 } 117 } 118 | Popular Tags |