// Path: src/main/java/org/dynaform/xml/XmlVisitor.java
// public interface XmlVisitor {
// 
//   /**
//    * Handle text.
//    * 
//    * @param s text.
//    * @return XML event handler to be used as next.
//    */
//   XmlVisitor text(String s);
// 
//   /**
//    * Handle XML element start.
//    * 
//    * @param element name of the XML element.
//    * @return event handler for the XML element.
//    */
//   ElementVisitor visitElement(String element);
//   
//   /**
//    * Handle end of the XML element body.
//    * 
//    * @return event handler of the XML element to be used as next.
//    */
//   ElementVisitor visitEndBody();
// 
//   /**
//    * Event handler of XML element.
//    * 
//    * @author Rein Raudjärv
//    */
//   interface ElementVisitor {
//     /**
//      * Handle XML attribute.
//      * 
//      * @param name name of the XML attribute.
//      * @param value value of the XML attribute.
//      * @return event handler for the XML element.
//      */
//     ElementVisitor visitAttribute(String name, String value);
// 
//     /**
//      * Handle start of the XML body.
//      * 
//      * @return event handler for the XML element body.
//      */
//     XmlVisitor visitBody();
// 
//     /**
//      * Handle end of the XML element.
//      * 
//      * @return XML event handler to be used as next.
//      */
//     XmlVisitor visitEndElement();
//   }
// 
// }
// 
// Path: src/main/java/org/dynaform/xml/XmlVisitor.java
// interface ElementVisitor {
//   /**
//    * Handle XML attribute.
//    * 
//    * @param name name of the XML attribute.
//    * @param value value of the XML attribute.
//    * @return event handler for the XML element.
//    */
//   ElementVisitor visitAttribute(String name, String value);
// 
//   /**
//    * Handle start of the XML body.
//    * 
//    * @return event handler for the XML element body.
//    */
//   XmlVisitor visitBody();
// 
//   /**
//    * Handle end of the XML element.
//    * 
//    * @return XML event handler to be used as next.
//    */
//   XmlVisitor visitEndElement();
// }


import org.dynaform.xml.XmlVisitor;
import org.dynaform.xml.XmlVisitor.ElementVisitor;
import java.util.Map;
import java.util.Map.Entry;

		return false;
	}

	public void write(XmlVisitor xa) {
		ElementVisitor elementVisitor = xa.visitElement(name);
		
		// Attributes
		if (attributes != null) {
			for (Entry<String, TextWriter> entry : attributes.entrySet()) {
				String attrName = entry.getKey();
				TextWriter textWriter = entry.getValue();
				String value = textWriter.getText();
				if (value != null)
				  elementVisitor.visitAttribute(attrName, value);
			}
		}
		
		// Body
		if (body != null && !body.isEmpty()) {
			XmlVisitor bodyVisitor = elementVisitor.visitBody();
			body.write(bodyVisitor);
			bodyVisitor.visitEndBody();
		}
		
		elementVisitor.visitEndElement();
	}
	
  public String toString() {
    StringBuilder sb = new StringBuilder();
    if (attributes == null) {

// Path: src/main/java/org/dynaform/xml/XmlVisitor.java
// public interface XmlVisitor {
// 
//   /**
//    * Handle text.
//    * 
//    * @param s text.
//    * @return XML event handler to be used as next.
//    */
//   XmlVisitor text(String s);
// 
//   /**
//    * Handle XML element start.
//    * 
//    * @param element name of the XML element.
//    * @return event handler for the XML element.
//    */
//   ElementVisitor visitElement(String element);
//   
//   /**
//    * Handle end of the XML element body.
//    * 
//    * @return event handler of the XML element to be used as next.
//    */
//   ElementVisitor visitEndBody();
// 
//   /**
//    * Event handler of XML element.
//    * 
//    * @author Rein Raudjärv
//    */
//   interface ElementVisitor {
//     /**
//      * Handle XML attribute.
//      * 
//      * @param name name of the XML attribute.
//      * @param value value of the XML attribute.
//      * @return event handler for the XML element.
//      */
//     ElementVisitor visitAttribute(String name, String value);
// 
//     /**
//      * Handle start of the XML body.
//      * 
//      * @return event handler for the XML element body.
//      */
//     XmlVisitor visitBody();
// 
//     /**
//      * Handle end of the XML element.
//      * 
//      * @return XML event handler to be used as next.
//      */
//     XmlVisitor visitEndElement();
//   }
// 
// }
// 
// Path: src/main/java/org/dynaform/xml/XmlVisitor.java
// interface ElementVisitor {
//   /**
//    * Handle XML attribute.
//    * 
//    * @param name name of the XML attribute.
//    * @param value value of the XML attribute.
//    * @return event handler for the XML element.
//    */
//   ElementVisitor visitAttribute(String name, String value);
// 
//   /**
//    * Handle start of the XML body.
//    * 
//    * @return event handler for the XML element body.
//    */
//   XmlVisitor visitBody();
// 
//   /**
//    * Handle end of the XML element.
//    * 
//    * @return XML event handler to be used as next.
//    */
//   XmlVisitor visitEndElement();
// }


// Path: src/main/java/org/dynaform/xml/writer/XmlElementWriter.java
import org.dynaform.xml.XmlVisitor;
import org.dynaform.xml.XmlVisitor.ElementVisitor;
import java.util.Map;
import java.util.Map.Entry;

		return false;
	}

	public void write(XmlVisitor xa) {
		ElementVisitor elementVisitor = xa.visitElement(name);
		
		// Attributes
		if (attributes != null) {
			for (Entry<String, TextWriter> entry : attributes.entrySet()) {
				String attrName = entry.getKey();
				TextWriter textWriter = entry.getValue();
				String value = textWriter.getText();
				if (value != null)
				  elementVisitor.visitAttribute(attrName, value);
			}
		}
		
		// Body
		if (body != null && !body.isEmpty()) {
			XmlVisitor bodyVisitor = elementVisitor.visitBody();
			body.write(bodyVisitor);
			bodyVisitor.visitEndBody();
		}
		
		elementVisitor.visitEndElement();
	}
	
  public String toString() {
    StringBuilder sb = new StringBuilder();
    if (attributes == null) {

      sb.append(XmlElementWriter.class.getSimpleName());
