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 }