final String localName,
final Attributes attrs,
final ExtensibleXmlParser parser) throws SAXException {
parser.startElementBuilder( localName,
attrs );
TypeObject typeable = (TypeObject) parser.getParent();
final String name = attrs.getValue("name");
emptyAttributeCheck(localName, "name", name, parser);
DataType dataType = null;
try {
dataType = (DataType) Class.forName(name).newInstance();
// TODO make this pluggable so datatypes can read in other properties as well
if (dataType instanceof ObjectDataType) {
final String className = attrs.getValue("className");
emptyAttributeCheck(localName, "className", className, parser);
((ObjectDataType) dataType).setClassName(className);
}
} catch (ClassNotFoundException e) {
throw new SAXParseException(
"Could not find datatype " + name, parser.getLocator());
} catch (InstantiationException e) {
throw new SAXParseException(
"Could not instantiate datatype " + name, parser.getLocator());
} catch (IllegalAccessException e) {
throw new SAXParseException(
"Could not access datatype " + name, parser.getLocator());
}
typeable.setType(dataType);
return dataType;
}