1 19 20 package gnu.mail.handler; 21 22 import java.awt.datatransfer.DataFlavor ; 23 import java.awt.datatransfer.UnsupportedFlavorException ; 24 import java.io.*; 25 import javax.activation.*; 26 import javax.mail.internet.ContentType ; 27 import javax.mail.internet.MimeUtility ; 28 import javax.mail.internet.ParseException ; 29 30 36 public abstract class Text 37 implements DataContentHandler 38 { 39 40 44 protected DataFlavor flavor; 45 46 51 protected Text(String mimeType, String description) 52 { 53 flavor = new ActivationDataFlavor(java.lang.String .class, mimeType, 54 description); 55 } 56 57 62 public DataFlavor [] getTransferDataFlavors() 63 { 64 DataFlavor [] flavors = new DataFlavor [1]; 65 flavors[0] = flavor; 66 return flavors; 67 } 68 69 77 public Object getTransferData(DataFlavor flavor, DataSource source) 78 throws UnsupportedFlavorException , IOException 79 { 80 if (this.flavor.equals(flavor)) 81 return getContent(source); 82 return null; 83 } 84 85 92 public Object getContent(DataSource source) 93 throws IOException 94 { 95 InputStream in = source.getInputStream(); 96 String mimeType = source.getContentType(); 97 String charset = getJavaCharset(mimeType); 98 InputStreamReader reader = new InputStreamReader(in, charset); 99 char[] buf = new char[4096]; StringBuffer buffer = new StringBuffer (); 101 while (true) 102 { 103 int len = reader.read(buf); 104 if (len > -1) 105 buffer.append(new String (buf, 0, len)); 106 else 107 break; 108 } 109 return buffer.toString(); 110 } 111 112 119 public void writeTo(Object object, String mimeType, OutputStream out) 120 throws IOException 121 { 122 String text = null; 124 if (object instanceof String ) 125 text = (String )object; 126 else if (object instanceof byte[]) 127 text = new String ((byte[])object); 128 else if (object instanceof char[]) 129 text = new String ((char[])object); 130 else text = object.toString(); 132 String charset = getJavaCharset(mimeType); 133 OutputStreamWriter writer = new OutputStreamWriter(out, charset); 134 writer.write(text); 135 writer.flush(); 136 } 137 138 145 protected static String getJavaCharset(String contentType) 146 { 147 String charset = "us-ascii"; 148 if (contentType!=null) 149 { 150 try 151 { 152 ContentType ct = new ContentType (contentType); 153 String ctCharset = ct.getParameter("charset"); 154 if (ctCharset!=null) 155 charset = ctCharset; 156 } 157 catch (ParseException e) 158 { 159 } 160 } 161 return MimeUtility.javaCharset(charset); 162 } 163 164 } 165 | Popular Tags |