View Javadoc

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              // TODO: I'm still not sure what should happen here.
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              // TODO: I'm still not sure what should happen here.
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             // TODO: I'm still not sure what should happen here.
177             throw new XFireRuntimeException("Error writing document.", e);
178         }
179     }
180 
181 
182 }