1 package com.instantbank.collections.main.web; 2 3 import java.util.Collection; 4 import java.util.Iterator; 5 import java.util.Vector; 6 import javax.servlet.jsp.PageContext; 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.tagext.BodyTagSupport; 9 import oracle.xml.parser.v2.XMLDocument; 10 import oracle.xml.parser.v2.XMLNode; 11 import org.w3c.dom.Node; 12 import org.w3c.dom.NodeList; 13 14 public class NodeIteratorTag extends BodyTagSupport { 15 private Collection collection; 16 private boolean isRoot = false; 17 private Iterator iterator; 18 private int maxRows = 0; 19 private String name = ""; 20 private Node node; 21 private int rowCount = 0; 22 23 24 public void setId(String id) { 25 this.id = id; 26 } 27 28 29 public void setMaxRows(int maxRows) { 30 this.maxRows = maxRows; 31 } 32 33 34 public void setName(String name) { 35 this.name = name; 36 } 37 38 39 public void setNode(Node node) { 40 this.node = node; 41 } 42 43 44 public int doStartTag() throws JspException { 45 Node parent = node; 46 XMLDocument root = null; 47 48 try { 49 if(node instanceof XMLDocument) { 50 root = (XMLDocument)node; 51 parent = root.getDocumentElement(); 52 } 53 if(name.equals("")) { 54 collection = getCollection(parent.getChildNodes()); 55 } 56 else { 57 NodeList l; 58 l = ((XMLNode)parent).selectNodes(name); 59 collection = getCollection(((XMLNode)parent).selectNodes(name)); 60 } 61 } 62 catch(Exception e) { 63 throw new JspException(e.getMessage()); 64 } 65 rowCount = 0; 66 return collection.size() > 0 ? EVAL_BODY_TAG : SKIP_BODY; 67 } 68 69 70 public void doInitBody() throws JspException { 71 Node obj; 72 73 iterator = collection.iterator(); 74 obj = (Node)iterator.next(); 75 pageContext.setAttribute(this.getId(), obj, PageContext.PAGE_SCOPE); 76 } 77 78 79 public int doAfterBody() throws JspException { 80 Node obj; 81 82 rowCount++; 83 if(iterator.hasNext() && (maxRows == 0 || rowCount < maxRows)) { 84 obj = (Node)iterator.next(); 85 pageContext.setAttribute(this.getId(), obj, PageContext.PAGE_SCOPE); 86 return EVAL_BODY_TAG; 87 } 88 else { 89 try { 90 getBodyContent().writeOut(getPreviousOut()); 91 } 92 catch(java.io.IOException e) { 93 throw new JspException(e.getMessage()); 94 } 95 return SKIP_BODY; 96 } 97 } 98 99 100 public void release() { 101 node = null; 102 maxRows = 0; 103 } 104 105 106 private Collection getCollection(NodeList list) { 107 Vector vector = new Vector(); 108 109 int length = list.getLength(); 110 for(int i = 0; i < length; ++i) { 111 vector.addElement(list.item(i)); 112 } 113 return vector; 114 } 115 } 116 117