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/28 20:13:42 UTC
svn commit: r885130 - in
/myfaces/extensions/validator/branches/branch_for_jsf_1_1:
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/apa...
Author: gpetracek
Date: Sat Nov 28 19:13:41 2009
New Revision: 885130
URL: http://svn.apache.org/viewvc?rev=885130&view=rev
Log:
cleanup and refactorings
Added:
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java
Modified:
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java Sat Nov 28 19:13:41 2009
@@ -122,7 +122,10 @@
static final String DEACTIVATE_COMPONENT_INITIALIZATION = WebXmlUtils
.getInitParameter("DEACTIVATE_COMPONENT_INITIALIZATION");
-
+
+ static final String DEACTIVATE_VALIDATION_PARAMETERS = WebXmlUtils
+ .getInitParameter("DEACTIVATE_VALIDATION_PARAMETERS");
+
//there is nothing like DEACTIVATE_DEFAULT_VALIDATION_INTERCEPTOR
//use ExtValContext.getContext().denyRendererInterceptor(...) within an extval-StartupListener
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java Sat Nov 28 19:13:41 2009
@@ -20,8 +20,6 @@
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
-import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
@@ -46,7 +44,6 @@
public abstract class AbstractValidationInterceptor extends AbstractRendererInterceptor
{
@Override
- @ToDo(value = Priority.MEDIUM, description = "add web.xml context param to deactivate component initialization")
public void beforeEncodeBegin(FacesContext facesContext, UIComponent uiComponent, Renderer wrapped)
throws IOException, SkipBeforeInterceptorsException, SkipRendererDelegationException
{
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java Sat Nov 28 19:13:41 2009
@@ -55,7 +55,6 @@
*/
@InvocationOrder(100)
@UsageInformation(UsageCategory.INTERNAL)
-@ToDo(value = Priority.HIGH, description = "check compatibility with bv-integration")
public class HtmlCoreComponentsValidationExceptionInterceptor implements ValidationExceptionInterceptor
{
protected final Log logger = LogFactory.getLog(getClass());
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java Sat Nov 28 19:13:41 2009
@@ -18,22 +18,28 @@
*/
package org.apache.myfaces.extensions.validator.core.metadata.extractor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+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.PropertyInformation;
-import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
-import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import org.apache.myfaces.extensions.validator.core.storage.MetaDataStorage;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.core.storage.PropertyStorage;
import org.apache.myfaces.extensions.validator.internal.Priority;
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
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.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -55,7 +61,7 @@
public DefaultComponentMetaDataExtractor()
{
- if(logger.isDebugEnabled())
+ if (logger.isDebugEnabled())
{
logger.debug(getClass().getName() + " instantiated");
}
@@ -69,7 +75,7 @@
//should never occur
if (!(object instanceof UIComponent))
{
- if(this.logger.isWarnEnabled() && object != null)
+ if (this.logger.isWarnEnabled() && object != null)
{
this.logger.warn(object.getClass() + " is no valid component");
}
@@ -78,7 +84,7 @@
UIComponent uiComponent = (UIComponent) object;
- if(logger.isTraceEnabled())
+ if (logger.isTraceEnabled())
{
logger.trace("start extracting meta-data of " + uiComponent.getClass().getName());
}
@@ -98,9 +104,9 @@
//create
propertyInformation.setInformation(PropertyInformationKeys.PROPERTY_DETAILS, propertyDetails);
- if(isCached(entityClass, propertyDetails.getProperty()))
+ if (isCached(entityClass, propertyDetails.getProperty()))
{
- for(MetaDataEntry metaDataEntry : getCachedMetaData(entityClass, propertyDetails.getProperty()))
+ for (MetaDataEntry metaDataEntry : getCachedMetaData(entityClass, propertyDetails.getProperty()))
{
propertyInformation.addMetaDataEntry(metaDataEntry);
}
@@ -111,7 +117,7 @@
cacheMetaData(propertyInformation);
}
- if(logger.isTraceEnabled())
+ if (logger.isTraceEnabled())
{
logger.trace("extract finished");
}
@@ -139,6 +145,49 @@
return ExtValUtils.getStorage(MetaDataStorage.class, MetaDataStorage.class.getName());
}
+ private boolean isCachedField(Class entity, String property)
+ {
+ return getPropertyStorage().containsField(entity, property);
+ }
+
+ private void tryToCachedField(Class entity, String property, Field field)
+ {
+ PropertyStorage propertyStorage = getPropertyStorage();
+ if (!propertyStorage.containsField(entity, property))
+ {
+ propertyStorage.storeField(entity, property, field);
+ }
+ }
+
+ private Field getCachedField(Class entity, String property)
+ {
+ return getPropertyStorage().getField(entity, property);
+ }
+
+ private boolean isCachedMethod(Class entity, String property)
+ {
+ return getPropertyStorage().containsMethod(entity, property);
+ }
+
+ private void tryToCachedMethod(Class entity, String property, Method method)
+ {
+ PropertyStorage propertyStorage = getPropertyStorage();
+ if (!propertyStorage.containsMethod(entity, property))
+ {
+ propertyStorage.storeMethod(entity, property, method);
+ }
+ }
+
+ private Method getCachedMethod(Class entity, String property)
+ {
+ return getPropertyStorage().getMethod(entity, property);
+ }
+
+ private PropertyStorage getPropertyStorage()
+ {
+ return ExtValUtils.getStorage(PropertyStorage.class, PropertyStorage.class.getName());
+ }
+
protected void extractAnnotations(
PropertyInformation propertyInformation, PropertyDetails propertyDetails, Class entityClass)
{
@@ -167,33 +216,79 @@
protected void addPropertyAccessAnnotations(Class entity, String property,
PropertyInformation propertyInformation)
{
- property = property.substring(0, 1).toUpperCase() + property.substring(1);
+ Method method = tryToGetReadMethod(entity, property);
- Method method;
+ if (method == null)
+ {
+ method = tryToGetReadMethodManually(entity, property);
+ }
+
+ if (method != null)
+ {
+ tryToCachedMethod(entity, property, method);
+ addAnnotationToAnnotationEntries(Arrays.asList(method.getAnnotations()), propertyInformation);
+ }
+ }
+
+ private Method tryToGetReadMethod(Class entity, String property)
+ {
+ if (isCachedMethod(entity, property))
+ {
+ return getCachedMethod(entity, property);
+ }
+
+ if (useBeanInfo())
+ {
+ try
+ {
+ BeanInfo beanInfo = Introspector.getBeanInfo(entity);
+ for (PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors())
+ {
+ if (property.equals(propertyDescriptor.getName()) && propertyDescriptor.getReadMethod() != null)
+ {
+ return propertyDescriptor.getReadMethod();
+ }
+ }
+ }
+ catch (IntrospectionException e)
+ {
+ //do nothing
+ }
+ }
+ return null;
+ }
+
+ private boolean useBeanInfo()
+ {
+ return Boolean.TRUE.equals(ExtValContext.getContext().getGlobalProperty(BeanInfo.class.getName()));
+ }
+
+ private Method tryToGetReadMethodManually(Class entity, String property)
+ {
+ property = property.substring(0, 1).toUpperCase() + property.substring(1);
try
{
- method = entity.getDeclaredMethod("get" + property);
+ //changed to official bean spec. due to caching there is no performance issue any more
+ return entity.getDeclaredMethod("is" + property);
}
catch (NoSuchMethodException e)
{
try
{
- method = entity.getDeclaredMethod("is" + property);
+ return entity.getDeclaredMethod("get" + property);
}
catch (NoSuchMethodException e1)
{
- if(logger.isTraceEnabled())
+ if (logger.isTraceEnabled())
{
logger.trace("method not found - class: " + entity.getName()
- + " - methods: " + "get" + property + " " + "is" + property);
+ + " - methods: " + "get" + property + " " + "is" + property);
}
- return;
+ return null;
}
}
-
- addAnnotationToAnnotationEntries(Arrays.asList(method.getAnnotations()), propertyInformation);
}
protected void addFieldAccessAnnotations(Class entity, String property,
@@ -203,7 +298,7 @@
try
{
- field = entity.getDeclaredField(property);
+ field = getDeclaredField(entity, property);
}
catch (Exception e)
{
@@ -211,24 +306,26 @@
{
try
{
- if(property.length() > 1 &&
- Character.isUpperCase(property.charAt(0)) && Character.isUpperCase(property.charAt(1)))
+ field = entity.getDeclaredField("_" + property);
+ }
+ catch (Exception e1)
+ {
+ if (property.length() > 1 &&
+ Character.isUpperCase(property.charAt(0)) &&
+ Character.isUpperCase(property.charAt(1)))
{
+ //don't use Introspector#decapitalize here
field = entity.getDeclaredField(property.substring(0, 1).toLowerCase() + property.substring(1));
}
else
{
- field = entity.getDeclaredField("_" + property);
+ field = entity.getDeclaredField(Introspector.decapitalize(property));
}
}
- catch (Exception e1)
- {
- field = entity.getDeclaredField("_" + property);
- }
}
catch (NoSuchFieldException e1)
{
- if(logger.isTraceEnabled())
+ if (logger.isTraceEnabled())
{
logger.trace("field " + property + " or _" + property + " not found", e1);
}
@@ -237,17 +334,31 @@
}
}
- addAnnotationToAnnotationEntries(Arrays.asList(field.getAnnotations()), propertyInformation);
+ if (field != null)
+ {
+ tryToCachedField(entity, property, field);
+ addAnnotationToAnnotationEntries(Arrays.asList(field.getAnnotations()), propertyInformation);
+ }
+ }
+
+ private Field getDeclaredField(Class entity, String property) throws NoSuchFieldException
+ {
+ if (isCachedField(entity, property))
+ {
+ return getCachedField(entity, property);
+ }
+
+ return entity.getDeclaredField(property);
}
protected void addAnnotationToAnnotationEntries(
- List<Annotation> annotations, PropertyInformation propertyInformation)
+ List<Annotation> annotations, PropertyInformation propertyInformation)
{
for (Annotation annotation : annotations)
{
propertyInformation.addMetaDataEntry(createMetaDataEntryForAnnotation(annotation));
- if(logger.isTraceEnabled())
+ if (logger.isTraceEnabled())
{
logger.trace(annotation.getClass().getName() + " found");
}
Added: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java?rev=885130&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java Sat Nov 28 19:13:41 2009
@@ -0,0 +1,77 @@
+/*
+ * 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 static org.apache.myfaces.extensions.validator.internal.UsageCategory.INTERNAL;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(INTERNAL)
+public class DefaultPropertyStorage implements PropertyStorage
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private Map<String, Field> fieldMap = new HashMap<String, Field>();
+ private Map<String, Method> methodMap = new HashMap<String, Method>();
+
+ public void storeField(Class targetClass, String property, Field field)
+ {
+ this.fieldMap.put(createKey(targetClass, property), field);
+ }
+
+ public void storeMethod(Class targetClass, String property, Method method)
+ {
+ this.methodMap.put(createKey(targetClass, property), method);
+ }
+
+ public Field getField(Class targetClass, String property)
+ {
+ return this.fieldMap.get(createKey(targetClass, property));
+ }
+
+ public Method getMethod(Class targetClass, String property)
+ {
+ return this.methodMap.get(createKey(targetClass, property));
+ }
+
+ public boolean containsField(Class targetClass, String property)
+ {
+ return this.fieldMap.containsKey(createKey(targetClass, property));
+ }
+
+ public boolean containsMethod(Class targetClass, String property)
+ {
+ return this.methodMap.containsKey(createKey(targetClass, property));
+ }
+
+ private String createKey(Class targetClass, String property)
+ {
+ return targetClass + "#" + property;
+ }
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java?rev=885130&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java Sat Nov 28 19:13:41 2009
@@ -0,0 +1,43 @@
+/*
+ * 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 static org.apache.myfaces.extensions.validator.internal.UsageCategory.INTERNAL;
+import org.apache.myfaces.extensions.validator.core.storage.mapper.DefaultPropertyStorageNameMapper;
+
+/**
+ * default storage-manager for groups
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(INTERNAL)
+class DefaultPropertyStorageManager extends AbstractApplicationScopeAwareStorageManager<PropertyStorage>
+{
+ DefaultPropertyStorageManager()
+ {
+ register(new DefaultPropertyStorageNameMapper());
+ }
+
+ public String getStorageManagerKey()
+ {
+ return StorageManager.class.getName() + "_FOR_PROPERTY:KEY";
+ }
+}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java Sat Nov 28 19:13:41 2009
@@ -63,6 +63,7 @@
setStorageManager(GroupStorage.class, new DefaultGroupStorageManager(), false);
setStorageManager(MetaDataStorage.class, new DefaultMetaDataStorageManager(), false);
setStorageManager(FacesMessageStorage.class, new DefaultFacesMessageStorageManager(), false);
+ setStorageManager(PropertyStorage.class, new DefaultPropertyStorageManager(), false);
setStorageManager(
FacesInformationStorage.class, new DefaultFacesInformationStorageManager(), false);
Added: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java?rev=885130&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java Sat Nov 28 19:13:41 2009
@@ -0,0 +1,45 @@
+/*
+ * 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 java.lang.reflect.Method;
+import java.lang.reflect.Field;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface PropertyStorage
+{
+ void storeField(Class targetClass, String property, Field field);
+
+ void storeMethod(Class targetClass, String property, Method method);
+
+ Field getField(Class targetClass, String property);
+
+ Method getMethod(Class targetClass, String property);
+
+ boolean containsField(Class targetClass, String property);
+
+ boolean containsMethod(Class targetClass, String property);
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java?rev=885130&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java Sat Nov 28 19:13:41 2009
@@ -0,0 +1,40 @@
+/*
+ * 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.DefaultPropertyStorage;
+import org.apache.myfaces.extensions.validator.core.storage.PropertyStorage;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+
+/**
+ * use a public class to allow optional deregistration
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@InvocationOrder(100)
+public class DefaultPropertyStorageNameMapper implements NameMapper<String>
+{
+ public String createName(String source)
+ {
+ return (PropertyStorage.class.getName().equals(source)) ?
+ DefaultPropertyStorage.class.getName() : null;
+ }
+}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java Sat Nov 28 19:13:41 2009
@@ -20,8 +20,6 @@
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;
@@ -78,7 +76,7 @@
FacesContext facesContext, UIComponent uiComponent, FacesMessage.Severity severity);
/**
- * available for add-ons not used internally due to performance reasons
+ * available for add-ons - not used internally due to performance reasons
*
* @param facesContext current faces context
* @param uiComponent current component
@@ -86,7 +84,6 @@
* @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/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java Sat Nov 28 19:13:41 2009
@@ -23,6 +23,8 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import java.beans.Introspector;
+
/**
* Name Mapper which delegates the name mapping, extract the name and convert it to a bean name + prefix
* target: configure a validation strategy via a managed bean facility -> allows to inject other beans
@@ -58,6 +60,6 @@
}
name = name.substring(name.lastIndexOf(".") + 1);
- return PREFIX_FOR_BEAN_MAPPING + name.substring(0, 1).toLowerCase() + name.substring(1);
+ return PREFIX_FOR_BEAN_MAPPING + Introspector.decapitalize(name);
}
}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java Sat Nov 28 19:13:41 2009
@@ -507,11 +507,41 @@
public static ValidationParameterExtractor getValidationParameterExtractor()
{
+ if(isValidationParameterExtractionDeactivated())
+ {
+ return new ValidationParameterExtractor() {
+
+ public Map<Object, List<Object>> extract(Annotation annotation)
+ {
+ return new HashMap<Object, List<Object>>();
+ }
+
+ public List<Object> extract(Annotation annotation, Object key)
+ {
+ return new ArrayList<Object>();
+ }
+
+ public <T> List<T> extract(Annotation annotation, Object key, Class<T> valueType)
+ {
+ return new ArrayList<T>();
+ }
+
+ public <T> T extract(Annotation annotation, Object key, Class<T> valueType, Class valueId)
+ {
+ return null;
+ }
+ };
+ }
return ExtValContext.getContext().getFactoryFinder().getFactory(
FactoryNames.VALIDATION_PARAMETER_EXTRACTOR_FACTORY, ValidationParameterExtractorFactory.class)
.create();
}
+ private static boolean isValidationParameterExtractionDeactivated()
+ {
+ return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_VALIDATION_PARAMETERS);
+ }
+
public static boolean executeLocalBeforeValidationInterceptors(FacesContext facesContext,
UIComponent uiComponent,
Object convertedObject,
@@ -874,7 +904,7 @@
return interpreter.severityBlocksSubmit(facesContext, targetComponent, facesMessage.getSeverity());
}
- //available for add-ons not used internally due to performance reasons
+ //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/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java Sat Nov 28 19:13:41 2009
@@ -26,6 +26,7 @@
import javax.validation.ConstraintValidatorFactory;
import javax.validation.ConstraintValidator;
+import java.beans.Introspector;
/**
* @author Gerhard Petracek
@@ -66,6 +67,6 @@
private String createBeanName(String validatorClassName)
{
- return validatorClassName.substring(0, 1).toLowerCase() + validatorClassName.substring(1);
+ return Introspector.decapitalize(validatorClassName);
}
-}
+}
\ No newline at end of file
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java Sat Nov 28 19:13:41 2009
@@ -24,8 +24,6 @@
import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipRendererDelegationException;
-import org.apache.myfaces.extensions.validator.internal.Priority;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -42,7 +40,6 @@
* @author Gerhard Petracek
* @since x.x.3
*/
-@ToDo(value = Priority.HIGH, description = "sync jsf 2.0 specific changes with bv-branch")
@UsageInformation(UsageCategory.INTERNAL)
public class BeanValidationInterceptor extends AbstractValidationInterceptor
{
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/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/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java Sat Nov 28 19:13:41 2009
@@ -23,6 +23,8 @@
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 org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
import javax.faces.context.FacesContext;
@@ -30,6 +32,7 @@
* @author Gerhard Petracek
* @since x.x.3
*/
+@ToDo(value = Priority.MEDIUM, description = "use meta-data storage - but a special impl.")
public class DefaultGroupControllerScanningExtractor extends DefaultComponentMetaDataExtractor
{
@Override
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java?rev=885130&r1=885129&r2=885130&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java Sat Nov 28 19:13:41 2009
@@ -37,6 +37,7 @@
* @author Gerhard Petracek
* @since 1.x.1
*/
+@Deprecated
@UsageInformation(UsageCategory.INTERNAL)
public class DefaultPropertyScanningMetaDataExtractor extends DefaultComponentMetaDataExtractor
{