View Javadoc

1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  package org.apache.james.mime4j.message;
21  
22  import java.io.IOException;
23  import java.io.OutputStream;
24  import java.io.OutputStreamWriter;
25  import java.io.Reader;
26  import java.io.StringReader;
27  import java.io.Writer;
28  import java.nio.charset.Charset;
29  
30  import org.apache.james.mime4j.util.CharsetUtil;
31  
32  /**
33   * Text body backed by a <code>String</code>.
34   */
35  class StringTextBody extends TextBody {
36  
37      private final String text;
38      private final Charset charset;
39  
40      public StringTextBody(final String text, Charset charset) {
41          this.text = text;
42          this.charset = charset;
43      }
44  
45      @Override
46      public String getMimeCharset() {
47          return CharsetUtil.toMimeCharset(charset.name());
48      }
49  
50      @Override
51      public Reader getReader() throws IOException {
52          return new StringReader(text);
53      }
54  
55      @Override
56      public void writeTo(OutputStream out) throws IOException {
57          if (out == null)
58              throw new IllegalArgumentException();
59  
60          Reader reader = new StringReader(text);
61          Writer writer = new OutputStreamWriter(out, charset);
62  
63          char buffer[] = new char[1024];
64          while (true) {
65              int nChars = reader.read(buffer);
66              if (nChars == -1)
67                  break;
68  
69              writer.write(buffer, 0, nChars);
70          }
71  
72          reader.close();
73          writer.flush();
74      }
75  
76      @Override
77      public StringTextBody copy() {
78          return new StringTextBody(text, charset);
79      }
80  
81  }