defs/AttributeDef.java
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- AttributeDef
- appendQueries
- getTextFromNode
- getNodeRawValue
- getCode
- getName
- getAltName
- getStatus
- getDescription
- getFormat
- getEnum
- getChoice
- getNumber
- getKeytype
- getInsert
- getInsertQ_type
- getUpdate
- getUpdateQ_type
- getDummy
- getDummyQ_type
- getSelect
- getSelectQ_type
- getKeytype2
- getKeytype3
- getForeign
- getInverse
- getPrimary
- getQueries
- setChoice
- setNumber
- clone
- toString
1 import java.util.*;
2 import org.w3c.dom.*;
3 import com.sun.xml.tree.*;
4
5 /**
6 * RIPE attribute.
7 *
8 * @author ottrey@ripe.net
9 * @version $Version$
10 *
11 */
12 public class AttributeDef implements Cloneable {
/* [<][>][^][v][top][bottom][index][help] */
13
14 final static int QI_SQL = 1;
15 final static int QI_RADIX = 2;
16
17 private String name;
18 private String altName;
19 private String code;
20 private String status;
21
22 private String description;
23 private String format;
24
25 private boolean lookup;
26 private boolean inverse;
27 private boolean primary;
28 private String foreign;
29 private String keytype;
30
31 private String insert;
32 private String insertQ_type;
33 private String update;
34 private String updateQ_type;
35 private String dummy;
36 private String dummyQ_type;
37 private String select;
38 private String selectQ_type;
39
40 private String choice;
41 private String number;
42
43 private Vector queries;
44
45 // -----------------oOo-----------------
46 // Constructors
47 // -----------------oOo-----------------
48 /**
49 * Creates a RIPE attribute.
50 *
51 * @author ottrey@ripe.net
52 * @version $Version$
53 *
54 * @param obj The node from which a RIPE attribute is made.
55 *
56 */
57 public AttributeDef(Node obj) {
58 name = obj.getAttributes().getNamedItem("name").getNodeValue();
59 code = obj.getAttributes().getNamedItem("code").getNodeValue();
60 status = obj.getAttributes().getNamedItem("status").getNodeValue();
61
62 // Blindly ask for the optional items.
63 try {
64 altName = obj.getAttributes().getNamedItem("altName").getNodeValue();
65 }
66 catch (NullPointerException e) {
67 altName = new String();
68 // Throw the exception away. :-)
69 }
70
71 // Prepare to walk the tree.
72 TreeWalker tw = new TreeWalker(obj);
73
74 // Get the "description" node.
75 description = getNodeRawValue(tw.getNextElement("description"));
76
77 // Get the "format" node.
78 format = getNodeRawValue(tw.getNextElement("format"));
79
80 // Initialize
81 foreign = new String();
82 lookup = false;
83 inverse = false;
84 primary = false;
85
86 insert = new String();
87 insertQ_type = new String("UD_NULL_");
88 update = new String();
89 updateQ_type = new String("UD_NULL_");
90 dummy = new String();
91 dummyQ_type = new String("UD_NULL_");
92 select = new String();
93 selectQ_type = new String("UD_NULL_");
94
95 queries = new Vector();
96
97 Node rp = tw.getNextElement("representation");
98 if (rp != null) {
99 // Get the insert.
100 Node in = (new TreeWalker(rp)).getNextElement("insert");
101 if (in != null) {
102 insert = getTextFromNode(in);
103 if( insert.length() > 0 ) {
104 insert = " " + insert + " ";
105 }
106 try {
107 insertQ_type = in.getAttributes().getNamedItem("qtype").getNodeValue().toUpperCase();
108 }
109 catch (NullPointerException e) {
110 }
111 }
112
113 // Get the updates.
114 Node un = (new TreeWalker(rp)).getNextElement("update");
115 if (un != null) {
116 update = getTextFromNode(un);
117 if( update.length() > 0 ) {
118 update = " " + update + " ";
119 }
120 try {
121 updateQ_type = un.getAttributes().getNamedItem("qtype").getNodeValue().toUpperCase();
122 }
123 catch (NullPointerException e) {
124 }
125 }
126
127 // Get the dummies.
128 Node dn = (new TreeWalker(rp)).getNextElement("dummy");
129 if (dn != null) {
130 dummy = getTextFromNode(dn);
131 if( dummy.length() > 0 ) {
132 dummy = " " + dummy + " ";
133 }
134 try {
135 dummyQ_type = dn.getAttributes().getNamedItem("qtype").getNodeValue().toUpperCase();
136 }
137 catch (NullPointerException e) {
138 }
139 }
140
141 // Get the selects.
142 Node sn = (new TreeWalker(rp)).getNextElement("select");
143 if (sn != null) {
144 select = getTextFromNode(sn);
145 if( select.length() > 0 ) {
146 select = " " + select + " ";
147 }
148 try {
149 selectQ_type = sn.getAttributes().getNamedItem("qtype").getNodeValue().toUpperCase();
150 }
151 catch (NullPointerException e) {
152 }
153 }
154 } // rp!=NULL
155
156 Node kn = tw.getNextElement("keys");
157 if (kn != null) {
158 String searchable = kn.getAttributes().getNamedItem("searchable").getNodeValue();
159 inverse = searchable.equals("inverse");
160 lookup = searchable.equals("lookup");
161
162 TreeWalker fw = new TreeWalker(kn);
163 Node f = fw.getNextElement("foreign");
164 if (f != null) {
165 foreign = f.getAttributes().getNamedItem("value").getNodeValue();
166 }
167
168 TreeWalker pw = new TreeWalker(kn);
169 Node p = pw.getNextElement("primary");
170 if (p != null) {
171 primary = true;
172 }
173
174 // Get the queries.
175 Node qsn = (new TreeWalker(kn)).getNextElement("queries");
176
177 appendQueries(queries, qsn, "sqlquery", code);
178 appendQueries(queries, qsn, "radixquery",code);
179 }
180
181 // Now check cominations.
182 // XXX TODO
183
184 } // AttributeDef()
185
186 private void appendQueries(Vector queries, Node qsn, String qrytype, String attrcode) {
/* [<][>][^][v][top][bottom][index][help] */
187 if (qsn != null) {
188 TreeWalker qsw;
189 Node q;
190 String qryt;
191
192 qsw = new TreeWalker(qsn);
193 while ((q = qsw.getNextElement(qrytype)) != null) {
194 String keytype = q.getAttributes().getNamedItem("keytype").getNodeValue();
195
196 // Blindly get the optional values.
197 String clars = new String();
198 try {
199 clars = q.getAttributes().getNamedItem("class").getNodeValue();
200 }
201 catch (NullPointerException e) {
202 // XXX take the default
203 clars = attrcode;
204 }
205
206 String space = new String();
207 try {
208 space = q.getAttributes().getNamedItem("space").getNodeValue();
209 }
210 catch (NullPointerException e) {
211 }
212
213
214 String sqlQuery = getTextFromNode(q);
215 //System.err.println("sqlquery = " + sqlQuery);
216
217 if ( qrytype.equals("sqlquery") ) {
218 qryt = "SQL";
219 } else {
220 qryt = "RADIX";
221 }
222
223 Query query = new Query(qryt, lookup, keytype, code, clars, sqlQuery);
224 queries.addElement(query);
225 }
226 }
227 } // getQueries()
228
229
230
231 // getting parsed contents of the text node is not simple.
232 // see http://www.developerlife.com/xmljavatutorial1/default.htm
233
234 // it was made simpler by the getNodeValue(Node n) method
235 // defined below, but it operated on raw XML text fragments
236
237 private String getTextFromNode( Node q ) {
/* [<][>][^][v][top][bottom][index][help] */
238 Element query_elem = (Element) q;
239 NodeList list = query_elem.getChildNodes();
240 int size = list.getLength();
241
242 for (int i = 0 ; i < size ; i ++ ){
243 String value =
244 ((Node)list.item( i )).getNodeValue().trim();
245 //System.err.println("i=" + i + " val=" + value );
246
247 if( value.equals("") || value.equals("\r") ){
248 continue; //keep iterating
249 }
250 else{
251 return value;
252 }
253 }
254
255 return "";
256 }
257 /**
258 * Aaaargh I shouldn't have to write this. :-(
259 *
260 * @param node
261 * @return The value of the node.
262 * @see ClassDef
263 *
264 */
265 private String getNodeRawValue(Node node) {
/* [<][>][^][v][top][bottom][index][help] */
266 String nodeStr = node.toString();
267 int startIndex = nodeStr.indexOf('>') + 1;
268 int endIndex = nodeStr.lastIndexOf('<') - 1;
269
270 return nodeStr.substring(startIndex, endIndex);
271 } // getNodeRaw Value()
272
273
274
275 public String getCode() {
/* [<][>][^][v][top][bottom][index][help] */
276 return code;
277 } // getCode()
278
279 public String getName() {
/* [<][>][^][v][top][bottom][index][help] */
280 return name;
281 } // getName()
282
283 public String getAltName() {
/* [<][>][^][v][top][bottom][index][help] */
284 return altName;
285 } // getAltName()
286
287 public String getStatus() {
/* [<][>][^][v][top][bottom][index][help] */
288 return status;
289 } // getStatus()
290
291 public String getDescription() {
/* [<][>][^][v][top][bottom][index][help] */
292 return description;
293 } // getDescription()
294
295 public String getFormat() {
/* [<][>][^][v][top][bottom][index][help] */
296 return format;
297 } // getFormat()
298
299 public String getEnum() {
/* [<][>][^][v][top][bottom][index][help] */
300 return new String("A_" + code).toUpperCase();
301 } // getEnum()
302
303 public String getChoice() {
/* [<][>][^][v][top][bottom][index][help] */
304 return choice;
305 } // getChoice()
306
307 public String getNumber() {
/* [<][>][^][v][top][bottom][index][help] */
308 return number;
309 } // getNumber()
310
311 public String getKeytype() {
/* [<][>][^][v][top][bottom][index][help] */
312 return keytype;
313 } // getKeytype()
314
315 public String getInsert() {
/* [<][>][^][v][top][bottom][index][help] */
316 return insert;
317 } // getInsert()
318
319 public String getInsertQ_type() {
/* [<][>][^][v][top][bottom][index][help] */
320 return insertQ_type;
321 } // getInsertQ_type()
322
323 public String getUpdate() {
/* [<][>][^][v][top][bottom][index][help] */
324 return update;
325 } // getUpdate()
326
327 public String getUpdateQ_type() {
/* [<][>][^][v][top][bottom][index][help] */
328 return updateQ_type;
329 } // getUpdateQ_type()
330
331 public String getDummy() {
/* [<][>][^][v][top][bottom][index][help] */
332 return dummy;
333 } // getDummy()
334
335 public String getDummyQ_type() {
/* [<][>][^][v][top][bottom][index][help] */
336 return dummyQ_type;
337 } // getDummyQ_type()
338
339 public String getSelect() {
/* [<][>][^][v][top][bottom][index][help] */
340 return select;
341 } // getSelect()
342
343 public String getSelectQ_type() {
/* [<][>][^][v][top][bottom][index][help] */
344 return selectQ_type;
345 } // getSelectQ_type()
346
347 public String getKeytype2() {
/* [<][>][^][v][top][bottom][index][help] */
348 String result = new String();
349
350 if (!lookup && !inverse && !primary) {
351 result = " ";
352 }
353 else if (!lookup && !inverse && primary) {
354 result = "primary key";
355 }
356 else if (!lookup && inverse && !primary) {
357 result = "inverse key";
358 }
359 else if (!lookup && inverse && primary) {
360 result = "primary/inverse key";
361 }
362 else if ( lookup && !inverse && !primary) {
363 result = "lookup key";
364 }
365 else if ( lookup && !inverse && primary) {
366 result = "primary/look-up key";
367 }
368 else if ( lookup && inverse && !primary) {
369 result = "look-up/inverse key";
370 }
371 else if ( lookup && inverse && primary) {
372 result = "Gimmie a break!";
373 }
374
375 return result;
376 } // getKeytype()
377
378 public String getKeytype3() {
/* [<][>][^][v][top][bottom][index][help] */
379 String result = new String();
380
381 if (primary) {
382 result = "[P]";
383 }
384 else {
385 result = " ";
386 }
387
388 if (inverse) {
389 result += "[I]";
390 }
391 else if (lookup) {
392 result += "[L]";
393 }
394 else {
395 result += " ";
396 }
397
398 return result;
399 } // getKeytype()
400
401 public String getForeign() {
/* [<][>][^][v][top][bottom][index][help] */
402 return foreign;
403 } // getForeign()
404
405 public boolean getInverse() {
/* [<][>][^][v][top][bottom][index][help] */
406 return inverse;
407 } // getInverse()
408
409 public boolean getPrimary() {
/* [<][>][^][v][top][bottom][index][help] */
410 return primary;
411 } // getPrimary()
412
413 public Vector getQueries() {
/* [<][>][^][v][top][bottom][index][help] */
414 return queries;
415 } // getQueries()
416
417 public boolean setChoice(String choice) {
/* [<][>][^][v][top][bottom][index][help] */
418 boolean result=true;
419
420 this.choice = choice;
421
422 return result;
423 } // setChoice()
424
425 public boolean setNumber(String number) {
/* [<][>][^][v][top][bottom][index][help] */
426 boolean result=true;
427
428 this.number = number;
429
430 return result;
431 } // setNumber()
432
433 public Object clone() throws CloneNotSupportedException {
/* [<][>][^][v][top][bottom][index][help] */
434 return (AttributeDef)super.clone();
435 } // clone()
436
437 /*
438 public boolean equals(String code) {
439 return code.equals(code);
440 } // equals()
441 */
442
443 public String toString() {
/* [<][>][^][v][top][bottom][index][help] */
444 return new String("ripe attribute={" +
445 "\n\tname=" + name +
446 "\n\taltName=" + altName +
447 "\n\tcode=" + code +
448 "\n\tstatus=" + status +
449 "\n\tkeytype=" + keytype +
450 "\n\tdescription=" + description +
451 "\n\tformat=" + format +
452 "\n\tchoice=" + choice +
453 "\n\tnumber=" + number +
454 "\n}");
455 } // toString()
456
457
458 } // AttributeDef