* @throws NameException if the definition contains an
* illegal name
*/
private NodeTypeDef getNodeTypeDef()
throws InvalidNodeTypeDefException, NameException, NamespaceException {
NodeTypeDef type = new NodeTypeDef();
type.setName(resolver.getQName(
walker.getAttribute(Constants.NAME_ATTRIBUTE)));
type.setMixin(Boolean.valueOf(
walker.getAttribute(Constants.ISMIXIN_ATTRIBUTE))
.booleanValue());
type.setOrderableChildNodes(Boolean.valueOf(
walker.getAttribute(Constants.HASORDERABLECHILDNODES_ATTRIBUTE))
.booleanValue());
type.setAbstract(Boolean.valueOf(
walker.getAttribute(Constants.ISABSTRACT_ATTRIBUTE))
.booleanValue());
type.setQueryable(Boolean.valueOf(
walker.getAttribute(Constants.ISQUERYABLE_ATTRIBUTE))
.booleanValue());
String primaryItemName =
walker.getAttribute(Constants.PRIMARYITEMNAME_ATTRIBUTE);
if (primaryItemName != null && primaryItemName.length() > 0) {
type.setPrimaryItemName(
resolver.getQName(primaryItemName));
}
// supertype declarations
if (walker.enterElement(Constants.SUPERTYPES_ELEMENT)) {
List supertypes = new ArrayList();
while (walker.iterateElements(Constants.SUPERTYPE_ELEMENT)) {
supertypes.add(
resolver.getQName(walker.getContent()));
}
type.setSupertypes((Name[])
supertypes.toArray(new Name[supertypes.size()]));
walker.leaveElement();
}
// property definitions
List properties = new ArrayList();
while (walker.iterateElements(Constants.PROPERTYDEFINITION_ELEMENT)) {
PropDefImpl def = getPropDef();
def.setDeclaringNodeType(type.getName());
properties.add(def);
}
type.setPropertyDefs((PropDef[])
properties.toArray(new PropDef[properties.size()]));
// child node definitions
List nodes = new ArrayList();
while (walker.iterateElements(Constants.CHILDNODEDEFINITION_ELEMENT)) {
NodeDefImpl def = getChildNodeDef();
def.setDeclaringNodeType(type.getName());
nodes.add(def);
}
type.setChildNodeDefs((NodeDef[])
nodes.toArray(new NodeDef[nodes.size()]));
return type;
}