1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.beep4j.internal.message;
17
18 import java.io.ByteArrayOutputStream;
19 import java.io.OutputStream;
20 import java.io.OutputStreamWriter;
21 import java.io.Writer;
22 import java.nio.ByteBuffer;
23 import java.nio.charset.Charset;
24
25 import net.sf.beep4j.Message;
26 import net.sf.beep4j.MessageBuilder;
27
28 public class DefaultMessageBuilder implements MessageBuilder {
29
30 private final MessageHeader header;
31
32 private final ByteArrayOutputStream target;
33
34 private ByteBuffer buffer;
35
36 private String charset;
37
38 public DefaultMessageBuilder() {
39 header = new MessageHeader();
40 target = new ByteArrayOutputStream();
41 }
42
43 public void addHeader(String name, String value) {
44 header.addHeader(name, value);
45 }
46
47 public void setCharsetName(String charset) {
48 this.charset = charset;
49 header.setCharset(charset);
50 }
51
52 public void setContentType(String type, String subtype) {
53 header.setContentType(type, subtype);
54 }
55
56 public OutputStream getOutputStream() {
57 return target;
58 }
59
60 public Writer getWriter() {
61 Charset charset = Charset.forName(this.charset);
62 Writer writer = new OutputStreamWriter(getOutputStream(), charset);
63 return writer;
64 }
65
66 public ByteBuffer getContentBuffer(int size) {
67 buffer = ByteBuffer.allocate(size);
68 return buffer;
69 }
70
71 public Message getMessage() {
72 if (buffer == null) {
73 return new DefaultMessage(header, ByteBuffer.wrap(target.toByteArray()));
74 } else {
75 buffer.flip();
76 return new DefaultMessage(header, buffer.asReadOnlyBuffer());
77 }
78 }
79
80 }