defs/AttributeDef.java
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- AttributeDef
- appendQueries
- getNodeValue
- getCode
- getName
- getAltName
- getStatus
- getDescription
- getFormat
- getEnum
- getChoice
- getNumber
- getKeytype
- getUpdate
- getKeytype2
- getKeytype3
- getForeign
- getInverse
- getPrimary
- getQueries
- setChoice
- setNumber
- clone
- toString
import java.util.*;
import org.w3c.dom.*;
import com.sun.xml.tree.*;
/**
* RIPE attribute.
*
* @author ottrey@ripe.net
* @version $Version$
*
*/
public class AttributeDef implements Cloneable {
/* [<][>][^][v][top][bottom][index][help] */
final static int QI_SQL = 1;
final static int QI_RADIX = 2;
private String name;
private String altName;
private String code;
private String status;
private String description;
private String format;
private boolean lookup;
private boolean inverse;
private boolean primary;
private String foreign;
private String keytype;
private String update;
private String choice;
private String number;
private Vector queries;
// -----------------oOo-----------------
// Constructors
// -----------------oOo-----------------
/**
* Creates a RIPE attribute.
*
* @author ottrey@ripe.net
* @version $Version$
*
* @param obj The node from which a RIPE attribute is made.
*
* NOTE: I don't know why Node.getNodeValue() isn't working.
* description = tw.getNextElement("description").getNodeValue();
* @see getNodeValue
*/
public AttributeDef(Node obj) {
name = obj.getAttributes().getNamedItem("name").getNodeValue();
code = obj.getAttributes().getNamedItem("code").getNodeValue();
status = obj.getAttributes().getNamedItem("status").getNodeValue();
// Blindly ask for the optional items.
try {
altName = obj.getAttributes().getNamedItem("altName").getNodeValue();
}
catch (NullPointerException e) {
altName = new String();
// Throw the exception away. :-)
}
// Prepare to walk the tree.
TreeWalker tw = new TreeWalker(obj);
// Get the "description" node.
description = getNodeValue(tw.getNextElement("description"));
// Get the "format" node.
format = getNodeValue(tw.getNextElement("format"));
// Initialize
foreign = new String();
lookup = false;
inverse = false;
primary = false;
update = new String();
queries = new Vector();
Node kn = tw.getNextElement("keys");
if (kn != null) {
String searchable = kn.getAttributes().getNamedItem("searchable").getNodeValue();
inverse = searchable.equals("inverse");
lookup = searchable.equals("lookup");
TreeWalker fw = new TreeWalker(kn);
Node f = fw.getNextElement("foreign");
if (f != null) {
foreign = f.getAttributes().getNamedItem("value").getNodeValue();
}
TreeWalker pw = new TreeWalker(kn);
Node p = pw.getNextElement("primary");
if (p != null) {
primary = true;
}
// Get the updates.
TreeWalker uw = new TreeWalker(kn);
Node un = uw.getNextElement("update");
if (un != null) {
update = getNodeValue(un);
}
// Get the queries.
TreeWalker qw = new TreeWalker(kn);
Node qsn = qw.getNextElement("queries");
appendQueries(queries, qsn, "sql");
appendQueries(queries, qsn, "radix");
}
// Now check cominations.
// XXX TODO
} // AttributeDef()
private void appendQueries(Vector queries, Node qsn, String qrytype) {
/* [<][>][^][v][top][bottom][index][help] */
if (qsn != null) {
TreeWalker qsw;
Node q;
qsw = new TreeWalker(qsn);
while ((q = qsw.getNextElement(qrytype)) != null) {
String keytype = q.getAttributes().getNamedItem("keytype").getNodeValue();
// Blindly get the optional values.
String clars = new String();
try {
clars = q.getAttributes().getNamedItem("class").getNodeValue();
}
catch (NullPointerException e) {
}
String space = new String();
try {
space = q.getAttributes().getNamedItem("space").getNodeValue();
}
catch (NullPointerException e) {
}
String family = new String();
try {
family = q.getAttributes().getNamedItem("family").getNodeValue();
}
catch (NullPointerException e) {
}
String sqlQuery = getNodeValue(q);
Query query = new Query(qrytype, lookup, keytype, code, clars, sqlQuery, space, family);
queries.addElement(query);
}
}
} // getQueries()
/**
* Aaaargh I shouldn't have to write this. :-(
*
* @param node
* @return The value of the node.
* @see AttributeDef
*
*/
private String getNodeValue(Node node) {
/* [<][>][^][v][top][bottom][index][help] */
String result = new String();
String nodeStr = node.toString();
int startIndex = nodeStr.indexOf('>') + 1;
int endIndex = nodeStr.lastIndexOf('<') - 1;
if ((startIndex < endIndex) && (startIndex > 0)) {
result = nodeStr.substring(startIndex, endIndex);
}
return result;
} // getNodeValue()
public String getCode() {
/* [<][>][^][v][top][bottom][index][help] */
return code;
} // getCode()
public String getName() {
/* [<][>][^][v][top][bottom][index][help] */
return name;
} // getName()
public String getAltName() {
/* [<][>][^][v][top][bottom][index][help] */
return altName;
} // getAltName()
public String getStatus() {
/* [<][>][^][v][top][bottom][index][help] */
return status;
} // getStatus()
public String getDescription() {
/* [<][>][^][v][top][bottom][index][help] */
return description;
} // getDescription()
public String getFormat() {
/* [<][>][^][v][top][bottom][index][help] */
return format;
} // getFormat()
public String getEnum() {
/* [<][>][^][v][top][bottom][index][help] */
return new String("A_" + code).toUpperCase();
} // getEnum()
public String getChoice() {
/* [<][>][^][v][top][bottom][index][help] */
return choice;
} // getChoice()
public String getNumber() {
/* [<][>][^][v][top][bottom][index][help] */
return number;
} // getNumber()
public String getKeytype() {
/* [<][>][^][v][top][bottom][index][help] */
return keytype;
} // getKeytype()
public String getUpdate() {
/* [<][>][^][v][top][bottom][index][help] */
return update;
} // getUpdate()
public String getKeytype2() {
/* [<][>][^][v][top][bottom][index][help] */
String result = new String();
if (!lookup && !inverse && !primary) {
result = " ";
}
else if (!lookup && inverse && !primary) {
result = "inverse key";
}
else if (lookup && !inverse && !primary) {
result = "lookup key";
}
else if (!lookup && !inverse && primary) {
result = "primary key";
}
else if (lookup && !inverse && primary) {
result = "primary/look-up key";
}
return result;
} // getKeytype()
public String getKeytype3() {
/* [<][>][^][v][top][bottom][index][help] */
String result = new String();
if (primary) {
result = "[P]";
}
else {
result = " ";
}
if (inverse) {
result += "[I]";
}
else if (lookup) {
result += "[L]";
}
else {
result += " ";
}
return result;
} // getKeytype()
public String getForeign() {
/* [<][>][^][v][top][bottom][index][help] */
return foreign;
} // getForeign()
public boolean getInverse() {
/* [<][>][^][v][top][bottom][index][help] */
return inverse;
} // getInverse()
public boolean getPrimary() {
/* [<][>][^][v][top][bottom][index][help] */
return primary;
} // getPrimary()
public Vector getQueries() {
/* [<][>][^][v][top][bottom][index][help] */
return queries;
} // getQueries()
public boolean setChoice(String choice) {
/* [<][>][^][v][top][bottom][index][help] */
boolean result=true;
this.choice = choice;
return result;
} // setChoice()
public boolean setNumber(String number) {
/* [<][>][^][v][top][bottom][index][help] */
boolean result=true;
this.number = number;
return result;
} // setNumber()
public Object clone() throws CloneNotSupportedException {
/* [<][>][^][v][top][bottom][index][help] */
return (AttributeDef)super.clone();
} // clone()
/*
public boolean equals(String code) {
return code.equals(code);
} // equals()
*/
public String toString() {
/* [<][>][^][v][top][bottom][index][help] */
return new String("ripe attribute={" +
"\n\tname=" + name +
"\n\taltName=" + altName +
"\n\tcode=" + code +
"\n\tstatus=" + status +
"\n\tkeytype=" + keytype +
"\n\tdescription=" + description +
"\n\tformat=" + format +
"\n\tchoice=" + choice +
"\n\tnumber=" + number +
"\n}");
} // toString()
} // AttributeDef