blob: 44092084b4835e01c1995b8bfba692c1037c76bd [file] [log] [blame]
package org.apache.wicket.bean.validation;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IPropertyReflectionAwareModel;
import org.apache.wicket.model.PropertyModel;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Locale;
/**
* Default property resolver. This resolver supports common Wicket models like the
* {@link PropertyModel}, and other implementations of {@link IPropertyReflectionAwareModel}
*
* @author igor
*
*/
public class DefaultPropertyResolver implements IPropertyResolver
{
@Override
public Property resolveProperty(FormComponent<?> component)
{
IPropertyReflectionAwareModel<?> delegate = ValidationModelResolver.resolvePropertyModelFrom(component);
if (delegate == null)
{
return null;
}
String name;
Method getter = delegate.getPropertyGetter();
if (getter != null)
{
String methodName = getter.getName();
if (methodName.startsWith("get"))
{
name = methodName.substring(3, 4).toLowerCase(Locale.ROOT) +
methodName.substring(4);
}
else if (methodName.startsWith("is"))
{
name = methodName.substring(2, 3).toLowerCase(Locale.ROOT) +
methodName.substring(3);
}
else
{
throw new WicketRuntimeException("Invalid name for a getter method: '"
+ methodName + "'. It must start either with 'get' or 'is'.");
}
return new Property(getter.getDeclaringClass(), name);
}
Field field = delegate.getPropertyField();
if (field != null)
{
return new Property(field.getDeclaringClass(), field.getName());
}
return null;
}
}