1 55 package org.lateralnz.common.cli; 56 57 import java.io.BufferedReader ; 58 import java.io.OutputStream ; 59 import java.util.Iterator ; 60 import java.util.Map ; 61 import java.util.List ; 62 import java.util.LinkedList ; 63 64 import org.w3c.dom.Document ; 65 import org.w3c.dom.Node ; 66 import org.w3c.dom.NodeList ; 67 68 import org.lateralnz.common.util.XMLUtils; 69 70 public class CLTemplate { 71 private String name; 72 private LinkedList elements = new LinkedList (); 73 private CLIOHandler ioh; 74 75 public CLTemplate(Document doc, CLIOHandler ioh) throws Exception { 76 this.ioh = ioh; 77 NodeList nl; 78 NodeList nl1 = doc.getElementsByTagName("textform"); 79 if (nl1.getLength() < 1) { 80 throw new Exception ("expecting textform"); 81 } 82 else { 83 name = XMLUtils.getAttributeValue(nl1.item(0), "name", ""); 84 nl = nl1.item(0).getChildNodes(); 85 } 86 87 for (int i = 0; i < nl.getLength(); i++) { 88 Node n = nl.item(i); 89 String nodename = n.getNodeName(); 90 if (nodename.equals("input")) { 91 String type = XMLUtils.getAttributeValue(n, "type", "text"); 92 String iname = XMLUtils.getAttributeValue(n, "name", ""); 93 Node tn = XMLUtils.getNamedNode(n, "text"); 94 List l = XMLUtils.getNodesByName(n, "message"); 95 96 elements.add(new EInput(name, iname, type, tn.getFirstChild().getNodeValue(), l)); 97 } 98 else if (nodename.equals("p")) { 99 if (n.getFirstChild() != null) { 100 elements.add(new EParagraph(n.getFirstChild().getNodeValue())); 101 } 102 else { 103 elements.add(new EParagraph("")); 104 } 105 } 106 else if (nodename.equals("output")) { 107 String oname = XMLUtils.getAttributeValue(n, "name", ""); 108 String text = ""; 109 if (n.getFirstChild() != null) { 110 text = n.getFirstChild().getNodeValue(); 111 } 112 elements.add(new EOutput(oname, text)); 113 } 114 } 115 } 116 117 public boolean process(BufferedReader in, OutputStream out, Map ctx, CLValidator validator, boolean forceNoPrompt) throws Exception { 118 Iterator iter = elements.iterator(); 119 boolean doPrompt = false; 120 int rtn = 0; 121 while (iter.hasNext()) { 122 CLElement elem = (CLElement)iter.next(); 123 if (!iter.hasNext() && !forceNoPrompt) { 124 doPrompt = true; 125 } 126 rtn = elem.process(in, out, ctx, ioh, validator, doPrompt); 127 if (rtn != 0) { 128 return false; 129 } 130 } 131 132 int valid = Integer.MIN_VALUE; 133 if (validator != null) { 134 valid = validator.validate(ctx, name, null); 135 } 136 137 if (valid != 0 && valid != Integer.MIN_VALUE) { 138 return false; 139 } 140 else { 141 return true; 142 } 143 } 144 145 146 } | Popular Tags |