Revision: 1756
          http://svn.sourceforge.net/spring-rich-c/?rev=1756&view=rev
Author:   jhoskens
Date:     2007-05-22 05:56:35 -0700 (Tue, 22 May 2007)

Log Message:
-----------
Parent/child nesting of ValidationResultsReporter replaced by nesting of 
ValidationResultsModels.
The former was a bad idea and was a pain when managing a huge hierarchy. The 
latter solves this by
chaining the models and providing the opportunity to bundle results and their 
events.

Modified Paths:
--------------
    
trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java
    
trunk/spring-richclient/support/src/main/java/org/springframework/binding/validation/support/DefaultValidationResultsModel.java
    
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/AbstractForm.java
    
trunk/spring-richclient/support/src/test/java/org/springframework/binding/validation/DefaultValidationResultsModelTests.java

Modified: 
trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java
===================================================================
--- 
trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java
        2007-05-22 12:52:55 UTC (rev 1755)
+++ 
trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java
        2007-05-22 12:56:35 UTC (rev 1756)
@@ -157,13 +157,19 @@
     {
         super.addChild(child);
         if (child instanceof ValidatingFormModel)
+        {
+            
getValidationResults().add(((ValidatingFormModel)child).getValidationResults());
             
child.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, 
errorChangeHandler);
+        }
     }
 
     public void removeChild(HierarchicalFormModel child)
     {
         if (child instanceof ValidatingFormModel)
+        {
+            
getValidationResults().remove(((ValidatingFormModel)child).getValidationResults());
             
child.removePropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, 
errorChangeHandler);
+        }
         super.removeChild(child);
     }
 

Modified: 
trunk/spring-richclient/support/src/main/java/org/springframework/binding/validation/support/DefaultValidationResultsModel.java
===================================================================
--- 
trunk/spring-richclient/support/src/main/java/org/springframework/binding/validation/support/DefaultValidationResultsModel.java
     2007-05-22 12:52:55 UTC (rev 1755)
+++ 
trunk/spring-richclient/support/src/main/java/org/springframework/binding/validation/support/DefaultValidationResultsModel.java
     2007-05-22 12:56:35 UTC (rev 1756)
@@ -18,6 +18,7 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -38,7 +39,7 @@
  * 
  * @author  Oliver Hutchison
  */
-public class DefaultValidationResultsModel implements ValidationResultsModel {
+public class DefaultValidationResultsModel implements ValidationResultsModel, 
ValidationListener {
 
     private final EventListenerListHelper validationListeners = new 
EventListenerListHelper(ValidationListener.class);
 
@@ -57,6 +58,8 @@
     };
 
     private final ValidationResultsModel delegateFor;
+    
+    private List children = new ArrayList();
 
     private ValidationResults validationResults = 
EmptyValidationResults.INSTANCE;
 
@@ -130,40 +133,115 @@
         updateValidationResults(EmptyValidationResults.INSTANCE);
     }
 
+    /**
+     * Check children too.
+     */
     public boolean getHasErrors() {
-        return validationResults.getHasErrors();
+       if (validationResults.getHasErrors())
+               return true;
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               if (childModel.getHasErrors())
+                       return true;
+       }
+        return false;
     }
 
     public boolean getHasInfo() {
-        return validationResults.getHasInfo();
+       if (validationResults.getHasInfo())
+               return true;
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               if (childModel.getHasInfo())
+                       return true;
+       }
+        return false;
     }
 
     public boolean getHasWarnings() {
-        return validationResults.getHasWarnings();
+       if (validationResults.getHasWarnings())
+               return true;
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               if (childModel.getHasWarnings())
+                       return true;
+       }
+        return false;
     }
 
     public int getMessageCount() {
-        return validationResults.getMessageCount();
+       int count = validationResults.getMessageCount();
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               count += childModel.getMessageCount();
+       }
+        return count;
     }
 
     public int getMessageCount(Severity severity) {
-        return validationResults.getMessageCount(severity);
+       int count = validationResults.getMessageCount(severity);
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               count += childModel.getMessageCount(severity);
+       }
+        return count;
     }
 
     public int getMessageCount(String propertyName) {
-        return validationResults.getMessageCount(propertyName);
+       int count = validationResults.getMessageCount(propertyName);
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               count += childModel.getMessageCount(propertyName);
+       }
+        return count;
     }
 
     public Set getMessages() {
-        return validationResults.getMessages();
+       Set messages = new HashSet();
+       messages.addAll(validationResults.getMessages());
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               messages.addAll(childModel.getMessages());
+       }
+        return messages;
     }
 
     public Set getMessages(Severity severity) {
-        return validationResults.getMessages(severity);
+       Set messages = new HashSet();
+       messages.addAll(validationResults.getMessages(severity));
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               messages.addAll(childModel.getMessages(severity));
+       }
+        return messages;
     }
 
     public Set getMessages(String propertyName) {
-        return validationResults.getMessages(propertyName);
+       Set messages = new HashSet();
+       messages.addAll(validationResults.getMessages(propertyName));
+       Iterator childIter = children.iterator();
+       while (childIter.hasNext())
+       {
+               ValidationResultsModel childModel = 
(ValidationResultsModel)childIter.next();
+               messages.addAll(childModel.getMessages(propertyName));
+       }
+        return messages;
     }
 
     public void addValidationListener(ValidationListener listener) {
@@ -237,4 +315,31 @@
     public String toString() {
         return new ToStringCreator(this).append("messages", 
getMessages()).toString();
     }
+    
+    
+    /**
+     * Add a validationResultsModel as a child to this one.
+     * 
+     * @param validationResultsModel
+     */
+    public void add(ValidationResultsModel validationResultsModel)
+    {
+       children.add(validationResultsModel);
+       validationResultsModel.addValidationListener(this);
+    }
+    
+    /**
+     * Remove the given validationResultsModel from the list of children.
+     * 
+     * @param validationResultsModel
+     */
+    public void remove(ValidationResultsModel validationResultsModel)
+    {
+       if (children.remove(validationResultsModel))
+               validationResultsModel.removeValidationListener(this);
+    }
+    
+    public void validationResultsChanged(ValidationResults results) {
+       fireValidationResultsChanged();
+    }
 }
\ No newline at end of file

Modified: 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/AbstractForm.java
===================================================================
--- 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/AbstractForm.java
 2007-05-22 12:52:55 UTC (rev 1755)
+++ 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/AbstractForm.java
 2007-05-22 12:56:35 UTC (rev 1756)
@@ -19,7 +19,6 @@
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -190,12 +189,6 @@
     public void addChildForm(Form childForm) {
         childForms.put( childForm.getId(), childForm );
         getFormModel().addChild(childForm.getFormModel());
-        Iterator it = validationResultsReporters.iterator();
-        while (it.hasNext())
-        {
-            ValidationResultsReporter reporter = 
(ValidationResultsReporter)it.next();
-            
childForm.addValidationResultsReporter(reporter.createChild(childForm.getFormModel().getValidationResults()));
-        }
     }
     
     /**
@@ -228,12 +221,6 @@
     public void removeChildForm(Form childForm) {
         getFormModel().removeChild(childForm.getFormModel());
         childForms.remove(childForm.getId());
-        Iterator it = childForm.getValidationResultsReporters().iterator();
-        while (it.hasNext())
-        {
-            ValidationResultsReporter reporter = 
(ValidationResultsReporter)it.next();
-            reporter.removeParent();
-        }
     }
     /**
      * Return a child form of this form with the given form id.
@@ -646,20 +633,11 @@
      * will be constructed and returned.  All registered child forms will be 
attached
      * to the same <code>guarded</code> and <code>messageReceiver</code> as 
this form.
      */
-    public ValidationResultsReporter newSingleLineResultsReporter(Guarded 
guarded, Messagable messageReceiver) {
+    public ValidationResultsReporter newSingleLineResultsReporter(Messagable 
messageReceiver) {
 
         SimpleValidationResultsReporter reporter =
-            new SimpleValidationResultsReporter( 
formModel.getValidationResults(), guarded, messageReceiver );
+            new SimpleValidationResultsReporter( 
formModel.getValidationResults(), messageReceiver );
 
-        // Configure all our child forms with this same data
-        for( Iterator iter = childForms.values().iterator(); iter.hasNext(); ) 
{
-            Form childForm = (Form) iter.next();
-            ValidationResultsReporter child = 
childForm.newSingleLineResultsReporter( guarded, messageReceiver );
-            reporter.addChild( child );
-            childForm.getFormModel().validate();    // Force an initial 
validation
-        }
-        validationResultsReporters.add(reporter);
-        
         return reporter;
     }
 
@@ -698,4 +676,16 @@
     public void reset() {
         getFormModel().reset();
     }
+    
+    public void addGuarded(Guarded guarded) {
+               formGuard.addGuarded(guarded, FormGuard.FORMERROR_GUARDED);
+       }
+
+       public void addGuarded(Guarded guarded, int mask) {
+               formGuard.addGuarded(guarded, mask);
+       }
+
+       public void removeGuarded(Guarded guarded) {
+               formGuard.removeGuarded(guarded);
+       }
 }
\ No newline at end of file

Modified: 
trunk/spring-richclient/support/src/test/java/org/springframework/binding/validation/DefaultValidationResultsModelTests.java
===================================================================
--- 
trunk/spring-richclient/support/src/test/java/org/springframework/binding/validation/DefaultValidationResultsModelTests.java
        2007-05-22 12:52:55 UTC (rev 1755)
+++ 
trunk/spring-richclient/support/src/test/java/org/springframework/binding/validation/DefaultValidationResultsModelTests.java
        2007-05-22 12:56:35 UTC (rev 1756)
@@ -18,6 +18,7 @@
 import junit.framework.TestCase;
 
 import org.springframework.binding.support.TestPropertyChangeListener;
+import org.springframework.binding.validation.support.DefaultValidationMessage;
 import org.springframework.binding.validation.support.DefaultValidationResults;
 import 
org.springframework.binding.validation.support.DefaultValidationResultsModel;
 
@@ -141,6 +142,16 @@
         assertEquals(3, field1Listener.eventCount());
         assertEquals(3, nullListener.eventCount());
     }
+    
+    public void testMessageCount() {
+       DefaultValidationResultsModel resultsModel = new 
DefaultValidationResultsModel();
+       resultsModel.addMessage(new DefaultValidationMessage("property1", 
Severity.ERROR, "message1"));
+       resultsModel.addMessage(new DefaultValidationMessage("property1", 
Severity.INFO, "message2"));
+       resultsModel.addMessage(new DefaultValidationMessage("property2", 
Severity.ERROR, "message3"));
+       assertEquals("Number of messages should be 3", 3, 
resultsModel.getMessageCount());
+       assertEquals("Number of messages registered for property1 should be 2", 
2, resultsModel.getMessageCount("property1"));
+       assertEquals("Number of messages flagged as INFO should be 1", 1, 
resultsModel.getMessageCount(Severity.INFO));
+    }
 
     private ValidationResults getResults(String field, Severity severity) {
         DefaultValidationResults vr = new DefaultValidationResults();


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
spring-rich-c-cvs mailing list
spring-rich-c-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spring-rich-c-cvs

Reply via email to