1 package org.codehaus.xfire.aegis.yom; 2 3 import javax.xml.namespace.QName; 4 import javax.xml.stream.XMLStreamWriter; 5 6 import org.codehaus.xfire.aegis.AbstractMessageWriter; 7 import org.codehaus.xfire.aegis.MessageWriter; 8 import org.codehaus.xfire.util.NamespaceHelper; 9 import org.codehaus.yom.Attribute; 10 import org.codehaus.yom.Element; 11 12 public class YOMWriter 13 extends AbstractMessageWriter 14 { 15 private Element element; 16 17 public YOMWriter(Element element) 18 { 19 this.element = element; 20 } 21 22 public void writeValue(Object value) 23 { 24 element.appendChild(value.toString()); 25 } 26 27 public void writeValue(Object value, String ns, String attr) 28 { 29 element.addAttribute(new Attribute(attr, ns, value.toString())); 30 } 31 32 public MessageWriter getElementWriter(String name) 33 { 34 return getElementWriter(name, element.getNamespaceURI()); 35 } 36 37 public MessageWriter getElementWriter(String name, String namespace) 38 { 39 String prefix = NamespaceHelper.getUniquePrefix(element, namespace); 40 41 Element child = new Element(prefix + ":" + name, namespace); 42 element.appendChild(child); 43 44 return new YOMWriter(child); 45 } 46 47 public MessageWriter getElementWriter(QName qname) 48 { 49 String name = qname.getLocalPart(); 50 if (qname.getPrefix().length() > 0) 51 { 52 name = qname.getPrefix() + ":" + name; 53 } 54 else 55 { 56 String prefix = NamespaceHelper.getUniquePrefix(element, qname.getNamespaceURI()); 57 name = prefix + ":" + name; 58 } 59 60 Element child = new Element(name, qname.getNamespaceURI()); 61 element.appendChild(child); 62 63 return new YOMWriter(child); 64 } 65 66 public XMLStreamWriter getXMLStreamWriter() 67 { 68 throw new UnsupportedOperationException("Stream writing not supported from a YOMWriter."); 69 } 70 71 public MessageWriter getAttributeWriter(String name) 72 { 73 Attribute att = new Attribute(element.getNamespacePrefix() + ":" + name, 74 element.getNamespaceURI(), 75 ""); 76 element.addAttribute(att); 77 return new AttributeWriter(att); 78 } 79 80 public MessageWriter getAttributeWriter(String name, String namespace) 81 { 82 Attribute att = null; 83 if (namespace != null && namespace.length() > 0) 84 { 85 String prefix = NamespaceHelper.getUniquePrefix(element, namespace); 86 att = new Attribute(prefix + ":" + name, namespace, ""); 87 } 88 else 89 { 90 att = new Attribute(name, ""); 91 } 92 93 element.addAttribute(att); 94 return new AttributeWriter(att); 95 } 96 97 public MessageWriter getAttributeWriter(QName qname) 98 { 99 return getAttributeWriter(qname.getLocalPart(), qname.getNamespaceURI()); 100 } 101 102 public void close() 103 { 104 } 105 }