--- /dev/null
+/*
+ * $Id: ElementWriter.java,v 1.1 2004-10-05 20:51:57 jsurfer Exp $
+ * Copyright Narushima Hironori. All rights reserved.
+ */
+package net.sourceforge.phpeclipse.wizards.html;
+
+import java.io.*;
+import java.util.HashMap;
+
+import org.w3c.dom.*;
+
+/**
+ * ElementWriter provides destribute xml code.
+ */
+public class ElementWriter {
+
+ final public static int
+ BEGIN_CHANGELINE = 1,
+ END_CHANGELINE = 2;
+
+ boolean trim = true;
+ HashMap expandOptions = new HashMap();
+ int defaultExpandOption;
+ String indent;
+
+ public ElementWriter() {
+ this(0, " ");
+ }
+
+ public ElementWriter(int defaultExpandOption, String indent) {
+ this.defaultExpandOption = defaultExpandOption;
+ this.indent = indent;
+ }
+
+ public void setExpandOption(String elementName, int value){
+ expandOptions.put(elementName, new Integer(value));
+ }
+
+ public int getExpandOption(String elementName){
+ if( expandOptions.containsKey(elementName)){
+ return ((Integer)expandOptions.get(elementName)).intValue();
+ }
+ return defaultExpandOption;
+ }
+
+ boolean isBeginChangeLine(String elementName){
+ return (getExpandOption(elementName) & BEGIN_CHANGELINE) != 0;
+ }
+
+ boolean isEndChangeLine(String elementName){
+ return (getExpandOption(elementName) & END_CHANGELINE) != 0;
+ }
+
+ public String expandTag(Element element){
+ StringBuffer buff = new StringBuffer();
+ expandTag(element, 0, buff);
+ return buff.toString();
+ }
+
+ public void writeTag(Element element, OutputStream out) throws IOException {
+ OutputStreamWriter writer = new OutputStreamWriter(out);
+ try{
+ writer.write("<?xml version=\"1.0\"?>\n\n");
+ writer.write(new ElementWriter().expandTag(element));
+ }finally{
+ if(writer != null){
+ writer.close();
+ }
+ }
+ }
+
+ void expandTag(Element element, int level, StringBuffer buff){
+ expandIndent(level, buff);
+
+ String elementName = element.getNodeName();
+ buff.append('<' + elementName );
+ NamedNodeMap attrs = element.getAttributes();
+ for(int i=0; i<attrs.getLength(); i++){
+ Node n = attrs.item(i);
+ String v = n.getNodeValue();
+ if(v != null){
+ buff.append(' ' + n.getNodeName() + "=\"" + HTMLUtilities.escape(v) + "\"");
+ }
+ }
+
+ boolean emptyElem = element.getChildNodes().getLength() == 0;
+ if(emptyElem){
+ buff.append(" /");
+ }
+ buff.append('>');
+ if(!emptyElem ){
+ NodeList childElements = element.getChildNodes();
+ if(isBeginChangeLine(elementName)){
+ buff.append('\n');
+ }
+ for(int i=0; i<childElements.getLength(); i++){
+ Node node = childElements.item(i);
+ if( node instanceof Element){
+ expandTag( (Element)node, level+1, buff);
+ }else if (node instanceof Text){
+ String text = ((Text)node).getNodeValue();
+ if(trim && (text = text.trim()).length() == 0){
+ continue;
+ }
+ buff.append(text);
+ }
+ }
+ expandIndent(level, buff);
+ buff.append("</" + elementName + '>');
+ }
+ // already inserted change line.
+ if( isEndChangeLine(elementName) ){
+ buff.append('\n');
+ }
+ }
+
+ void expandIndent(int level, StringBuffer buff){
+ if(indent != null){
+ for(int i=0; i<level; i++){
+ buff.append(indent);
+ }
+ }
+ }
+
+ public int getDefaultExpandOption() {
+ return defaultExpandOption;
+ }
+
+ public void setDefaultExpandOption(int i) {
+ defaultExpandOption = i;
+ }
+
+}
\ No newline at end of file