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/10/22 05:22:30 UTC

svn commit: r828290 - in /myfaces/extensions/validator/branches/trunk_severity_test: core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ core/src/main/jav...

Author: gpetracek
Date: Thu Oct 22 03:22:27 2009
New Revision: 828290

URL: http://svn.apache.org/viewvc?rev=828290&view=rev
Log:
[intermediate result] advanced severity approach - step 3

Added:
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorage.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorageManager.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageHolder.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageStorage.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/ValidationResult.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesMessageStorageNameMapper.java
Modified:
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
    myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/message/FacesMessageHolder.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
    myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/test/java/org/apache/myfaces/extensions/validator/test/core/interceptor/RegistrationPropertyValidationInterceptorTestCase.java

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/FacesMessagePropertyValidationInterceptor.java Thu Oct 22 03:22:27 2009
@@ -0,0 +1,60 @@
+/*
+ * 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.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.storage.FacesMessageStorage;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+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.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@InvocationOrder(900)
+@UsageInformation(UsageCategory.INTERNAL)
+public class FacesMessagePropertyValidationInterceptor implements PropertyValidationInterceptor
+{
+    protected final Log logger = LogFactory.getLog(getClass());
+
+    public boolean beforeValidation(
+            FacesContext facesContext, UIComponent uiComponent, Object convertedObject, Map<String, Object> properties)
+    {
+        return true;
+    }
+
+    public void afterValidation(
+            FacesContext facesContext, UIComponent uiComponent, Object convertedObject, Map<String, Object> properties)
+    {
+        FacesMessageStorage facesMessageStorage = ExtValUtils.getStorage(
+                FacesMessageStorage.class, FacesMessageStorage.class.getName());
+
+        if(facesMessageStorage != null)
+        {
+            facesMessageStorage.addAll();
+        }
+    }
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/startup/ExtValStartupListener.java Thu Oct 22 03:22:27 2009
@@ -23,6 +23,7 @@
 import org.apache.myfaces.extensions.validator.core.interceptor.ValidationInterceptor;
 import org.apache.myfaces.extensions.validator.core.interceptor.HtmlCoreComponentsValidationExceptionInterceptor;
 import org.apache.myfaces.extensions.validator.core.interceptor.ViolationSeverityValidationExceptionInterceptor;
+import org.apache.myfaces.extensions.validator.core.interceptor.FacesMessagePropertyValidationInterceptor;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.CustomInformation;
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
@@ -92,7 +93,8 @@
 
         initNameMappers();
         initValidationExceptionInterceptors();
-        initViolationSeverityInterpreters();
+        initViolationSeverityInterceptors();
+        initPropertyValidationInterceptors();
         executeCustomStartupListener();
     }
 
@@ -183,8 +185,13 @@
                 new ViolationSeverityValidationExceptionInterceptor());
     }
 
-    private void initViolationSeverityInterpreters()
+    private void initViolationSeverityInterceptors()
     {
         ExtValContext.getContext().setViolationSeverityInterpreter(new DefaultViolationSeverityInterpreter(), false);
     }
+
+    private void initPropertyValidationInterceptors()
+    {
+        ExtValContext.getContext().addPropertyValidationInterceptor(new FacesMessagePropertyValidationInterceptor());
+    }
 }

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorage.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorage.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorage.java Thu Oct 22 03:22:27 2009
@@ -0,0 +1,92 @@
+/*
+ * 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 org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public class DefaultFacesMessageStorage implements FacesMessageStorage
+{
+    Map<String, ValidationResult> results = new HashMap<String, ValidationResult>();
+
+    public void addFacesMessage(String componentId, FacesMessage facesMessage)
+    {
+        if(componentId == null)
+        {
+            componentId = "*";
+        }
+
+        if(!this.results.containsKey(componentId))
+        {
+            this.results.put(componentId, new ValidationResult());
+        }
+
+        this.results.get(componentId).addFacesMessageHolder(new FacesMessageHolder(facesMessage, componentId));
+    }
+
+    public Map<String, FacesMessage> getFacesMessages()
+    {
+        Map<String, FacesMessage> result = new HashMap<String, FacesMessage>();
+
+        for(ValidationResult validationResult : this.results.values())
+        {
+            for(FacesMessageHolder facesMessageHolder : validationResult.getFacesMessageHolderList())
+            {
+                result.put(facesMessageHolder.getClientId(), facesMessageHolder.getFacesMessage());
+            }
+        }
+        return result;
+    }
+
+    public void addAll()
+    {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        List<FacesMessageHolder> facesMessageHolderList;
+
+        for(ValidationResult validationResult : this.results.values())
+        {
+            facesMessageHolderList = validationResult.getFacesMessageHolderList();
+            sortFacesMessageHolderList(facesMessageHolderList);
+
+            for(FacesMessageHolder facesMessageHolder : facesMessageHolderList)
+            {
+                facesContext.addMessage(facesMessageHolder.getClientId(), facesMessageHolder.getFacesMessage());
+            }
+        }
+    }
+
+    @ToDo(Priority.HIGH)
+    private void sortFacesMessageHolderList(List<FacesMessageHolder> facesMessageHolderList)
+    {
+        //sort severities
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorageManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorageManager.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorageManager.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultFacesMessageStorageManager.java Thu Oct 22 03:22:27 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.DefaultFacesMessageStorageNameMapper;
+
+/**
+ * default storage-manager for faces messages
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(INTERNAL)
+class DefaultFacesMessageStorageManager extends AbstractRequestScopeAwareStorageManager<FacesMessageStorage>
+{
+    DefaultFacesMessageStorageManager()
+    {
+        register(new DefaultFacesMessageStorageNameMapper());
+    }
+
+    public String getStorageManagerKey()
+    {
+        return StorageManager.class.getName() + "_FOR_FACES_MESSAGES:KEY";
+    }
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java Thu Oct 22 03:22:27 2009
@@ -62,6 +62,7 @@
         setStorageManager(RendererProxyStorage.class, new DefaultRendererProxyStorageManager(), false);
         setStorageManager(GroupStorage.class, new DefaultGroupStorageManager(), false);
         setStorageManager(MetaDataStorage.class, new DefaultMetaDataStorageManager(), false);
+        setStorageManager(FacesMessageStorage.class, new DefaultFacesMessageStorageManager(), false);
     }
 
     public StorageManager create(Class storageType)

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageHolder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageHolder.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageHolder.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageHolder.java Thu Oct 22 03:22:27 2009
@@ -0,0 +1,67 @@
+/*
+ * 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 org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
+
+import javax.faces.application.FacesMessage;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@ToDo(value = Priority.LOW, description = "refactor it")
+@UsageInformation(UsageCategory.INTERNAL)
+class FacesMessageHolder
+{
+    private FacesMessage facesMessage;
+    private String clientId;
+
+    public FacesMessageHolder(FacesMessage facesMessage)
+    {
+        this.facesMessage = facesMessage;
+    }
+
+    FacesMessageHolder(FacesMessage facesMessage, String clientId)
+    {
+        this.facesMessage = facesMessage;
+        setClientId(clientId);
+    }
+
+    public FacesMessage getFacesMessage()
+    {
+        return facesMessage;
+    }
+
+    public String getClientId()
+    {
+        return clientId;
+    }
+
+    public void setClientId(String clientId)
+    {
+        if(!"*".equals(clientId))
+        {
+            this.clientId = clientId;
+        }
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageStorage.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageStorage.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/FacesMessageStorage.java Thu Oct 22 03:22:27 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.application.FacesMessage;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface FacesMessageStorage
+{
+    void addFacesMessage(String componentId, FacesMessage facesMessage);
+
+    Map<String, FacesMessage> getFacesMessages();
+
+    void addAll();
+}
\ No newline at end of file

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/ValidationResult.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/ValidationResult.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/ValidationResult.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/ValidationResult.java Thu Oct 22 03:22:27 2009
@@ -0,0 +1,48 @@
+/*
+ * 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 org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@ToDo(value = Priority.LOW, description = "refactor it")
+@UsageInformation(UsageCategory.INTERNAL)
+class ValidationResult
+{
+    private List<FacesMessageHolder> facesMessageHolderList = new ArrayList<FacesMessageHolder>();
+
+    public void addFacesMessageHolder(FacesMessageHolder facesMessageHolder)
+    {
+        this.facesMessageHolderList.add(facesMessageHolder);
+    }
+
+    public List<FacesMessageHolder> getFacesMessageHolderList()
+    {
+        return facesMessageHolderList;
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesMessageStorageNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesMessageStorageNameMapper.java?rev=828290&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesMessageStorageNameMapper.java (added)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultFacesMessageStorageNameMapper.java Thu Oct 22 03:22:27 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.DefaultFacesMessageStorage;
+import org.apache.myfaces.extensions.validator.core.storage.FacesMessageStorage;
+
+/**
+ * use a public class to allow optional deregistration
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+public class DefaultFacesMessageStorageNameMapper implements NameMapper<String>
+{
+    public String createName(String source)
+    {
+        return (FacesMessageStorage.class.getName().equals(source)) ?
+                DefaultFacesMessageStorage.class.getName() : null;
+    }
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java Thu Oct 22 03:22:27 2009
@@ -31,6 +31,7 @@
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.storage.StorageManager;
+import org.apache.myfaces.extensions.validator.core.storage.FacesMessageStorage;
 import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
 import org.apache.myfaces.extensions.validator.core.interceptor.ValidationExceptionInterceptor;
 import org.apache.myfaces.extensions.validator.core.interceptor.MetaDataExtractionInterceptor;
@@ -653,7 +654,8 @@
         return propertyInformation.getInformation(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
     }
 
-    public static void tryToThrowValidatorException(String clientId, FacesMessage facesMessage, Throwable throwable)
+    public static void tryToThrowValidatorExceptionForComponentId(
+            String clientId, FacesMessage facesMessage, Throwable throwable)
     {
         UIComponent targetComponent = findComponent(clientId);
 
@@ -685,21 +687,20 @@
         }
     }
 
-    public static void tryToAddViolationMessage(String clientId, FacesMessage facesMessage)
+    public static void tryToAddViolationMessageForComponentId(String clientId, FacesMessage facesMessage)
     {
         UIComponent targetComponent = findComponent(clientId);
 
         if(targetComponent == null && clientId != null)
         {
-            //workaround for testcases
-            tryToAddViolationMessageForClientId(clientId, facesMessage);
+            tryToAddViolationMessageForTestClientId(clientId, facesMessage);
             return;
         }
         tryToAddViolationMessageForComponent(targetComponent, facesMessage);
     }
 
-    @ToDo(Priority.MEDIUM)
-    private static void tryToAddViolationMessageForClientId(String clientId, FacesMessage facesMessage)
+    @ToDo(value = Priority.MEDIUM, description = "required for test frameworks - goal: remove it")
+    private static void tryToAddViolationMessageForTestClientId(String clientId, FacesMessage facesMessage)
     {
         ViolationSeverityInterpreter interpreter =
                 ExtValContext.getContext().getViolationSeverityInterpreter();
@@ -708,7 +709,7 @@
 
         if(interpreter.severityCausesViolationMessage(facesContext, null, facesMessage.getSeverity()))
         {
-            facesContext.addMessage(null, facesMessage);
+            addFacesMessage(clientId, facesMessage);
         }
         tryToBlocksNavigationForComponent(null, facesMessage);
     }
@@ -724,7 +725,7 @@
         {
             if(uiComponent != null)
             {
-                facesContext.addMessage(uiComponent.getClientId(facesContext), facesMessage);
+                addFacesMessage(uiComponent.getClientId(facesContext), facesMessage);
             }
             else
             {
@@ -738,7 +739,26 @@
         tryToBlocksNavigationForComponent(uiComponent, facesMessage);
     }
 
-    public static void tryToBlocksNavigation(String clientId, FacesMessage facesMessage)
+    public static void addFacesMessage(FacesMessage facesMessage)
+    {
+        addFacesMessage(null, facesMessage);
+    }
+
+    public static void addFacesMessage(String clientId, FacesMessage facesMessage)
+    {
+        FacesMessageStorage storage = getStorage(FacesMessageStorage.class, FacesMessageStorage.class.getName());
+
+        if(storage != null)
+        {
+            storage.addFacesMessage(clientId, facesMessage);
+        }
+        else
+        {
+            FacesContext.getCurrentInstance().addMessage(clientId, facesMessage);
+        }
+    }
+
+    public static void tryToBlocksNavigationForComponentId(String clientId, FacesMessage facesMessage)
     {
         UIComponent targetComponent = findComponent(clientId);
 
@@ -758,7 +778,7 @@
         }
     }
 
-    public static boolean severityBlocksSubmit(String clientId, FacesMessage facesMessage)
+    public static boolean severityBlocksSubmitForComponentId(String clientId, FacesMessage facesMessage)
     {
         ViolationSeverityInterpreter interpreter =
                 ExtValContext.getContext().getViolationSeverityInterpreter();
@@ -769,7 +789,7 @@
         return interpreter.severityBlocksSubmit(facesContext, targetComponent, facesMessage.getSeverity());
     }
 
-    public static boolean severityShowsIndication(String clientId, FacesMessage facesMessage)
+    public static boolean severityShowsIndicationForComponentId(String clientId, FacesMessage facesMessage)
     {
         ViolationSeverityInterpreter interpreter =
                 ExtValContext.getContext().getViolationSeverityInterpreter();

Modified: myfaces/extensions/validator/branches/trunk_severity_test/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/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/AbstractBeanValidationMetaDataTransformer.java Thu Oct 22 03:22:27 2009
@@ -83,7 +83,7 @@
                 testMessage.setSeverity(ViolationSeverity.Fatal.VALUE);
             }
         }
-        return ExtValUtils.severityBlocksSubmit(null, testMessage);
+        return ExtValUtils.severityBlocksSubmitForComponentId(null, testMessage);
     }
     protected abstract Map<String, Object> convertConstraintDescriptor(ConstraintDescriptor<T> constraintDescriptor);
 }

Modified: myfaces/extensions/validator/branches/trunk_severity_test/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/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java Thu Oct 22 03:22:27 2009
@@ -581,7 +581,7 @@
         if (!facesMessageListWithHighSeverity.isEmpty() && firstErrorCausesAnException)
         {
             FacesMessageHolder facesMessageHolder = facesMessageListWithHighSeverity.iterator().next();
-            ExtValUtils.tryToThrowValidatorException(
+            ExtValUtils.tryToThrowValidatorExceptionForComponentId(
                     facesMessageHolder.getClientId(), facesMessageHolder.getFacesMessage(), null);
         }
     }
@@ -631,7 +631,7 @@
             }
             else
             {
-                ExtValUtils.tryToAddViolationMessage(
+                ExtValUtils.tryToAddViolationMessageForComponentId(
                         facesMessageHolder.getClientId(), facesMessageHolder.getFacesMessage());
             }
         }
@@ -641,7 +641,7 @@
     {
         for (FacesMessageHolder facesMessageHolder : facesMessageHolderListWithLowSeverity)
         {
-            ExtValUtils.tryToAddViolationMessage(
+            ExtValUtils.tryToAddViolationMessageForComponentId(
                     facesMessageHolder.getClientId(), facesMessageHolder.getFacesMessage());
         }
     }

Modified: myfaces/extensions/validator/branches/trunk_severity_test/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/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java Thu Oct 22 03:22:27 2009
@@ -25,6 +25,8 @@
 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 javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -102,6 +104,7 @@
         }
     }
 
+    @ToDo(value = Priority.HIGH, description = "refactor and remove FacesContext#renderResponse")
     private void validateTarget(ModelValidationEntry modelValidationEntry,
                                 Object validationTarget,
                                 Class[] groups,

Modified: myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/message/FacesMessageHolder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/message/FacesMessageHolder.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/message/FacesMessageHolder.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/message/FacesMessageHolder.java Thu Oct 22 03:22:27 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.application.FacesMessage;
 
@@ -27,20 +29,22 @@
  * @author Gerhard Petracek
  * @since x.x.3
  */
+@Deprecated
+@ToDo(Priority.HIGH)
 @UsageInformation(UsageCategory.INTERNAL)
 public class FacesMessageHolder
 {
-    private FacesMessage wrappedMessage;
+    private FacesMessage facesMessage;
     private String clientId;
 
-    public FacesMessageHolder(FacesMessage wrappedMessage)
+    public FacesMessageHolder(FacesMessage facesMessage)
     {
-        this.wrappedMessage = wrappedMessage;
+        this.facesMessage = facesMessage;
     }
 
     public FacesMessage getFacesMessage()
     {
-        return wrappedMessage;
+        return facesMessage;
     }
 
     public String getClientId()

Modified: myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java Thu Oct 22 03:22:27 2009
@@ -121,10 +121,10 @@
                         if (facesMessage != null &&
                                 facesMessage.getSummary() != null && facesMessage.getDetail() != null)
                         {
-                            ExtValUtils.tryToAddViolationMessage(entry.getClientId(), facesMessage);
+                            ExtValUtils.tryToAddViolationMessageForComponentId(entry.getClientId(), facesMessage);
                         }
 
-                        event.getFacesContext().renderResponse();
+                        ExtValUtils.tryToBlocksNavigationForComponentId(entry.getClientId(), facesMessage);
                     }
                 }
                 finally

Modified: myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java Thu Oct 22 03:22:27 2009
@@ -166,7 +166,7 @@
                     entryOfTarget.getComponent(), entryOfTarget.getMetaDataEntry(),
                     entryOfTarget.getConvertedObject(), validatorException, this))
             {
-                ExtValUtils.tryToAddViolationMessage(entryOfTarget.getClientId(),
+                ExtValUtils.tryToAddViolationMessageForComponentId(entryOfTarget.getClientId(),
                         ExtValUtils.convertFacesMessage(validatorException.getFacesMessage()));
             }
         }

Modified: myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/test/java/org/apache/myfaces/extensions/validator/test/core/interceptor/RegistrationPropertyValidationInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/test/java/org/apache/myfaces/extensions/validator/test/core/interceptor/RegistrationPropertyValidationInterceptorTestCase.java?rev=828290&r1=828289&r2=828290&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/test/java/org/apache/myfaces/extensions/validator/test/core/interceptor/RegistrationPropertyValidationInterceptorTestCase.java (original)
+++ myfaces/extensions/validator/branches/trunk_severity_test/validation-modules/property-validation/src/test/java/org/apache/myfaces/extensions/validator/test/core/interceptor/RegistrationPropertyValidationInterceptorTestCase.java Thu Oct 22 03:22:27 2009
@@ -22,6 +22,7 @@
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.InvocationOrder;
 import org.apache.myfaces.extensions.validator.core.interceptor.PropertyValidationInterceptor;
+import org.apache.myfaces.extensions.validator.core.interceptor.FacesMessagePropertyValidationInterceptor;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
@@ -57,7 +58,7 @@
 
         List<PropertyValidationInterceptor> result = ExtValContext.getContext().getPropertyValidationInterceptors();
 
-        int resultLength = 5;
+        int resultLength = 6;
         assertEquals(resultLength, result.size());
 
         for(int i = 0; i < resultLength; i++)
@@ -74,9 +75,12 @@
                     assertEquals(TestMetaDataExtractionInterceptor3.class, result.get(i).getClass());
                     break;
                 case 3:
-                    assertEquals(TestMetaDataExtractionInterceptor1000.class, result.get(i).getClass());
+                    assertEquals(FacesMessagePropertyValidationInterceptor.class, result.get(i).getClass());
                     break;
                 case 4:
+                    assertEquals(TestMetaDataExtractionInterceptor1000.class, result.get(i).getClass());
+                    break;
+                case 5:
                     assertEquals(TestComponentInitializer.class, result.get(i).getClass());
                     break;
             }