1 33 34 package com.icesoft.faces.util; 35 36 import org.w3c.dom.NamedNodeMap ; 37 import org.w3c.dom.Node ; 38 import org.w3c.dom.NodeList ; 39 40 import javax.faces.component.UIComponent; 41 import javax.faces.context.ResponseWriter; 42 import java.io.IOException ; 43 44 public class HalterDump { 45 private UIComponent component; 46 private ResponseWriter writer; 47 private boolean halt = false; 48 private boolean resume = true; 49 private Node rootNode; 50 private Node halter; 51 private Node resumer; 52 53 public HalterDump(ResponseWriter writer, UIComponent component, Node root) { 54 this.component = component; 55 this.writer = writer; 56 this.rootNode = root; 57 } 58 59 60 public void streamWrite(Node halter) throws IOException { 61 this.halter = halter; 62 halt = false; 63 dumpNode(rootNode); 64 } 65 66 public void dumpNode(Node node) throws IOException { 67 if (halt) { 68 return; 69 } 70 if (node.equals(halter)) { 71 halt = true; 72 resumer = halter; 73 halter = null; 74 } 75 76 if (resume) { 77 startNode(node); 78 } 79 80 if (halt) { 81 resume = false; 82 return; 83 } 84 85 NodeList children = node.getChildNodes(); 86 int length = children.getLength(); 87 for (int i = 0; i < length; i++) { 88 Node nextChildNode = children.item(i); 89 dumpNode(nextChildNode); 90 } 91 92 if (node.equals(resumer)) { 93 resume = true; 94 halt = false; 95 } 96 97 if (halt) { 98 resume = false; 99 return; 100 } 101 102 if (resume) { 103 endNode(node); 104 } 105 106 } 107 108 private void startNode(Node node) throws IOException { 109 switch (node.getNodeType()) { 110 111 case Node.DOCUMENT_NODE: 112 break; 114 115 case Node.ELEMENT_NODE: 116 String name = node.getNodeName(); 117 118 writer.startElement(node.getNodeName().toLowerCase(), 120 component); 121 NamedNodeMap attributes = node.getAttributes(); 122 123 for (int i = 0; i < attributes.getLength(); i++) { 124 Node current = attributes.item(i); 125 writer.writeAttribute(current.getNodeName(), 127 current.getNodeValue(), 128 current.getNodeName()); 129 } 130 break; 131 132 case Node.TEXT_NODE: 133 writer.writeText(node.getNodeValue(), "text"); 134 break; 135 } 136 } 137 138 private void endNode(Node node) throws IOException { 139 switch (node.getNodeType()) { 140 141 case Node.DOCUMENT_NODE: 142 break; 144 145 case Node.ELEMENT_NODE: 146 String name = node.getNodeName(); 147 148 writer.endElement(node.getNodeName().toLowerCase()); 149 break; 150 151 case Node.TEXT_NODE: 152 break; 153 } 154 } 155 156 } 157 | Popular Tags |