cp = (ConstrainedProperty)constrainedProperties.get(property);
}
else {
Class<?> propertyType = classPropertyFetcher.getPropertyType(property);
if (propertyType == null) {
throw new MissingMethodException(property, targetClass, new Object[]{attributes}, true);
}
cp = new ConstrainedProperty(targetClass, property, propertyType);
cp.setOrder(order++);
constrainedProperties.put(property, cp);
}
if (cp.getPropertyType() == null) {
if (!IMPORT_FROM_CONSTRAINT.equals(name)) {
GrailsUtil.warn("Property [" + cp.getPropertyName() + "] not found in domain class " +
targetClass.getName() + "; cannot apply constraints: " + attributes);
}
return cp;
}
for (Object o : attributes.keySet()) {
String constraintName = (String) o;
final Object value = attributes.get(constraintName);
if (SHARED_CONSTRAINT.equals(constraintName)) {
if (value != null) {
sharedConstraints.put(property, value.toString());
}
continue;
}
if (cp.supportsContraint(constraintName)) {
cp.applyConstraint(constraintName, value);
}
else {
if (ConstrainedProperty.hasRegisteredConstraint(constraintName)) {
// constraint is registered but doesn't support this property's type
GrailsUtil.warn("Property [" + cp.getPropertyName() + "] of domain class " +
targetClass.getName() + " has type [" + cp.getPropertyType().getName() +
"] and doesn't support constraint [" + constraintName +
"]. This constraint will not be checked during validation.");
}
else {
// in the case where the constraint is not supported we still retain meta data
// about the constraint in case its needed for other things
cp.addMetaConstraint(constraintName, value);
}
}
}
return cp;
}
catch(InvalidPropertyException ipe) {
throw new MissingMethodException((String)name,targetClass,new Object[]{ attributes});
}
}