1 package org.codehaus.xfire.java.message;
2
3 import java.util.Calendar;
4 import java.util.Date;
5
6 import javax.xml.stream.XMLStreamException;
7 import javax.xml.stream.XMLStreamWriter;
8
9 import org.codehaus.xfire.XFireRuntimeException;
10 import org.codehaus.xfire.util.DateUtils;
11
12 /***
13 * LiteralWriter
14 *
15 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
16 */
17 public class LiteralWriter
18 implements MessageWriter
19 {
20 private XMLStreamWriter writer;
21
22 private String namespace;
23
24 private String name;
25
26 private static Calendar calendar = Calendar.getInstance();
27
28 public LiteralWriter( XMLStreamWriter writer, String name, String namespace )
29 {
30 this.writer = writer;
31 this.namespace = namespace;
32 this.name = name;
33
34 try
35 {
36 writeStartElement();
37 }
38 catch ( XMLStreamException e )
39 {
40
41 throw new XFireRuntimeException("Error writing document.", e);
42 }
43
44 }
45
46 private void writeStartElement()
47 throws XMLStreamException
48 {
49 String prefix = writer.getPrefix(namespace);
50 boolean writeNS = false;
51 if ( prefix == null )
52 {
53 prefix = "";
54 writer.setPrefix(prefix, namespace);
55 writeNS = true;
56 }
57
58 writer.writeStartElement("", name, namespace);
59
60 if ( writeNS )
61 writer.writeDefaultNamespace(namespace);
62 }
63
64 /***
65 * @see org.codehaus.xfire.java.message.MessageWriter#writeValue(java.lang.Object)
66 */
67 public void writeValue(Object value)
68 {
69 try
70 {
71 if ( value != null )
72 writer.writeCharacters( value.toString() );
73 }
74 catch ( XMLStreamException e )
75 {
76
77 throw new XFireRuntimeException("Error writing document.", e);
78 }
79 }
80
81 /***
82 * @see org.codehaus.xfire.java.message.MessageWriter#getWriter(java.lang.String)
83 */
84 public MessageWriter getChildWriter(String name)
85 {
86 return new LiteralWriter(writer, name, namespace);
87 }
88
89 public MessageWriter getChildWriter(String name, String ns)
90 {
91 return new LiteralWriter(writer, name, ns);
92 }
93
94 public String getNamespace()
95 {
96 return namespace;
97 }
98
99 public void setNamespace(String namespace)
100 {
101 this.namespace = namespace;
102 }
103
104 /***
105 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsCalendar(java.util.Calendar)
106 */
107 public void writeValueAsCalendar(Calendar calendar)
108 {
109 DateUtils.formatDateTime( calendar.getTime() );
110 }
111
112 /***
113 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsInt(java.lang.Integer)
114 */
115 public void writeValueAsInt(Integer i)
116 {
117 writeValue( i.toString() );
118 }
119
120 /***
121 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsDate(java.util.Date)
122 */
123 public void writeValueAsDateTime(Date date)
124 {
125 writeValue( DateUtils.formatDateTime(date) );
126 }
127
128 /***
129 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsDate(java.util.Date)
130 */
131 public void writeValueAsDate(Date date)
132 {
133 DateUtils.formatDate( calendar.getTime() );
134 }
135
136 /***
137 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsDouble(java.lang.Double)
138 */
139 public void writeValueAsDouble(Double d)
140 {
141 writeValue( d.toString() );
142 }
143
144 /***
145 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsLong(java.lang.Long)
146 */
147 public void writeValueAsLong(Long l)
148 {
149 writeValue( l.toString() );
150 }
151
152 /***
153 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsFloat(java.lang.Float)
154 */
155 public void writeValueAsFloat(Float f)
156 {
157 writeValue( f.toString() );
158 }
159
160 /***
161 * @see org.codehaus.xfire.java.message.MessageWriter#writeValueAsBoolean(boolean)
162 */
163 public void writeValueAsBoolean(boolean b)
164 {
165 writeValue( Boolean.toString(b) );
166 }
167
168 public void close()
169 {
170 try
171 {
172 writer.writeEndElement();
173 }
174 catch ( XMLStreamException e )
175 {
176
177 throw new XFireRuntimeException("Error writing document.", e);
178 }
179 }
180
181
182 }