* @throws NameException if the definition contains an
* illegal name
*/
private PropDefImpl getPropDef()
throws InvalidNodeTypeDefException, NameException, NamespaceException {
PropDefImpl def = new PropDefImpl();
String name = walker.getAttribute(Constants.NAME_ATTRIBUTE);
if (name.equals("*")) {
def.setName(ItemDef.ANY_NAME);
} else {
def.setName(resolver.getQName(name));
}
// simple attributes
def.setAutoCreated(Boolean.valueOf(
walker.getAttribute(Constants.AUTOCREATED_ATTRIBUTE))
.booleanValue());
def.setMandatory(Boolean.valueOf(
walker.getAttribute(Constants.MANDATORY_ATTRIBUTE))
.booleanValue());
def.setProtected(Boolean.valueOf(
walker.getAttribute(Constants.PROTECTED_ATTRIBUTE))
.booleanValue());
def.setOnParentVersion(OnParentVersionAction.valueFromName(
walker.getAttribute(Constants.ONPARENTVERSION_ATTRIBUTE)));
def.setMultiple(Boolean.valueOf(
walker.getAttribute(Constants.MULTIPLE_ATTRIBUTE))
.booleanValue());
def.setRequiredType(PropertyType.valueFromName(
walker.getAttribute(Constants.REQUIREDTYPE_ATTRIBUTE)));
// value constraints
if (walker.enterElement(Constants.VALUECONSTRAINTS_ELEMENT)) {
List constraints = new ArrayList();
int type = def.getRequiredType();
while (walker.iterateElements(Constants.VALUECONSTRAINT_ELEMENT)) {
String constraint = walker.getContent();
try {
constraints.add(ValueConstraint.create(
type, constraint.trim(), resolver));
} catch (InvalidConstraintException e) {
throw new InvalidNodeTypeDefException(
"Invalid value constraint " + constraint, e);
}
}
def.setValueConstraints((ValueConstraint[]) constraints.toArray(
new ValueConstraint[constraints.size()]));
walker.leaveElement();
}
// default values
if (walker.enterElement(Constants.DEFAULTVALUES_ELEMENT)) {
List values = new ArrayList();
int type = def.getRequiredType();
if (type == PropertyType.UNDEFINED) {
type = PropertyType.STRING;
}
while (walker.iterateElements(Constants.DEFAULTVALUE_ELEMENT)) {
String value = walker.getContent();
try {
values.add(InternalValue.create(ValueHelper.convert(
value, type, ValueFactoryImpl.getInstance()), resolver));
} catch (RepositoryException e) {
throw new InvalidNodeTypeDefException(
"Unable to create default value: " + value, e);
}
}
def.setDefaultValues((InternalValue[])
values.toArray(new InternalValue[values.size()]));
walker.leaveElement();
}
return def;