1 /*** 2 * Copyright (C) 2006 Philipp Mpalampanis 3 * 4 * License: MPL 1.1/GPL 2.0/LGPL 2.1 5 * 6 * The contents of this file are subject to the Mozilla Public License Version 7 * 1.1 (the "License"); you may not use this file except in compliance with 8 * the License. You may obtain a copy of the License at 9 * http://www.mozilla.org/MPL/ 10 * 11 * Software distributed under the License is distributed on an "AS IS" basis, 12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 13 * for the specific language governing rights and limitations under the 14 * License. 15 * 16 * Alternatively, the contents of this file may be used under the terms of 17 * either the GNU General Public License Version 2 or later (the "GPL"), or 18 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 19 * in which case the provisions of the GPL or the LGPL are applicable instead 20 * of those above. If you wish to allow use of your version of this file only 21 * under the terms of either the GPL or the LGPL, and not to allow others to 22 * use your version of this file under the terms of the MPL, indicate your 23 * decision by deleting the provisions above and replace them with the notice 24 * and other provisions required by the GPL or the LGPL. If you do not delete 25 * the provisions above, a recipient may use your version of this file under 26 * the terms of any one of the MPL, the GPL or the LGPL. 27 */ 28 29 package net.sf.echobinding.datacontrol; 30 31 import net.sf.echobinding.BoundControl; 32 import nextapp.echo2.app.Component; 33 34 /*** 35 * Utility class for validating and inspecting forms. 36 * 37 * @deprecated 38 */ 39 public class FormHelper { 40 41 /*** 42 * Recursively loads the values of all widgets within this component and all 43 * its child components thus loading the values from the model into the 44 * widgets. 45 * 46 * @param component 47 */ 48 public static void invokePropertyGetters(Component component) { 49 50 Component subComponent; 51 for (int i = 0; i < component.getComponentCount(); i++) { 52 subComponent = component.getComponent(i); 53 if (subComponent instanceof BoundControl) { 54 ((BoundControl) subComponent).update(); 55 } 56 invokePropertyGetters(subComponent); 57 } 58 59 } 60 61 /*** 62 * Recursively saves the values of all widgets within this component and all 63 * its child components thus writing the values from the widgets into the 64 * model. 65 * 66 * @param component 67 */ 68 public static void invokePropertySetters(Component component) { 69 70 Component subComponent; 71 for (int i = 0; i < component.getComponentCount(); i++) { 72 subComponent = component.getComponent(i); 73 if (subComponent instanceof BoundControl) { 74 ((BoundControl) subComponent).save(); 75 } 76 invokePropertySetters(subComponent); 77 } 78 79 } 80 81 /*** 82 * Recursively validates the values of all widgets within this component and 83 * all its child components. Invalid inputs will be reported by the widget's 84 * <code>ValidationHandler</code>. 85 * 86 * @param component 87 */ 88 public static void invokeValidationHandlers(Component component) { 89 90 Component subComponent; 91 for (int i = 0; i < component.getComponentCount(); i++) { 92 subComponent = component.getComponent(i); 93 if (subComponent instanceof BoundControl) { 94 ((BoundControl) subComponent).validateInput(); 95 } 96 invokeValidationHandlers(subComponent); 97 } 98 99 } 100 101 /*** 102 * Recursively checks the values of all widgets within this component and 103 * all its child components. 104 * 105 * @param component 106 */ 107 public static boolean isValid(Component component) { 108 109 boolean isValid = true; 110 Component subComponent; 111 for (int i = 0; i < component.getComponentCount(); i++) { 112 subComponent = component.getComponent(i); 113 if (subComponent instanceof BoundControl) { 114 isValid = ((BoundControl) subComponent).isValid(); 115 } 116 isValid &= isValid(subComponent); 117 } 118 119 return isValid; 120 } 121 122 /*** 123 * Recursively tests if the values in the widgets have changed. 124 * 125 * @param component 126 */ 127 public static boolean isDirty(Component component) { 128 129 boolean isDirty = false; 130 Component subComponent; 131 for (int i = 0; i < component.getComponentCount(); i++) { 132 subComponent = component.getComponent(i); 133 if (subComponent instanceof BoundControl) { 134 isDirty = ((BoundControl) subComponent).isValid(); 135 } 136 isDirty &= isDirty(subComponent); 137 } 138 139 return isDirty; 140 } 141 }