You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2009/11/02 14:19:44 UTC
svn commit: r831892 - in
/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval:
interceptor/ storage/ util/
Author: gpetracek
Date: Mon Nov 2 13:19:44 2009
New Revision: 831892
URL: http://svn.apache.org/viewvc?rev=831892&view=rev
Log:
small bv changes
Modified:
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/interceptor/ExtValBeanValidationMetaDataExtractionInterceptor.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationEntry.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/interceptor/ExtValBeanValidationMetaDataExtractionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/interceptor/ExtValBeanValidationMetaDataExtractionInterceptor.java?rev=831892&r1=831891&r2=831892&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/interceptor/ExtValBeanValidationMetaDataExtractionInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/interceptor/ExtValBeanValidationMetaDataExtractionInterceptor.java Mon Nov 2 13:19:44 2009
@@ -20,17 +20,21 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.core.interceptor.MetaDataExtractionInterceptor;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import org.apache.myfaces.extensions.validator.core.ValidationModuleAware;
import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.storage.FacesInformationStorage;
import org.apache.myfaces.extensions.validator.beanval.BeanValidationModuleKey;
import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import javax.faces.component.UIComponent;
+import javax.faces.event.PhaseId;
import java.util.Map;
/**
@@ -68,7 +72,25 @@
*/
private void processExtValBeanValidationMetaData(UIComponent uiComponent, PropertyDetails propertyDetails)
{
- BeanValidationUtils.addMetaDataToContext(uiComponent, propertyDetails);
+ if(isRenderResponsePhase())
+ {
+ BeanValidationUtils.addMetaDataToContext(uiComponent, propertyDetails, false);
+ }
+ else
+ {
+ BeanValidationUtils.addMetaDataToContext(uiComponent, propertyDetails, true);
+ }
+ }
+
+ @ToDo(value = Priority.MEDIUM, description = "move to util class")
+ private boolean isRenderResponsePhase()
+ {
+ return PhaseId.RENDER_RESPONSE.equals(getFacesInformationStorage().getCurrentPhaseId());
+ }
+
+ private FacesInformationStorage getFacesInformationStorage()
+ {
+ return ExtValUtils.getStorage(FacesInformationStorage.class, FacesInformationStorage.class.getName());
}
public String[] getModuleKeys()
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationEntry.java?rev=831892&r1=831891&r2=831892&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationEntry.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationEntry.java Mon Nov 2 13:19:44 2009
@@ -37,9 +37,10 @@
private UIComponent component;
private List<Class> groups = new ArrayList<Class>();
private List<Object> validationTargets = new ArrayList<Object>();
- private List<String> validationTargetExpressions = new ArrayList<String>();
private boolean displayMessageInline = false;
private String customMessage = ModelValidation.DEFAULT_MESSAGE;
+
+ //the original source where the extval-bv meta-data has been found
private Object metaDataSourceObject;
private String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
@@ -86,14 +87,6 @@
}
}
- public void addValidationTargetExpression(String targetExpression)
- {
- if(!this.validationTargetExpressions.contains(targetExpression))
- {
- this.validationTargetExpressions.add(targetExpression);
- }
- }
-
/*
* generated
*/
@@ -122,11 +115,6 @@
return validationTargets;
}
- public List<String> getValidationTargetExpressions()
- {
- return validationTargetExpressions;
- }
-
public Object getMetaDataSourceObject()
{
return metaDataSourceObject;
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java?rev=831892&r1=831891&r2=831892&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java Mon Nov 2 13:19:44 2009
@@ -69,7 +69,8 @@
return "true".equalsIgnoreCase(WebXmlParameter.ACTIVATE_MULTIPLE_VIOLATION_MESSAGES_PER_FIELD);
}
- public static void addMetaDataToContext(UIComponent component, PropertyDetails propertyDetails)
+ public static void addMetaDataToContext(
+ UIComponent component, PropertyDetails propertyDetails, boolean processModelValidation)
{
String[] key = propertyDetails.getKey().split("\\.");
@@ -87,7 +88,8 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
//first property
processFieldsAndProperties(key[0] + "." + key[1],
@@ -96,14 +98,16 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
//base object (of target property)
processClass(propertyDetails.getBaseObject(),
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
//last property
processFieldsAndProperties(
@@ -113,7 +117,8 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
ExtValBeanValidationContext extValBeanValidationContext = ExtValBeanValidationContext.getCurrentInstance();
String currentViewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
@@ -134,7 +139,8 @@
List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation,
List<ModelValidationEntry> modelValidationEntryList,
- List<Class> restrictedGroupsForModelValidation)
+ List<Class> restrictedGroupsForModelValidation,
+ boolean processModelValidation)
{
Class classToInspect = objectToInspect.getClass();
while (!Object.class.getName().equals(classToInspect.getName()))
@@ -143,13 +149,15 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
processInterfaces(objectToInspect.getClass(), objectToInspect,
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
classToInspect = classToInspect.getSuperclass();
}
@@ -157,10 +165,12 @@
private static void processFieldsAndProperties(String key,
Object base,
- String property, List<Class> foundGroupsForPropertyValidation,
+ String property,
+ List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation,
List<ModelValidationEntry> modelValidationEntryList,
- List<Class> restrictedGroupsForModelValidation)
+ List<Class> restrictedGroupsForModelValidation,
+ boolean processModelValidation)
{
PropertyInformation propertyInformation = new DefaultGroupControllerScanningExtractor()
.extract(FacesContext.getCurrentInstance(), new PropertyDetails(key, base, property));
@@ -170,27 +180,59 @@
if (metaDataEntry.getValue() instanceof BeanValidation)
{
tryToProcessMetaData((BeanValidation) metaDataEntry.getValue(),
- base,
+ tryToCreateNewTarget(base, property),
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
}
else if (metaDataEntry.getValue() instanceof BeanValidation.List)
{
for (BeanValidation currentBeanValidation : ((BeanValidation.List) metaDataEntry.getValue()).value())
{
tryToProcessMetaData(currentBeanValidation,
- base,
+ tryToCreateNewTarget(base, property),
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
}
}
}
}
+ private static Object tryToCreateNewTarget(Object base, String property)
+ {
+ Object result = getValueOfProperty(base, property);
+
+ if (result == null)
+ {
+ return base;
+ }
+
+ return result;
+ }
+
+ private static Object getValueOfProperty(Object base, String property)
+ {
+ property = property.substring(0, 1).toUpperCase() + property.substring(1, property.length());
+ Method targetMethod = ReflectionUtils.tryToGetMethod(base.getClass(), "get" + property);
+
+ if (targetMethod == null)
+ {
+ targetMethod = ReflectionUtils.tryToGetMethod(base.getClass(), "is" + property);
+ }
+
+ if (targetMethod == null)
+ {
+ throw new IllegalStateException(
+ "class " + base.getClass() + " has no public get/is " + property.toLowerCase());
+ }
+ return ReflectionUtils.tryToInvokeMethod(base, targetMethod);
+ }
+
private static void processFoundGroups(ExtValBeanValidationContext extValBeanValidationContext,
String currentViewId,
String clientId,
@@ -237,7 +279,10 @@
if (modelValidationEntry.getGroups().length > 0)
{
- addTargetsForModelValidation(modelValidationEntry, propertyDetails.getBaseObject());
+ if(modelValidationEntry.getValidationTargets().isEmpty())
+ {
+ modelValidationEntry.addValidationTarget(propertyDetails.getBaseObject());
+ }
modelValidationEntry.setComponent(component);
extValBeanValidationContext.addModelValidationEntry(modelValidationEntry);
}
@@ -249,7 +294,8 @@
List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation,
List<ModelValidationEntry> modelValidationEntryList,
- List<Class> restrictedGroupsForModelValidation)
+ List<Class> restrictedGroupsForModelValidation,
+ boolean processModelValidation)
{
if (objectToInspect.getClass().isAnnotationPresent(BeanValidation.class))
{
@@ -258,7 +304,8 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
}
else if (objectToInspect.getClass().isAnnotationPresent(BeanValidation.List.class))
{
@@ -270,7 +317,8 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
}
}
}
@@ -280,7 +328,8 @@
List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation,
List<ModelValidationEntry> modelValidationEntryList,
- List<Class> restrictedGroupsForModelValidation)
+ List<Class> restrictedGroupsForModelValidation,
+ boolean processModelValidation)
{
for (Class currentInterface : currentClass.getInterfaces())
{
@@ -288,13 +337,15 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
processInterfaces(currentInterface, metaDataSourceObject,
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
}
}
@@ -303,7 +354,8 @@
List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation,
List<ModelValidationEntry> modelValidationEntryList,
- List<Class> restrictedGroupsForModelValidation)
+ List<Class> restrictedGroupsForModelValidation,
+ boolean processModelValidation)
{
for (String currentViewId : beanValidation.viewIds())
{
@@ -314,7 +366,8 @@
foundGroupsForPropertyValidation,
restrictedGroupsForPropertyValidation,
modelValidationEntryList,
- restrictedGroupsForModelValidation);
+ restrictedGroupsForModelValidation,
+ processModelValidation);
break;
}
}
@@ -331,58 +384,22 @@
List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation,
List<ModelValidationEntry> modelValidationEntryList,
- List<Class> restrictedGroupsForModelValidation)
+ List<Class> restrictedGroupsForModelValidation,
+ boolean processModelValidation)
{
- if (isModelValidation(beanValidation))
+ if (processModelValidation && isModelValidation(beanValidation))
{
addModelValidationEntry(
beanValidation, metaDataSourceObject,
modelValidationEntryList, restrictedGroupsForModelValidation);
}
- else
+ else if(!isModelValidation(beanValidation))
{
processGroups(
beanValidation, foundGroupsForPropertyValidation, restrictedGroupsForPropertyValidation);
}
}
- private static void addTargetsForModelValidation(ModelValidationEntry modelValidationEntry, Object defaultTarget)
- {
- if (isDefaultTarget(modelValidationEntry))
- {
- modelValidationEntry.addValidationTarget(defaultTarget);
- }
- else
- {
- addValidationTargets(modelValidationEntry);
- }
- }
-
- private static boolean isDefaultTarget(ModelValidationEntry modelValidationEntry)
- {
- return modelValidationEntry.getValidationTargetExpressions().size() == 1 &&
- modelValidationEntry.getValidationTargetExpressions().iterator().next()
- .equals(ModelValidation.DEFAULT_TARGET);
- }
-
- private static void addValidationTargets(ModelValidationEntry modelValidationEntry)
- {
- Object target;
- for (String modelValidationTargetExpression : modelValidationEntry.getValidationTargetExpressions())
- {
- target = resolveTarget(modelValidationEntry.getMetaDataSourceObject(), modelValidationTargetExpression);
-
- if (target == null && LOG.isErrorEnabled())
- {
- LOG.error("target unreachable - source class: " +
- modelValidationEntry.getMetaDataSourceObject().getClass().getName() +
- " target to resolve: " + modelValidationTargetExpression);
- }
-
- modelValidationEntry.addValidationTarget(target);
- }
- }
-
private static boolean isValidationPermitted(BeanValidation beanValidation)
{
ELHelper elHelper = ExtValUtils.getELHelper();
@@ -427,9 +444,19 @@
modelValidationEntry.setCustomMessage(beanValidation.modelValidation().message());
modelValidationEntry.setMetaDataSourceObject(metaDataSourceObject);
+ Object validationTarget;
for(String validationTargetExpression : beanValidation.modelValidation().validationTargets())
{
- modelValidationEntry.addValidationTargetExpression(validationTargetExpression);
+ if(ModelValidation.DEFAULT_TARGET.equals(validationTargetExpression))
+ {
+ continue;
+ }
+
+ validationTarget = tryToResolveValidationTargetExpression(validationTargetExpression);
+ if(validationTarget != null)
+ {
+ modelValidationEntry.addValidationTarget(validationTarget);
+ }
}
if (beanValidation.restrictGroups().length > 0)
@@ -437,9 +464,21 @@
restrictedGroupsForModelValidation.addAll(Arrays.asList(beanValidation.restrictGroups()));
}
+ if(modelValidationEntry.getValidationTargets().isEmpty())
+ {
+ modelValidationEntry.addValidationTarget(metaDataSourceObject);
+ }
+
modelValidationEntryList.add(modelValidationEntry);
}
+ private static Object tryToResolveValidationTargetExpression(String validationTargetExpression)
+ {
+ ValueBindingExpression valueBindingExpression = new ValueBindingExpression(validationTargetExpression);
+ return ExtValUtils.getELHelper()
+ .getValueOfExpression(FacesContext.getCurrentInstance(), valueBindingExpression);
+ }
+
private static void processGroups(BeanValidation beanValidation,
List<Class> foundGroupsForPropertyValidation,
List<Class> restrictedGroupsForPropertyValidation)
@@ -452,60 +491,6 @@
}
}
- private static Object resolveTarget(Object metaDataSourceObject, String modelValidationTargetExpression)
- {
- ELHelper elHelper = ExtValUtils.getELHelper();
-
- if (elHelper.isELTermWellFormed(modelValidationTargetExpression))
- {
- if (elHelper.isELTermValid(FacesContext.getCurrentInstance(), modelValidationTargetExpression))
- {
- return elHelper.getValueOfExpression(
- FacesContext.getCurrentInstance(), new ValueBindingExpression(modelValidationTargetExpression));
- }
- else
- {
- if (LOG.isErrorEnabled())
- {
- LOG.error("an invalid binding is used: " + modelValidationTargetExpression);
- }
- }
- }
-
- String[] properties = modelValidationTargetExpression.split("\\.");
-
- Object result = metaDataSourceObject;
- for (String property : properties)
- {
- result = getValueOfProperty(result, property);
-
- if (result == null)
- {
- return null;
- }
- }
-
- return result;
- }
-
- private static Object getValueOfProperty(Object base, String property)
- {
- property = property.substring(0, 1).toUpperCase() + property.substring(1, property.length());
- Method targetMethod = ReflectionUtils.tryToGetMethod(base.getClass(), "get" + property);
-
- if (targetMethod == null)
- {
- targetMethod = ReflectionUtils.tryToGetMethod(base.getClass(), "is" + property);
- }
-
- if (targetMethod == null)
- {
- throw new IllegalStateException(
- "class " + base.getClass() + " has no public get/is " + property.toLowerCase());
- }
- return ReflectionUtils.tryToInvokeMethod(base, targetMethod);
- }
-
public static void processConstraintViolations(FacesContext facesContext,
UIComponent uiComponent,
Object convertedObject,