1 package comum.util; 2 3 /** 4 * Classe responsável pela geração de arquivos XML, obedecendo os respectivos padrões. 5 * @author rodrigo.hjort 6 */ 7 public class XmlBuilder { 8 9 //nível no documento 10 private int level = 0; 11 12 //texto temporário para o XML 13 private StringBuffer sb; 14 15 /** 16 * Construtor da classe. 17 */ 18 public XmlBuilder() { 19 sb = new StringBuffer(); 20 sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"); 21 } 22 23 /** 24 * Retorna texto referente ao XML.<br> 25 * 26 * @author N/C 27 * @since N/C 28 * @version N/C 29 * @return StringBuffer - texto referente ao XML 30 */ 31 public StringBuffer toStringBuffer() { 32 return(sb); 33 } 34 35 /** 36 * Inclui um novo nó, fechando-o em seguida. Ex:<p> 37 * <blockquote><pre> 38 * <periodo/> 39 * </pre></blockquote> 40 * 41 * @author N/C 42 * @since N/C 43 * @version N/C 44 * @param string name - nome do nó 45 */ 46 public void addClosedNode(String name) { 47 sb.append(getTabs() + "<" + name + "/>\n"); 48 } 49 50 /** 51 * Inclui um novo nó com campos, fechando-o em seguida. Ex:<p> 52 * <blockquote><pre> 53 * <cabecalho data="03/01/2005" anoletivo="2005"/> 54 * </pre></blockquote> 55 * 56 * @author N/C 57 * @since N/C 58 * @version N/C 59 * @param String name - nome do nó 60 * @param String fields 61 */ 62 public void addClosedNode(String name, String fields) { 63 sb.append(getTabs() + "<" + name + " " + fields + "/>\n"); 64 } 65 66 /** 67 * Inclui um novo nó e aumenta o nível no documento.<br> 68 * Ex:<p> 69 * <blockquote><pre> 70 * <dados> 71 * </pre></blockquote> 72 * 73 * @author N/C 74 * @since N/C 75 * @version N/C 76 * @param String name - nome do nó 77 */ 78 public void addNode(String name) { 79 sb.append(getTabs() + "<" + name + ">\n"); 80 level++; 81 } 82 83 /** 84 * Inclui um novo nó com campos e aumenta o nível no documento. Ex:<p> 85 * <blockquote><pre> 86 * <turma codigo="3" nome="A"> 87 * </pre></blockquote> 88 * 89 * @author N/C 90 * @since N/C 91 * @version N/C 92 * @param String name - nome do nó 93 * @param String fields 94 */ 95 public void addNode(String name, String fields) { 96 sb.append(getTabs() + "<" + name + " " + fields + ">\n"); 97 level++; 98 } 99 100 /** 101 * Inclui um novo nó com valor, fechando-o em seguida. Ex:<p> 102 * <blockquote><pre> 103 * <curso>ENS MEDIO - E.J.A. Pressencial</curso> 104 * </pre></blockquote> 105 * 106 * @author N/C 107 * @since N/C 108 * @version N/C 109 * @param String name - nome do nó 110 * @param String value 111 */ 112 public void addAndCloseNode(String name, String value) { 113 sb.append(getTabs() + "<" + name + ">" + value + "</" + name + ">\n"); 114 } 115 116 /** 117 * Fecha um novo nó e diminui o nível no documento. Ex:<p> 118 * <blockquote><pre> 119 * </dados> 120 * </pre></blockquote> 121 * 122 * @author N/C 123 * @since N/C 124 * @version N/C 125 * @param String name - nome do nó 126 */ 127 public void closeNode(String name) { 128 level--; 129 sb.append(getTabs() + "</" + name + ">\n"); 130 } 131 132 /** 133 * Uso interno. 134 * 135 * @author N/C 136 * @since N/C 137 * @version N/C 138 * @return String - o número de tabulações necessário de acordo com o nível no documento 139 */ 140 private String getTabs() { 141 String ret = ""; 142 for (int ii = 0; ii < level; ii++) 143 ret += "\t"; 144 return(ret); 145 } 146 147 /** 148 * Normaliza Chars:<br> 149 * Ex.:<br> 150 * de '<' para "<"<br> 151 * 152 * @author N/C 153 * @since N/C 154 * @version N/C 155 * @param String s 156 * @param StringBuffer str 157 * @param int i 158 */ 159 public void normalizeChars(String s, StringBuffer str, int i) { 160 Util.normalizeChars(s, str, i); 161 } 162 163 /** 164 * Normaliza Enter.<br> 165 * 166 * @author N/C 167 * @since N/C 168 * @version N/C 169 * @param String s 170 * @param StringBuffer str 171 * @param int i 172 */ 173 public void normalizeEnter(String s, StringBuffer str, int i) { 174 Util.normalizeEnter(s, str, i); 175 } 176 177 /** Normaliza o String para apresenta-lo em HTML sem retirar o retorno de linha. 178 * 179 * @author N/C 180 * @since N/C 181 * @version N/C 182 * @param String s 183 * @return String 184 */ 185 public String normalize(String s) { 186 return Util.normalize(s); 187 } 188 189 }