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/01 00:45:47 UTC
svn commit: r831617 - in /myfaces/extensions/validator/trunk:
component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/
core/src/main/java/org/apache/myfaces/extensions/validator/core/
core/src/main/...
Author: gpetracek
Date: Sat Oct 31 23:45:46 2009
New Revision: 831617
URL: http://svn.apache.org/viewvc?rev=831617&view=rev
Log:
small refactorings
Added:
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/PhaseIdRecordingPhaseListener.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ComponentInitializationAwareMetaDataExtractionInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorage.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorageManager.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesInformationStorage.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesInformationStorageNameMapper.java
Modified:
myfaces/extensions/validator/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadMetaDataExtractionInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/CommonMetaDataKeys.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/DefaultModelValidationStorage.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/storage/ModelValidationStorage.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationSkipValidationEvaluator.java
Modified: myfaces/extensions/validator/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadMetaDataExtractionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadMetaDataExtractionInterceptor.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadMetaDataExtractionInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadMetaDataExtractionInterceptor.java Sat Oct 31 23:45:46 2009
@@ -19,7 +19,8 @@
package org.apache.myfaces.extensions.validator.trinidad.interceptor;
import org.apache.myfaces.extensions.validator.core.InvocationOrder;
-import org.apache.myfaces.extensions.validator.core.interceptor.MetaDataExtractionInterceptor;
+import org.apache.myfaces.extensions.validator.core.interceptor
+ .ComponentInitializationAwareMetaDataExtractionInterceptor;
import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
@@ -35,19 +36,30 @@
* @since x.x.3
*/
@InvocationOrder(300)
-public class TrinidadMetaDataExtractionInterceptor implements MetaDataExtractionInterceptor
+public class TrinidadMetaDataExtractionInterceptor extends ComponentInitializationAwareMetaDataExtractionInterceptor
{
- public void afterExtracting(PropertyInformation propertyInformation)
+ protected void afterExtractingForComponentInitialization(PropertyInformation propertyInformation)
{
- for (MetaDataEntry entry : propertyInformation.getMetaDataEntries())
+ processMetaDataEntries(propertyInformation.getMetaDataEntries());
+ }
+
+ private void processMetaDataEntries(MetaDataEntry[] metaDataEntries)
+ {
+ for (MetaDataEntry entry : metaDataEntries)
{
- if (entry.getValue() instanceof Annotation && isClientValidationDisabled(entry))
+ if (processEntry(entry) && isClientValidationDisabled(entry))
{
disableClientSideValidation(entry);
}
}
}
+ //e.g. returns false for jsr303 entries
+ private boolean processEntry(MetaDataEntry entry)
+ {
+ return entry.getValue() instanceof Annotation;
+ }
+
private boolean isClientValidationDisabled(MetaDataEntry entry)
{
return ExtValUtils.getValidationParameterExtractor()
@@ -55,6 +67,7 @@
.iterator().hasNext();
}
+ @SuppressWarnings({"unchecked"})
private void disableClientSideValidation(MetaDataEntry entry)
{
if(entry.getProperty(CommonMetaDataKeys.DISABLE_CLIENT_SIDE_VALIDATION) == null)
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/PhaseIdRecordingPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/PhaseIdRecordingPhaseListener.java?rev=831617&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/PhaseIdRecordingPhaseListener.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/PhaseIdRecordingPhaseListener.java Sat Oct 31 23:45:46 2009
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.core.storage.FacesInformationStorage;
+
+import javax.faces.event.PhaseListener;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+
+/**
+ * e.g. to allow in metadata extraction interceptors to know if they are invoked during validation or
+ * component initialization (if needed)
+ * example: client-side validation - some functionality shouldn't be processed during rendering
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class PhaseIdRecordingPhaseListener implements PhaseListener
+{
+ private static final long serialVersionUID = 2791240514014867457L;
+
+ public void afterPhase(PhaseEvent phaseEvent)
+ {
+ }
+
+ public void beforePhase(PhaseEvent phaseEvent)
+ {
+ FacesInformationStorage facesInformationStorage = ExtValUtils
+ .getStorage(FacesInformationStorage.class, FacesInformationStorage.class.getName());
+
+ facesInformationStorage.setCurrentPhaseId(phaseEvent.getPhaseId());
+ }
+
+ public PhaseId getPhaseId()
+ {
+ return PhaseId.ANY_PHASE;
+ }
+}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java Sat Oct 31 23:45:46 2009
@@ -165,11 +165,12 @@
protected boolean processComponent(UIComponent uiComponent)
{
- if (!(uiComponent instanceof EditableValueHolder) || isComponentInitializationDeactivated())
- {
- return false;
- }
+ return uiComponent instanceof EditableValueHolder &&
+ !isComponentInitializationDeactivated() && isValueBindingOfComponentValid(uiComponent);
+ }
+ private boolean isValueBindingOfComponentValid(UIComponent uiComponent)
+ {
try
{
return ExtValUtils.getELHelper().getPropertyDetailsOfValueBinding(uiComponent) != null;
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ComponentInitializationAwareMetaDataExtractionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ComponentInitializationAwareMetaDataExtractionInterceptor.java?rev=831617&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ComponentInitializationAwareMetaDataExtractionInterceptor.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ComponentInitializationAwareMetaDataExtractionInterceptor.java Sat Oct 31 23:45:46 2009
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.interceptor;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
+import org.apache.myfaces.extensions.validator.core.InvocationOrderSupport;
+import org.apache.myfaces.extensions.validator.core.storage.FacesInformationStorage;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+
+import javax.faces.event.PhaseId;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@InvocationOrderSupport
+@UsageInformation(UsageCategory.API)
+public abstract class ComponentInitializationAwareMetaDataExtractionInterceptor implements MetaDataExtractionInterceptor
+{
+ public final void afterExtracting(PropertyInformation propertyInformation)
+ {
+ if(isRenderResponsePhase())
+ {
+ afterExtractingForComponentInitialization(propertyInformation);
+ }
+ }
+
+ protected abstract void afterExtractingForComponentInitialization(PropertyInformation propertyInformation);
+
+ private boolean isRenderResponsePhase()
+ {
+ return PhaseId.RENDER_RESPONSE.equals(getFacesInformationStorage().getCurrentPhaseId());
+ }
+
+ private FacesInformationStorage getFacesInformationStorage()
+ {
+ return ExtValUtils.getStorage(FacesInformationStorage.class, FacesInformationStorage.class.getName());
+ }
+}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java Sat Oct 31 23:45:46 2009
@@ -55,6 +55,7 @@
if(facesMessageStorage != null)
{
facesMessageStorage.addAll();
+ ExtValUtils.resetStorage(FacesMessageStorage.class, FacesMessageStorage.class.getName());
}
}
}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java Sat Oct 31 23:45:46 2009
@@ -128,6 +128,11 @@
{
if(skipValidationEvaluator.skipValidation(facesContext, uiComponent, validationStrategy, entry))
{
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("skip validation of " + entry.getValue() +
+ " with " + validationStrategy.getClass().getName());
+ }
//don't break maybe there are constraints which don't support the skip-mechanism
continue;
}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/CommonMetaDataKeys.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/CommonMetaDataKeys.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/CommonMetaDataKeys.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/CommonMetaDataKeys.java Sat Oct 31 23:45:46 2009
@@ -55,4 +55,6 @@
static final String CUSTOM = "custom";
static final String SKIP_VALIDATION = "skip_validation";
static final String DISABLE_CLIENT_SIDE_VALIDATION = "disable_client_side_validation";
+ //available for add-ons not used internally due to performance reasons
+ static final String DISABLE_SHOW_INDICATION = "disable_show_indication";
}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java Sat Oct 31 23:45:46 2009
@@ -27,6 +27,7 @@
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.CustomInformation;
import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.PhaseIdRecordingPhaseListener;
import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper
.BeanValidationStrategyToMetaDataTransformerNameMapper;
import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper
@@ -61,6 +62,7 @@
import org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererProxy;
import org.apache.myfaces.extensions.validator.util.ClassUtils;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.util.JsfUtils;
import org.apache.myfaces.extensions.validator.ExtValInformation;
/**
@@ -93,8 +95,9 @@
initNameMappers();
initValidationExceptionInterceptors();
- initViolationSeverityInterceptors();
+ initViolationSeverityInterpreter();
initPropertyValidationInterceptors();
+ initPhaseListeners();
executeCustomStartupListener();
}
@@ -185,7 +188,7 @@
new ViolationSeverityValidationExceptionInterceptor());
}
- private void initViolationSeverityInterceptors()
+ private void initViolationSeverityInterpreter()
{
ExtValContext.getContext().setViolationSeverityInterpreter(new DefaultViolationSeverityInterpreter(), false);
}
@@ -194,4 +197,9 @@
{
ExtValContext.getContext().addPropertyValidationInterceptor(new FacesMessagePropertyValidationInterceptor());
}
+
+ private void initPhaseListeners()
+ {
+ JsfUtils.registerPhaseListener(new PhaseIdRecordingPhaseListener());
+ }
}
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorage.java?rev=831617&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorage.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorage.java Sat Oct 31 23:45:46 2009
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import javax.faces.event.PhaseId;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultFacesInformationStorage implements FacesInformationStorage
+{
+ private PhaseId currentPhaseId;
+
+ public void setCurrentPhaseId(PhaseId phaseId)
+ {
+ this.currentPhaseId = phaseId;
+ }
+
+ public PhaseId getCurrentPhaseId()
+ {
+ return this.currentPhaseId;
+ }
+}
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorageManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorageManager.java?rev=831617&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorageManager.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesInformationStorageManager.java Sat Oct 31 23:45:46 2009
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import org.apache.myfaces.extensions.validator.core.storage.mapper.DefaultFacesInformationStorageNameMapper;
+
+/**
+ * default storage-manager for jsf information not available via jsf-api
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+class DefaultFacesInformationStorageManager extends
+ AbstractRequestScopeAwareStorageManager<FacesInformationStorage>
+{
+ DefaultFacesInformationStorageManager()
+ {
+ register(new DefaultFacesInformationStorageNameMapper());
+ }
+
+ public String getStorageManagerKey()
+ {
+ return StorageManager.class.getName() + "_FOR_FACES_INFORMATION_STORAGE:KEY";
+ }
+}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java Sat Oct 31 23:45:46 2009
@@ -63,6 +63,9 @@
setStorageManager(GroupStorage.class, new DefaultGroupStorageManager(), false);
setStorageManager(MetaDataStorage.class, new DefaultMetaDataStorageManager(), false);
setStorageManager(FacesMessageStorage.class, new DefaultFacesMessageStorageManager(), false);
+
+ setStorageManager(
+ FacesInformationStorage.class, new DefaultFacesInformationStorageManager(), false);
}
public StorageManager create(Class storageType)
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesInformationStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesInformationStorage.java?rev=831617&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesInformationStorage.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesInformationStorage.java Sat Oct 31 23:45:46 2009
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import javax.faces.event.PhaseId;
+
+/**
+ * storage for additional information about the current faces request
+ * for now it just contains information about the current phase of the lifecycle
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface FacesInformationStorage
+{
+ void setCurrentPhaseId(PhaseId phaseId);
+
+ PhaseId getCurrentPhaseId();
+}
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesInformationStorageNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesInformationStorageNameMapper.java?rev=831617&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesInformationStorageNameMapper.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesInformationStorageNameMapper.java Sat Oct 31 23:45:46 2009
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage.mapper;
+
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.storage.FacesInformationStorage;
+import org.apache.myfaces.extensions.validator.core.storage.DefaultFacesInformationStorage;
+
+/**
+ * use a public class to allow optional deregistration
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+public class DefaultFacesInformationStorageNameMapper implements NameMapper<String>
+{
+ public String createName(String source)
+ {
+ return (FacesInformationStorage.class.getName().equals(source)) ?
+ DefaultFacesInformationStorage.class.getName() : null;
+ }
+}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java Sat Oct 31 23:45:46 2009
@@ -20,6 +20,8 @@
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 javax.faces.context.FacesContext;
import javax.faces.component.UIComponent;
@@ -76,12 +78,15 @@
FacesContext facesContext, UIComponent uiComponent, FacesMessage.Severity severity);
/**
+ * available for add-ons not used internally due to performance reasons
+ *
* @param facesContext current faces context
* @param uiComponent current component
* @param severity jsf severity for faces messages
* @return true if the constraint with the given severity
* should cause e.g. a required marker independent of client-side validation (if supported)
*/
+ @ToDo(Priority.HIGH)
boolean severityShowsIndication(
FacesContext facesContext, UIComponent uiComponent, FacesMessage.Severity severity);
}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java Sat Oct 31 23:45:46 2009
@@ -51,7 +51,6 @@
import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationEntry;
import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
-import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
import org.apache.myfaces.extensions.validator.core.factory.NameMapperAwareFactory;
import org.apache.myfaces.extensions.validator.core.factory.FacesMessageFactory;
@@ -279,13 +278,12 @@
String targetExpression)
{
Object baseObject;
- if(ExtValUtils.getELHelper().isELTermWellFormed(targetExpression))
+ if(getELHelper().isELTermWellFormed(targetExpression))
{
ValueBindingExpression vbe = new ValueBindingExpression(targetExpression);
String expression = vbe.getExpressionString();
- baseObject = ExtValUtils.getELHelper()
- .getValueOfExpression(FacesContext.getCurrentInstance(), vbe.getBaseExpression());
+ baseObject = getELHelper().getValueOfExpression(FacesContext.getCurrentInstance(), vbe.getBaseExpression());
return new PropertyDetails(
expression.substring(2, expression.length() - 1), baseObject, vbe.getProperty());
}
@@ -369,9 +367,9 @@
public static boolean isSkipableValidationStrategy(Class<? extends ValidationStrategy> targetClass)
{
- for(Class currentClass : ExtValUtils.getSkipValidationSupportClassList())
+ for(Class currentClass : getSkipValidationSupportClassList())
{
- if(ExtValUtils.isSkipValidationSupported(currentClass, targetClass))
+ if(isSkipValidationSupported(currentClass, targetClass))
{
return true;
}
@@ -383,7 +381,7 @@
public static boolean processMetaDataEntryAfterSkipValidation(
Class<? extends ValidationStrategy> targetClass, MetaDataEntry entry)
{
- return ExtValUtils.isSkipableValidationStrategy(targetClass) &&
+ return isSkipableValidationStrategy(targetClass) &&
Boolean.TRUE.equals(entry.getProperty(PropertyInformationKeys.SKIP_VALIDATION, Boolean.class));
}
@@ -573,10 +571,9 @@
public static Map<String, Object> getTransformedMetaData(FacesContext facesContext, UIComponent uiComponent)
{
ValidationStrategy validationStrategy;
- MetaDataTransformer metaDataTransformer;
SkipValidationEvaluator skipValidationEvaluator = ExtValContext.getContext().getSkipValidationEvaluator();
- MetaDataExtractor metaDataExtractor = ExtValUtils.getComponentMetaDataExtractor();
+ MetaDataExtractor metaDataExtractor = getComponentMetaDataExtractor();
Map<String, Object> metaData;
Map<String, Object> metaDataResult = new HashMap<String, Object>();
@@ -584,58 +581,62 @@
for (MetaDataEntry entry : metaDataExtractor.extract(facesContext, uiComponent).getMetaDataEntries())
{
metaData = new HashMap<String, Object>();
- validationStrategy = ExtValUtils.getValidationStrategyForMetaData(entry.getKey());
+ validationStrategy = getValidationStrategyForMetaData(entry.getKey());
if (validationStrategy != null)
{
- if(!skipValidationEvaluator.skipValidation(facesContext, uiComponent, validationStrategy, entry))
- {
- metaDataTransformer = ExtValUtils.getMetaDataTransformerForValidationStrategy(validationStrategy);
-
- if(metaDataTransformer != null)
- {
- if(LOGGER.isDebugEnabled())
- {
- LOGGER.debug(metaDataTransformer.getClass().getName() + " instantiated");
- }
-
- if(isClientSideValidationEnabled(entry))
- {
- metaData = metaDataTransformer.convertMetaData(entry);
- }
- }
- else
- {
- metaData = null;
- }
+ metaData = transformMetaData(
+ facesContext, uiComponent, validationStrategy, skipValidationEvaluator, metaData, entry);
- if(metaData == null)
- {
- metaData = new HashMap<String, Object>();
- }
- }
-
- if(metaData.isEmpty() ||
- (Boolean.TRUE.equals(entry.getProperty(PropertyInformationKeys.SKIP_VALIDATION, Boolean.class)) &&
- ExtValUtils.isSkipableValidationStrategy(validationStrategy.getClass())))
+ if(!isComponentInitializationSkipped(metaData, entry, validationStrategy))
{
//don't break maybe there are constraints which don't support the skip-mechanism
- continue;
+ metaDataResult.putAll(metaData);
}
-
- metaDataResult.putAll(metaData);
}
}
return metaDataResult;
}
- private static boolean isClientSideValidationEnabled(MetaDataEntry entry)
+ private static Map<String, Object> transformMetaData(FacesContext facesContext,
+ UIComponent uiComponent,
+ ValidationStrategy validationStrategy,
+ SkipValidationEvaluator skipValidationEvaluator,
+ Map<String, Object> metaData, MetaDataEntry entry)
{
- List<String> keysToDisable = entry.getProperty(
- CommonMetaDataKeys.DISABLE_CLIENT_SIDE_VALIDATION, List.class);
+ if(!skipValidationEvaluator.skipValidation(facesContext, uiComponent, validationStrategy, entry))
+ {
+ MetaDataTransformer metaDataTransformer = getMetaDataTransformerForValidationStrategy(validationStrategy);
- return keysToDisable == null || !keysToDisable.contains(entry.getKey());
+ if(metaDataTransformer != null)
+ {
+ if(LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug(metaDataTransformer.getClass().getName() + " instantiated");
+ }
+
+ metaData = metaDataTransformer.convertMetaData(entry);
+ }
+ else
+ {
+ metaData = null;
+ }
+
+ if(metaData == null)
+ {
+ return new HashMap<String, Object>();
+ }
+ }
+ return metaData;
+ }
+
+ private static boolean isComponentInitializationSkipped(Map<String, Object> metaData, MetaDataEntry entry,
+ ValidationStrategy validationStrategy)
+ {
+ return metaData.isEmpty() ||
+ (Boolean.TRUE.equals(entry.getProperty(PropertyInformationKeys.SKIP_VALIDATION, Boolean.class)) &&
+ isSkipableValidationStrategy(validationStrategy.getClass()));
}
public static boolean interpretEmptyStringValuesAsNull()
@@ -729,11 +730,7 @@
}
else
{
- if(LOGGER.isWarnEnabled())
- {
- LOGGER.warn("no component was found that might happen with test-frameworks" +
- " and shouldn't happen in real applications");
- }
+ addFacesMessage(null, facesMessage);
}
}
tryToBlocksNavigationForComponent(uiComponent, facesMessage);
@@ -789,6 +786,7 @@
return interpreter.severityBlocksSubmit(facesContext, targetComponent, facesMessage.getSeverity());
}
+ //available for add-ons not used internally due to performance reasons
public static boolean severityShowsIndicationForComponentId(String clientId, FacesMessage facesMessage)
{
ViolationSeverityInterpreter interpreter =
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java Sat Oct 31 23:45:46 2009
@@ -34,7 +34,6 @@
import org.apache.commons.logging.LogFactory;
import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
import javax.validation.MessageInterpolator;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
@@ -127,9 +126,9 @@
return this.groupStorage.getGroups(viewId, clientId);
}
- public void addModelValidationEntry(ModelValidationEntry modelValidationEntry, String viewId, UIComponent component)
+ public void addModelValidationEntry(ModelValidationEntry modelValidationEntry)
{
- this.modelValidationStorage.addModelValidationEntry(modelValidationEntry, viewId, component);
+ this.modelValidationStorage.addModelValidationEntry(modelValidationEntry);
}
public List<ModelValidationEntry> getModelValidationEntriesToValidate()
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java Sat Oct 31 23:45:46 2009
@@ -22,6 +22,7 @@
import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import javax.faces.context.FacesContext;
@@ -44,7 +45,8 @@
Class entityClass = propertyDetails.getBaseObject().getClass();
PropertyInformation propertyInformation = new DefaultPropertyInformation();
-
+ propertyInformation.setInformation(PropertyInformationKeys.PROPERTY_DETAILS, propertyDetails);
+
/*
* find and add annotations
*/
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java Sat Oct 31 23:45:46 2009
@@ -40,6 +40,7 @@
@UsageInformation({UsageCategory.REUSE})
public abstract class AbstractBeanValidationMetaDataTransformer<T extends Annotation> implements MetaDataTransformer
{
+ @SuppressWarnings({"unchecked"})
public Map<String, Object> convertMetaData(MetaDataEntry metaDataEntry)
{
ConstraintDescriptor<? extends T> constraintDescriptor = metaDataEntry.getValue(ConstraintDescriptor.class);
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java Sat Oct 31 23:45:46 2009
@@ -58,8 +58,8 @@
registerMetaDataTransformerNameMapper();
registerGroupStorageNameMapper();
registerModelValidationStorageNameMapper();
- registerModelValidationPhaseListener();
registerComponentInitializers();
+ registerPhaseListeners();
}
protected void registerValidatorFactory()
@@ -107,20 +107,20 @@
getStorageManagerHolder().setStorageManager(ModelValidationStorage.class, modelValidationStorageManager, false);
}
- protected void registerModelValidationPhaseListener()
- {
- JsfUtils.registerPhaseListener(new ModelValidationPhaseListener());
- }
-
protected void registerComponentInitializers()
{
ExtValContext.getContext().addComponentInitializer(new HtmlCoreComponentsComponentInitializer());
}
- private StorageManagerHolder getStorageManagerHolder()
+ protected StorageManagerHolder getStorageManagerHolder()
{
return (ExtValContext.getContext()
.getFactoryFinder()
.getFactory(FactoryNames.STORAGE_MANAGER_FACTORY, StorageManagerHolder.class));
}
+
+ protected void registerPhaseListeners()
+ {
+ JsfUtils.registerPhaseListener(new ModelValidationPhaseListener());
+ }
}
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/DefaultModelValidationStorage.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/DefaultModelValidationStorage.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/DefaultModelValidationStorage.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/DefaultModelValidationStorage.java Sat Oct 31 23:45:46 2009
@@ -22,7 +22,6 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import static org.apache.myfaces.extensions.validator.internal.UsageCategory.INTERNAL;
-import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import java.util.List;
import java.util.Map;
@@ -43,26 +42,25 @@
private List<String> componentsOfRequest = new ArrayList<String>();
- public void addModelValidationEntry(
- ModelValidationEntry modelValidationEntry, String viewId, UIComponent component)
+ public void addModelValidationEntry(ModelValidationEntry modelValidationEntry)
{
- modelValidationEntry.setComponent(component);
-
String clientId = null;
- if(component != null)
+ if(modelValidationEntry.getComponent() != null)
{
- clientId = component.getClientId(FacesContext.getCurrentInstance());
+ clientId = modelValidationEntry.getComponent().getClientId(FacesContext.getCurrentInstance());
this.componentsOfRequest.add(clientId);
}
List<ModelValidationEntry> modelValidationEntryList =
- this.modelValidationEntries.get(GroupUtils.getGroupKey(viewId, clientId));
+ this.modelValidationEntries.get(GroupUtils.getGroupKey(
+ modelValidationEntry.getViewId(), clientId));
if(modelValidationEntryList == null)
{
modelValidationEntryList = new ArrayList<ModelValidationEntry>();
- this.modelValidationEntries.put(GroupUtils.getGroupKey(viewId, clientId), modelValidationEntryList);
+ this.modelValidationEntries.put(GroupUtils.getGroupKey(
+ modelValidationEntry.getViewId(), clientId), modelValidationEntryList);
}
if(!modelValidationEntryList.contains(modelValidationEntry))
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=831617&r1=831616&r2=831617&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 Sat Oct 31 23:45:46 2009
@@ -23,6 +23,7 @@
import static org.apache.myfaces.extensions.validator.internal.UsageCategory.INTERNAL;
import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
import java.util.List;
import java.util.ArrayList;
@@ -38,6 +39,7 @@
private List<Class> groups = new ArrayList<Class>();
private List<Object> validationTargets = new ArrayList<Object>();
private Object metaDataSourceObject;
+ private String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
public void addGroup(Class group)
{
@@ -122,7 +124,7 @@
public void setValidationTargets(List<Object> validationTargets)
{
- this.validationTargets = new ArrayList<Object>();
+ this.validationTargets = validationTargets;
}
public Object getMetaDataSourceObject()
@@ -135,6 +137,7 @@
this.metaDataSourceObject = metaDataSourceObject;
}
+ @SuppressWarnings({"RedundantIfStatement"})
@Override
public boolean equals(Object o)
{
@@ -173,4 +176,14 @@
result = 31 * result + validationTargets.hashCode();
return result;
}
+
+ public String getViewId()
+ {
+ return viewId;
+ }
+
+ public void setViewId(String viewId)
+ {
+ this.viewId = viewId;
+ }
}
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationStorage.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/ModelValidationStorage.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationStorage.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/storage/ModelValidationStorage.java Sat Oct 31 23:45:46 2009
@@ -21,7 +21,6 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
-import javax.faces.component.UIComponent;
import java.util.List;
/**
@@ -35,8 +34,7 @@
@UsageInformation(UsageCategory.API)
public interface ModelValidationStorage
{
- void addModelValidationEntry(
- ModelValidationEntry modelValidationEntry, String viewId, UIComponent component);
+ void addModelValidationEntry(ModelValidationEntry modelValidationEntry);
List<ModelValidationEntry> getModelValidationEntriesToValidate();
}
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=831617&r1=831616&r2=831617&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 Sat Oct 31 23:45:46 2009
@@ -126,7 +126,7 @@
processRestrictedGroups(extValBeanValidationContext, currentViewId, clientId,
restrictedGroupsForPropertyValidation);
- initModelValidation(extValBeanValidationContext, currentViewId, component, propertyDetails,
+ initModelValidation(extValBeanValidationContext, component, propertyDetails,
modelValidationEntryList, restrictedGroupsForModelValidation);
}
@@ -220,7 +220,6 @@
}
private static void initModelValidation(ExtValBeanValidationContext extValBeanValidationContext,
- String currentViewId,
UIComponent component,
PropertyDetails propertyDetails,
List<ModelValidationEntry> modelValidationEntryList,
@@ -239,7 +238,8 @@
if (modelValidationEntry.getGroups().length > 0)
{
addTargetsForModelValidation(modelValidationEntry, propertyDetails.getBaseObject());
- extValBeanValidationContext.addModelValidationEntry(modelValidationEntry, currentViewId, component);
+ modelValidationEntry.setComponent(component);
+ extValBeanValidationContext.addModelValidationEntry(modelValidationEntry);
}
}
}
@@ -477,15 +477,18 @@
boolean firstErrorCausesAnException)
{
List<FacesMessageHolder> facesMessageHolderList = new ArrayList<FacesMessageHolder>();
- FacesMessageHolder facesMessageHolder;
+ FacesMessage facesMessage;
for (ConstraintViolation violation : violations)
{
- facesMessageHolder = new FacesMessageHolder(
- createFacesMessageForConstraintViolation(uiComponent, convertedObject, violation));
- facesMessageHolder.setClientId(uiComponent.getClientId(facesContext));
+ facesMessage = createFacesMessageForConstraintViolation(uiComponent, convertedObject, violation);
- facesMessageHolderList.add(facesMessageHolder);
+ if(facesMessage == null)
+ {
+ continue;
+ }
+
+ processFacesMessage(facesContext, uiComponent, facesMessageHolderList, facesMessage);
}
processViolationMessages(facesMessageHolderList, firstErrorCausesAnException);
@@ -504,7 +507,10 @@
ValidatorException validatorException = createValidatorException(labeledMessage, severity);
- executeAfterThrowingInterceptors(uiComponent, convertedObject, validatorException);
+ if(!executeAfterThrowingInterceptors(uiComponent, convertedObject, validatorException))
+ {
+ return null;
+ }
if (isMessageTextUnchanged(validatorException, labeledMessage))
{
@@ -542,11 +548,21 @@
return FacesMessage.SEVERITY_ERROR;
}
- private static void executeAfterThrowingInterceptors(UIComponent uiComponent,
+ private static void processFacesMessage(FacesContext facesContext, UIComponent uiComponent,
+ List<FacesMessageHolder> facesMessageHolderList, FacesMessage facesMessage)
+ {
+ FacesMessageHolder facesMessageHolder = new FacesMessageHolder(facesMessage);
+
+ facesMessageHolder.setClientId(uiComponent.getClientId(facesContext));
+
+ facesMessageHolderList.add(facesMessageHolder);
+ }
+
+ private static boolean executeAfterThrowingInterceptors(UIComponent uiComponent,
Object convertedObject,
ValidatorException validatorException)
{
- ExtValUtils.executeAfterThrowingInterceptors(
+ return ExtValUtils.executeAfterThrowingInterceptors(
uiComponent,
null,
convertedObject,
@@ -569,6 +585,11 @@
public static void processViolationMessages(List<FacesMessageHolder> violationMessageHolderList,
boolean firstErrorCausesAnException)
{
+ if(violationMessageHolderList == null || violationMessageHolderList.isEmpty())
+ {
+ return;
+ }
+
List<FacesMessageHolder> facesMessageListWithLowSeverity =
getFacesMessageListWithLowSeverity(violationMessageHolderList);
List<FacesMessageHolder> facesMessageListWithHighSeverity =
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java Sat Oct 31 23:45:46 2009
@@ -21,12 +21,16 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.extensions.validator.beanval.ExtValBeanValidationContext;
+import org.apache.myfaces.extensions.validator.beanval.BeanValidationModuleKey;
import org.apache.myfaces.extensions.validator.beanval.annotation.ModelValidation;
import org.apache.myfaces.extensions.validator.beanval.storage.ModelValidationEntry;
import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
-import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.core.validation.message.FacesMessageHolder;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
+import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
@@ -72,6 +76,8 @@
processViolations(results);
+ executeGlobalAfterValidationInterceptorsFor(results);
+
if (logger.isTraceEnabled())
{
logger.trace("jsr303 validation finished");
@@ -87,8 +93,19 @@
List<Object> processedValidationTargets,
Map<String, ModelValidationResult> results)
{
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ PropertyInformation propertyInformation;
+
for (Object validationTarget : modelValidationEntry.getValidationTargets())
{
+ propertyInformation = createPropertyInformation(modelValidationEntry, validationTarget);
+
+ if(!executeGlobalBeforeValidationInterceptors(
+ facesContext, modelValidationEntry.getComponent(), validationTarget, propertyInformation))
+ {
+ return;
+ }
+
if (processedValidationTargets.contains(validationTarget) &&
!modelValidationEntry.getMetaData().displayInline())
{
@@ -104,7 +121,43 @@
}
}
- @ToDo(value = Priority.HIGH, description = "refactor and remove FacesContext#renderResponse")
+ private PropertyInformation createPropertyInformation(
+ ModelValidationEntry modelValidationEntry, Object validationTarget)
+ {
+ PropertyInformation propertyInformation;
+ PropertyDetails propertyDetails;
+ propertyInformation = new DefaultPropertyInformation();
+ if(modelValidationEntry.getComponent() != null)
+ {
+ propertyDetails = ExtValUtils.getELHelper()
+ .getPropertyDetailsOfValueBinding(modelValidationEntry.getComponent());
+ }
+ else
+ {
+ propertyDetails = new PropertyDetails(null, validationTarget, null);
+ }
+ propertyInformation.setInformation(PropertyInformationKeys.PROPERTY_DETAILS, propertyDetails);
+ return propertyInformation;
+ }
+
+ private boolean executeGlobalBeforeValidationInterceptors(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object validationTarget,
+ PropertyInformation propertyInformation)
+ {
+ return ExtValUtils.executeGlobalBeforeValidationInterceptors(facesContext, uiComponent, validationTarget,
+ PropertyInformation.class.getName(), propertyInformation, BeanValidationModuleKey.class);
+ }
+
+ private void executeGlobalAfterValidationInterceptors(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object validationTarget,
+ PropertyInformation propertyInformation)
+ {
+ ExtValUtils.executeGlobalAfterValidationInterceptors(facesContext, uiComponent, validationTarget,
+ PropertyInformation.class.getName(), propertyInformation, BeanValidationModuleKey.class);
+ }
+
private void validateTarget(ModelValidationEntry modelValidationEntry,
Object validationTarget,
Class[] groups,
@@ -119,7 +172,6 @@
if (violations != null && !violations.isEmpty())
{
FacesContext facesContext = FacesContext.getCurrentInstance();
- facesContext.renderResponse();
//jsf 2.0 is able to display multiple messages per component - so process all violations
//jsf < 2.0 will just use the first one (it's only a little overhead)
@@ -266,6 +318,24 @@
}
}
+ private void executeGlobalAfterValidationInterceptorsFor(Map<String, ModelValidationResult> results)
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ UIComponent component;
+ for (ModelValidationResult result : results.values())
+ {
+ for(FacesMessageHolder facesMessageHolder : result.getFacesMessageHolderList())
+ {
+ component = null;
+ if(facesMessageHolder.getClientId() != null && !facesMessageHolder.getClientId().equals("*"))
+ {
+ component = facesContext.getViewRoot().findComponent(facesMessageHolder.getClientId());
+ }
+ executeGlobalAfterValidationInterceptors(facesContext, component, null, null);
+ }
+ }
+ }
+
public void beforePhase(PhaseEvent phaseEvent)
{
//do nothing
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml Sat Oct 31 23:45:46 2009
@@ -23,8 +23,4 @@
<lifecycle>
<phase-listener>org.apache.myfaces.extensions.validator.PropertyValidationModuleStartupListener</phase-listener>
</lifecycle>
-
- <lifecycle>
- <phase-listener>org.apache.myfaces.extensions.validator.crossval.CrossValidationPhaseListener</phase-listener>
- </lifecycle>
</faces-config>
\ No newline at end of file
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java Sat Oct 31 23:45:46 2009
@@ -43,7 +43,9 @@
import org.apache.myfaces.extensions.validator.crossval.storage.ProcessedInformationStorage;
import org.apache.myfaces.extensions.validator.crossval.storage.mapper.CrossValidationStorageNameMapper;
import org.apache.myfaces.extensions.validator.crossval.storage.mapper.ProcessedInformationStorageNameMapper;
+import org.apache.myfaces.extensions.validator.crossval.CrossValidationPhaseListener;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.util.JsfUtils;
/**
* @author Gerhard Petracek
@@ -56,14 +58,19 @@
protected void init()
{
- ExtValContext.getContext().addProcessedInformationRecorder(new CrossValidationUserInputRecorder());
-
+ initProcessedInformationRecorders();
initStaticStrategyMappings();
initDefaultComponentInitializer();
addSkipValidationSupport();
initStorageManagerAndNameMappers();
initSkipValidationEvaluator();
initMetaDataStorageFilters();
+ initPhaseListeners();
+ }
+
+ private void initProcessedInformationRecorders()
+ {
+ ExtValContext.getContext().addProcessedInformationRecorder(new CrossValidationUserInputRecorder());
}
private void initStaticStrategyMappings()
@@ -148,4 +155,9 @@
metaDataStorage.registerFilter(new JoinValidationMetaDataStorageFilter());
}
+
+ private void initPhaseListeners()
+ {
+ JsfUtils.registerPhaseListener(new CrossValidationPhaseListener());
+ }
}
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationSkipValidationEvaluator.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationSkipValidationEvaluator.java?rev=831617&r1=831616&r2=831617&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationSkipValidationEvaluator.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationSkipValidationEvaluator.java Sat Oct 31 23:45:46 2009
@@ -23,10 +23,15 @@
import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
import org.apache.myfaces.extensions.validator.core.validation.SkipValidationEvaluator;
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
+import org.apache.myfaces.extensions.validator.core.storage.FacesInformationStorage;
import org.apache.myfaces.extensions.validator.util.PropertyValidationUtils;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import javax.faces.context.FacesContext;
import javax.faces.component.UIComponent;
+import javax.faces.event.PhaseId;
+import java.util.List;
/**
* @author Gerhard Petracek
@@ -40,6 +45,31 @@
ValidationStrategy validationStrategy,
MetaDataEntry metaDataEntry)
{
- return PropertyValidationUtils.isValidationSkipped(facesContext, validationStrategy, metaDataEntry);
+ boolean result = false;
+
+ if(isRenderResponsePhase())
+ {
+ result = !isClientSideValidationEnabled(metaDataEntry);
+ }
+ return result || PropertyValidationUtils.isValidationSkipped(facesContext, validationStrategy, metaDataEntry);
+ }
+
+ private boolean isRenderResponsePhase()
+ {
+ return PhaseId.RENDER_RESPONSE.equals(getFacesInformationStorage().getCurrentPhaseId());
+ }
+
+ private FacesInformationStorage getFacesInformationStorage()
+ {
+ return ExtValUtils.getStorage(FacesInformationStorage.class, FacesInformationStorage.class.getName());
+ }
+
+ @SuppressWarnings({"unchecked"})
+ private boolean isClientSideValidationEnabled(MetaDataEntry entry)
+ {
+ List<String> keysToDisable = entry.getProperty(
+ CommonMetaDataKeys.DISABLE_CLIENT_SIDE_VALIDATION, List.class);
+
+ return keysToDisable == null || !keysToDisable.contains(entry.getKey());
}
}
\ No newline at end of file