001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.tools.ant.taskdefs.email;
019:
020: import java.io.BufferedReader;
021: import java.io.File;
022: import java.io.FileReader;
023: import java.io.IOException;
024: import java.io.OutputStreamWriter;
025: import java.io.PrintStream;
026: import java.io.PrintWriter;
027:
028: import org.apache.tools.ant.ProjectComponent;
029:
030: /**
031: * Class representing an email message.
032: *
033: * @since Ant 1.5
034: */
035: public class Message extends ProjectComponent {
036: private File messageSource = null;
037: private StringBuffer buffer = new StringBuffer();
038: private String mimeType = "text/plain";
039: private boolean specified = false;
040: private String charset = null;
041:
042: /** Creates a new empty message */
043: public Message() {
044: }
045:
046: /**
047: * Creates a new message based on the given string
048: *
049: * @param text the message
050: */
051: public Message(String text) {
052: addText(text);
053: }
054:
055: /**
056: * Creates a new message using the contents of the given file.
057: *
058: * @param file the source of the message
059: */
060: public Message(File file) {
061: messageSource = file;
062: }
063:
064: /**
065: * Adds a textual part of the message
066: *
067: * @param text some text to add
068: */
069: public void addText(String text) {
070: buffer.append(text);
071: }
072:
073: /**
074: * Sets the source file of the message
075: *
076: * @param src the source of the message
077: */
078: public void setSrc(File src) {
079: this .messageSource = src;
080: }
081:
082: /**
083: * Sets the content type for the message
084: *
085: * @param mimeType a mime type e.g. "text/plain"
086: */
087: public void setMimeType(String mimeType) {
088: this .mimeType = mimeType;
089: specified = true;
090: }
091:
092: /**
093: * Returns the content type
094: *
095: * @return the mime type
096: */
097: public String getMimeType() {
098: return mimeType;
099: }
100:
101: /**
102: * Prints the message onto an output stream
103: *
104: * @param ps The print stream to write to
105: * @throws IOException if an error occurs
106: */
107: public void print(PrintStream ps) throws IOException {
108: // We need character encoding aware printing here.
109: // So, using PrintWriter over OutputStreamWriter instead of PrintStream
110: PrintWriter out = charset != null ? new PrintWriter(
111: new OutputStreamWriter(ps, charset)) : new PrintWriter(
112: ps);
113: if (messageSource != null) {
114: // Read message from a file
115: FileReader freader = new FileReader(messageSource);
116:
117: try {
118: BufferedReader in = new BufferedReader(freader);
119: String line = null;
120: while ((line = in.readLine()) != null) {
121: out.println(getProject().replaceProperties(line));
122: }
123: } finally {
124: freader.close();
125: }
126: } else {
127: out.println(getProject().replaceProperties(
128: buffer.substring(0)));
129: }
130: out.flush();
131: }
132:
133: /**
134: * Returns true if the mimeType has been set.
135: *
136: * @return false if the default value is in use
137: */
138: public boolean isMimeTypeSpecified() {
139: return specified;
140: }
141:
142: /**
143: * Sets the character set of mail message.
144: * Will be ignored if mimeType contains ....; Charset=... substring.
145: * @param charset the character set name.
146: * @since Ant 1.6
147: */
148: public void setCharset(String charset) {
149: this .charset = charset;
150: }
151:
152: /**
153: * Returns the charset of mail message.
154: *
155: * @return Charset of mail message.
156: * @since Ant 1.6
157: */
158: public String getCharset() {
159: return charset;
160: }
161: }
|