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 2008/11/28 13:28:26 UTC
svn commit: r721451 - in /myfaces/extensions/validator/trunk:
core/src/main/java/org/apache/myfaces/extensions/validator/core/
core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/
core/src/main/java/org/apache/myfaces/extensions...
Author: gpetracek
Date: Fri Nov 28 04:28:25 2008
New Revision: 721451
URL: http://svn.apache.org/viewvc?rev=721451&view=rev
Log:
refactoring cross validation
Modified:
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java Fri Nov 28 04:28:25 2008
@@ -131,7 +131,7 @@
public void addValidationExceptionInterceptor(ValidationExceptionInterceptor validationExceptionInterceptor)
{
- DefaultValidationExceptionInterceptor.addComponentInitializer(validationExceptionInterceptor);
+ DefaultValidationExceptionInterceptor.addValidationExceptionInterceptor(validationExceptionInterceptor);
}
public List<ProcessedInformationRecorder> getProcessedInformationRecorders()
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java Fri Nov 28 04:28:25 2008
@@ -66,7 +66,7 @@
if(logger.isTraceEnabled())
{
logger.trace(
- "configureComponent of " + validationExceptionInterceptor.getClass().getName() + " called");
+ "afterThrowing of " + validationExceptionInterceptor.getClass().getName() + " called");
}
}
@@ -74,7 +74,7 @@
}
@UsageInformation(UsageCategory.INTERNAL)
- public static void addComponentInitializer(ValidationExceptionInterceptor validationExceptionInterceptor)
+ public static void addValidationExceptionInterceptor(ValidationExceptionInterceptor validationExceptionInterceptor)
{
synchronized (DefaultValidationExceptionInterceptor.class)
{
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java Fri Nov 28 04:28:25 2008
@@ -43,6 +43,7 @@
public abstract class AbstractAnnotationValidationStrategy extends AbstractValidatorAdapter
{
protected static final String DETAIL_MESSAGE_KEY_POSTFIX = "_detail";
+ //e.g. for injecting a message resolver via spring
private MessageResolver messageResolver;
protected String resolveMessage(String key)
@@ -58,7 +59,7 @@
return resolveMessage(getValidationErrorMsgKey(annotation));
}
- protected String getErrorMessageDetails(Annotation annotation)
+ protected String getErrorMessageDetail(Annotation annotation)
{
try
{
@@ -79,7 +80,7 @@
protected FacesMessage getValidationErrorFacesMassage(Annotation annotation)
{
return new FacesMessage(FacesMessage.SEVERITY_ERROR,
- getErrorMessageSummary(annotation), getErrorMessageDetails(annotation));
+ getErrorMessageSummary(annotation), getErrorMessageDetail(annotation));
}
protected abstract String getValidationErrorMsgKey(Annotation annotation);
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java Fri Nov 28 04:28:25 2008
@@ -147,9 +147,9 @@
}
}
- protected String getErrorMessageDetails(Annotation annotation)
+ protected String getErrorMessageDetail(Annotation annotation)
{
- String message = super.getErrorMessageDetails(annotation);
+ String message = super.getErrorMessageDetail(annotation);
if (VALIDATE_LENGTH.equals(this.violation))
{
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java Fri Nov 28 04:28:25 2008
@@ -55,7 +55,7 @@
throw new ValidatorException(new FacesMessage(
FacesMessage.SEVERITY_ERROR,
getErrorMessageSummary(annotation),
- getErrorMessageDetails(annotation).replace("{0}",
+ getErrorMessageDetail(annotation).replace("{0}",
expression)));
}
}
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java Fri Nov 28 04:28:25 2008
@@ -29,10 +29,13 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
+import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import javax.faces.context.FacesContext;
import java.util.Map;
-import java.lang.annotation.Annotation;
/**
* referencing validation targets - possible formats:
@@ -44,6 +47,8 @@
@UsageInformation(UsageCategory.INTERNAL)
public class ELCompareStrategy implements ReferencingStrategy
{
+ protected final Log logger = LogFactory.getLog(getClass());
+
public boolean evalReferenceAndValidate(
CrossValidationStorageEntry crossValidationStorageEntry,
CrossValidationStorage crossValidationStorage,
@@ -66,60 +71,27 @@
CrossValidationStorage crossValidationStorage,
AbstractCompareStrategy compareStrategy)
{
- boolean violationFound = false;
+ Map<String, ProcessedInformationEntry> keyConvertedValueMapping = CrossValidationUtils
+ .getOrInitKeyToConvertedValueMapping();
- FacesContext facesContext = FacesContext.getCurrentInstance();
+ ProcessedInformationEntry validationTargetEntry = CrossValidationUtils.resolveValidationTargetEntry(
+ keyConvertedValueMapping,
+ CrossValidationUtils.convertValueBindingExpressionToProcessedInformationKey(validationTarget),
+ crossValidationStorageEntry);
- if (compareStrategy.isViolation(crossValidationStorageEntry
- .getConvertedObject(), ExtValUtils.getELHelper().getValueOfExpression(
- facesContext, validationTarget), crossValidationStorageEntry
- .getMetaDataEntry().getValue(Annotation.class)))
+ if(validationTargetEntry != null)
{
-
- ProcessedInformationEntry validationTargetEntry;
- Map<String, ProcessedInformationEntry> valueBindingConvertedValueMapping = CrossValidationUtils
- .getOrInitKeyToConvertedValueMapping();
-
- validationTargetEntry = valueBindingConvertedValueMapping
- .get(validationTarget);
-
- CrossValidationStorageEntry tmpCrossValidationStorageEntry = null;
-
- if (validationTargetEntry != null)
- {
- tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
- //TODO test
- if (compareStrategy
- .useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry))
- {
- tmpCrossValidationStorageEntry
- .setComponent(validationTargetEntry.getComponent());
- }
- else
- {
- tmpCrossValidationStorageEntry
- .setComponent(crossValidationStorageEntry
- .getComponent());
- }
- tmpCrossValidationStorageEntry
- .setConvertedObject(validationTargetEntry
- .getConvertedValue());
- tmpCrossValidationStorageEntry
- .setValidationStrategy(compareStrategy);
- }
-
- compareStrategy
- .processTargetComponentAfterViolation(
- crossValidationStorageEntry,
- tmpCrossValidationStorageEntry);
-
- violationFound = true;
+ CrossValidationUtils
+ .crossValidateCompareStrategy(compareStrategy, crossValidationStorageEntry, validationTargetEntry);
}
-
- if (violationFound)
+ else
{
- compareStrategy
- .processSourceComponentAfterViolation(crossValidationStorageEntry);
+ if(logger.isWarnEnabled())
+ {
+ PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
+ .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
+ logger.warn("couldn't find converted object for " + propertyDetails.getKey());
+ }
}
return true;
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java Fri Nov 28 04:28:25 2008
@@ -32,7 +32,6 @@
import org.apache.commons.logging.LogFactory;
import java.util.Map;
-import java.lang.annotation.Annotation;
/**
* "[property_name]" ... local validation -> cross-component, but no cross-entity validation
@@ -65,10 +64,6 @@
{
Map<String, ProcessedInformationEntry> keyConvertedValueMapping = CrossValidationUtils
.getOrInitKeyToConvertedValueMapping();
- ProcessedInformationEntry validationTargetEntry;
-
- PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
- .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
String newKey = createTargetKey(crossValidationStorageEntry, targetKey);
if (!keyConvertedValueMapping.containsKey(newKey))
@@ -76,6 +71,9 @@
return false;
}
+ PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
+ .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
+
String sourceKey = propertyDetails.getKey();
if(!sourceKey.contains("."))
@@ -85,25 +83,23 @@
targetKey = sourceKey.substring(0, sourceKey.lastIndexOf(".") + 1) + targetKey;
- validationTargetEntry = compareStrategy.resolveValidationTargetEntry(
+ ProcessedInformationEntry validationTargetEntry = CrossValidationUtils.resolveValidationTargetEntry(
keyConvertedValueMapping, targetKey, crossValidationStorageEntry);
- if (validationTargetEntry == null)
+ if (validationTargetEntry != null)
+ {
+ CrossValidationUtils
+ .crossValidateCompareStrategy(compareStrategy, crossValidationStorageEntry, validationTargetEntry);
+ }
+ else
{
if(logger.isWarnEnabled())
{
logger.warn("couldn't find converted object for " + propertyDetails.getKey());
}
-
- return false;
}
- return tryToValidateLocally(
- crossValidationStorageEntry,
- crossValidationStorage,
- targetKey,
- compareStrategy,
- validationTargetEntry);
+ return true;
}
protected String createTargetKey(CrossValidationStorageEntry crossValidationStorageEntry, String targetKey)
@@ -120,46 +116,4 @@
.getExpressionString();
return result.substring(2, result.length() -1);
}
-
- protected boolean tryToValidateLocally(CrossValidationStorageEntry crossValidationStorageEntry,
- CrossValidationStorage crossValidationStorage,
- String targetKey,
- AbstractCompareStrategy compareStrategy,
- ProcessedInformationEntry validationTargetEntry)
- {
- boolean violationFound = false;
-
- if (compareStrategy.isViolation(crossValidationStorageEntry
- .getConvertedObject(), validationTargetEntry
- .getConvertedValue(), crossValidationStorageEntry
- .getMetaDataEntry().getValue(Annotation.class)))
- {
-
- CrossValidationStorageEntry tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
- if (compareStrategy.useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry))
- {
- tmpCrossValidationStorageEntry.setComponent(validationTargetEntry.getComponent());
- tmpCrossValidationStorageEntry.setClientId(validationTargetEntry.getClientId());
- }
- else
- {
- tmpCrossValidationStorageEntry.setComponent(crossValidationStorageEntry.getComponent());
- tmpCrossValidationStorageEntry.setClientId(crossValidationStorageEntry.getClientId());
- }
- tmpCrossValidationStorageEntry.setConvertedObject(validationTargetEntry.getConvertedValue());
- tmpCrossValidationStorageEntry.setValidationStrategy(compareStrategy);
-
- compareStrategy
- .processTargetComponentAfterViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
-
- violationFound = true;
- }
-
- if (violationFound)
- {
- compareStrategy.processSourceComponentAfterViolation(crossValidationStorageEntry);
- }
-
- return true;
- }
}
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java Fri Nov 28 04:28:25 2008
@@ -29,7 +29,6 @@
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
-import org.apache.myfaces.extensions.validator.crossval.ProcessedInformationEntry;
import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorage;
import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorageEntry;
import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.ELCompareStrategy;
@@ -39,8 +38,6 @@
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInfo;
-import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
-import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
@@ -132,7 +129,7 @@
//get validation error messages for the target component
String summary = getErrorMessageSummary(entryOfSource.getMetaDataEntry().getValue(Annotation.class), true);
- String details = getErrorMessageDetails(entryOfSource.getMetaDataEntry().getValue(Annotation.class), true);
+ String details = getErrorMessageDetail(entryOfSource.getMetaDataEntry().getValue(Annotation.class), true);
//validation target isn't bound to a component withing the current page
//(see validateFoundEntry, tryToValidateLocally and tryToValidateBindingOnly)
@@ -172,7 +169,7 @@
//get validation error messages for the current component
String summary = getErrorMessageSummary(entryOfSource.getMetaDataEntry().getValue(Annotation.class), false);
- String details = getErrorMessageDetails(entryOfSource.getMetaDataEntry().getValue(Annotation.class), false);
+ String details = getErrorMessageDetail(entryOfSource.getMetaDataEntry().getValue(Annotation.class), false);
FacesMessage message = getSourceComponentErrorMessage(
entryOfSource.getMetaDataEntry().getValue(Annotation.class), summary, details);
@@ -188,73 +185,34 @@
}
}
- //has to be public for custom referencing strategies!!!
- public FacesMessage getSourceComponentErrorMessage(Annotation annotation, String summary, String details)
+ protected FacesMessage getSourceComponentErrorMessage(Annotation annotation, String summary, String detail)
{
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary(summary);
- message.setDetail(details);
+ message.setDetail(detail);
return message;
}
- //has to be public for custom referencing strategies!!!
- public FacesMessage getTargetComponentErrorMessage(Annotation foundAnnotation, String summary, String details)
+ protected FacesMessage getTargetComponentErrorMessage(Annotation foundAnnotation, String summary, String detail)
{
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary(summary);
- message.setDetail(details);
+ message.setDetail(detail);
return message;
}
- //has to be public for custom referencing strategies!!!
- public ProcessedInformationEntry resolveValidationTargetEntry(
- Map<String, ProcessedInformationEntry> pathToConvertedValueMapping,
- String targetKey, CrossValidationStorageEntry crossValidationStorageEntry)
- {
- ProcessedInformationEntry processedInformationEntry =
- pathToConvertedValueMapping.get(targetKey);
-
- //simple case
- if (processedInformationEntry.getFurtherEntries() == null)
- {
- return processedInformationEntry;
- }
-
- PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
- .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
-
- Object targetBean = propertyDetails.getBaseObject();
-
- //process complex component entries (e.g. a table)
- //supported: cross-component but no cross-entity validation (= locale validation)
- if (processedInformationEntry.getBean().equals(targetBean))
- {
- return processedInformationEntry;
- }
-
- for (ProcessedInformationEntry entry : processedInformationEntry.getFurtherEntries())
- {
- if (entry.getBean().equals(targetBean))
- {
- return entry;
- }
- }
-
- return null;
- }
-
protected String getErrorMessageSummary(Annotation annotation, boolean isTargetComponent)
{
return resolveMessage(getValidationErrorMsgKey(annotation, isTargetComponent));
}
- protected String getErrorMessageDetails(Annotation annotation, boolean isTargetComponent)
+ protected String getErrorMessageDetail(Annotation annotation, boolean isTargetComponent)
{
try
{
@@ -277,9 +235,6 @@
return getValidationErrorMsgKey(annotation, false);
}
- /*
- * optional methods - recommended to override - have to be public for custom referencing strategies!!!
- */
/**
* the usage of this method requires a new instance
* -> in case of validation strategy beans application/singleton isn't allowed
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java Fri Nov 28 04:28:25 2008
@@ -70,13 +70,13 @@
Object convertedObject,
ValidatorException validatorException)
{
- throw new IllegalStateException("not available for cross validation");
+ throw new IllegalStateException("not available for cross validation - use processAfterCrossValidatorException");
}
@Override
protected final String getLabel(FacesContext facesContext, UIComponent uiComponent, MetaDataEntry metaDataEntry)
{
- throw new IllegalStateException("not available for cross validation - use processAfterCrossValidatorException");
+ throw new IllegalStateException("not available for cross validation");
}
@Override
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java Fri Nov 28 04:28:25 2008
@@ -135,11 +135,11 @@
}
@Override
- protected String getErrorMessageDetails(Annotation annotation, boolean isTargetComponent)
+ protected String getErrorMessageDetail(Annotation annotation, boolean isTargetComponent)
{
if (!isTargetComponent)
{
- return super.getErrorMessageDetails(annotation, isTargetComponent);
+ return super.getErrorMessageDetail(annotation, isTargetComponent);
}
try
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java?rev=721451&r1=721450&r2=721451&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java Fri Nov 28 04:28:25 2008
@@ -20,12 +20,20 @@
import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorage;
import org.apache.myfaces.extensions.validator.crossval.ProcessedInformationEntry;
+import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorageEntry;
+import org.apache.myfaces.extensions.validator.crossval.strategy.AbstractCompareStrategy;
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.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
import javax.faces.context.FacesContext;
import java.util.Map;
import java.util.HashMap;
+import java.lang.annotation.Annotation;
/**
* @author Gerhard Petracek
@@ -76,4 +84,84 @@
FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
.put(KEY_TO_CONVERTED_VALUE_MAPPING_KEY, new HashMap<String, ProcessedInformationEntry>());
}
+
+ public static ProcessedInformationEntry resolveValidationTargetEntry(
+ Map<String, ProcessedInformationEntry> keyToConvertedValueMapping,
+ String targetKey, CrossValidationStorageEntry crossValidationStorageEntry)
+ {
+ ProcessedInformationEntry processedInformationEntry =
+ keyToConvertedValueMapping.get(targetKey);
+
+ //simple case
+ if (processedInformationEntry.getFurtherEntries() == null)
+ {
+ return processedInformationEntry;
+ }
+
+ PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
+ .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
+
+ Object targetBean = propertyDetails.getBaseObject();
+
+ //process complex component entries (e.g. a table)
+ //supported: cross-component but no cross-entity validation (= locale validation)
+ if (processedInformationEntry.getBean().equals(targetBean))
+ {
+ return processedInformationEntry;
+ }
+
+ for (ProcessedInformationEntry entry : processedInformationEntry.getFurtherEntries())
+ {
+ if (entry.getBean().equals(targetBean))
+ {
+ return entry;
+ }
+ }
+
+ return null;
+ }
+
+ @ToDo(value = Priority.MEDIUM, description = "support for map syntax")
+ public static String convertValueBindingExpressionToProcessedInformationKey(ValueBindingExpression vbe)
+ {
+ return vbe.getExpressionString().replace("#{", "").replace("}", "");
+ }
+
+ public static void crossValidateCompareStrategy(AbstractCompareStrategy compareStrategy,
+ CrossValidationStorageEntry crossValidationStorageEntry,
+ ProcessedInformationEntry validationTargetEntry)
+ {
+ boolean violationFound = false;
+
+ if (compareStrategy.isViolation(
+ crossValidationStorageEntry.getConvertedObject(),
+ validationTargetEntry.getConvertedValue(),
+ crossValidationStorageEntry.getMetaDataEntry().getValue(Annotation.class)))
+ {
+
+ CrossValidationStorageEntry tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
+ if (compareStrategy.useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry))
+ {
+ tmpCrossValidationStorageEntry.setComponent(validationTargetEntry.getComponent());
+ tmpCrossValidationStorageEntry.setClientId(validationTargetEntry.getClientId());
+ }
+ else
+ {
+ tmpCrossValidationStorageEntry.setComponent(crossValidationStorageEntry.getComponent());
+ tmpCrossValidationStorageEntry.setClientId(crossValidationStorageEntry.getClientId());
+ }
+ tmpCrossValidationStorageEntry.setConvertedObject(validationTargetEntry.getConvertedValue());
+ tmpCrossValidationStorageEntry.setValidationStrategy(compareStrategy);
+
+ compareStrategy
+ .processTargetComponentAfterViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
+
+ violationFound = true;
+ }
+
+ if (violationFound)
+ {
+ compareStrategy.processSourceComponentAfterViolation(crossValidationStorageEntry);
+ }
+ }
}