package railo.runtime.net.mail; import java.io.Serializable; import railo.runtime.op.Caster; import railo.runtime.type.Array; import railo.runtime.type.util.ListUtil; /** * */ public final class MailPart implements Serializable { @Override public String toString() { return "railo.runtime.mail.MailPart(wraptext:"+wraptext+";type:"+type+";charset:"+charset+";body:"+body+";)"; } /** IThe MIME media type of the part */ private boolean isHTML; /** Specifies the maximum line length, in characters of the mail text */ private int wraptext=-1; /** The character encoding in which the part text is encoded */ private String charset; private String body; private String type; /** * */ public void clear() { isHTML=false; type=null; wraptext=-1; charset=null; body="null"; } /** * */ public MailPart() { } /** * @param charset */ public MailPart(String charset) { this.charset = charset; } /** * @return Returns the body. */ public String getBody() { return wrap(body); } /** * @param body The body to set. */ public void setBody(String body) { this.body = body; } /** * @return Returns the charset. */ public String getCharset() { return charset; } /** * @param charset The charset to set. */ public void setCharset(String charset) { this.charset = charset; } /** * @return Returns the isHTML. */ public boolean isHTML() { return isHTML; } /** * @param isHTML The type to set. */ public void isHTML(boolean isHTML) { this.isHTML = isHTML; } /** * @return Returns the wraptext. */ public int getWraptext() { return wraptext; } /** * @return the type */ public String getType() { return type; } /** * @param type the type to set */ public void setType(String type) { this.type = type; } /** * @param wraptext The wraptext to set. */ public void setWraptext(int wraptext) { this.wraptext = wraptext; } /** * wraps a String to specified length * @param str string to erap * @return wraped String */ private String wrap(String str) { if(body==null || wraptext<=0)return str; StringBuffer rtn=new StringBuffer(); String ls=System.getProperty("line.separator"); Array arr = ListUtil.listToArray(str,ls); int len=arr.size(); for(int i=1;i<=len;i++) { rtn.append(wrapLine(Caster.toString(arr.get(i,""),""))); if(i+1<len)rtn.append(ls); } return rtn.toString(); } /** * wrap a single line * @param str * @return wraped Line */ private String wrapLine(String str) { int wtl=wraptext; if(str.length()<=wtl) return str; String sub=str.substring(0,wtl); String rest=str.substring(wtl); char firstR=rest.charAt(0); String ls=System.getProperty("line.separator"); if(firstR==' ' || firstR=='\t') return sub+ls+wrapLine(rest.length()>1?rest.substring(1):""); int indexSpace = sub.lastIndexOf(' '); int indexTab = sub.lastIndexOf('\t'); int index=indexSpace<=indexTab?indexTab:indexSpace; if(index==-1) return sub+ls+wrapLine(rest); return sub.substring(0,index) + ls + wrapLine(sub.substring(index+1)+rest); } }