001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.form; 017 018 import org.springframework.binding.form.FormModel; 019 import org.springframework.binding.form.HierarchicalFormModel; 020 import org.springframework.binding.form.ValidatingFormModel; 021 import org.springframework.binding.form.support.DefaultFormModel; 022 import org.springframework.binding.validation.support.RulesValidator; 023 import org.springframework.binding.value.ValueModel; 024 import org.springframework.richclient.dialog.Messagable; 025 import org.springframework.rules.RulesSource; 026 027 /** 028 * This provides a collection of useful functions for working with {@link FormModel}s. 029 * 030 * @author Keith Donald 031 * @author Jim Moore 032 */ 033 public class FormModelHelper { 034 035 public static ValidatingFormModel createFormModel(Object formObject, String formId) { 036 return createFormModel(formObject, true, formId); 037 } 038 039 public static ValidatingFormModel createUnbufferedFormModel(Object formObject, String formId) { 040 return createFormModel(formObject, false, formId); 041 } 042 043 public static ValidatingFormModel createFormModel(Object formObject, boolean bufferChanges, String formId) { 044 DefaultFormModel formModel = new DefaultFormModel(formObject, bufferChanges); 045 formModel.setId(formId); 046 return formModel; 047 } 048 049 public static ValidatingFormModel createFormModel(Object formObject, boolean bufferChanges, RulesSource rulesSource, 050 String formId) { 051 DefaultFormModel formModel = new DefaultFormModel(formObject, bufferChanges); 052 formModel.setId(formId); 053 formModel.setValidator(new RulesValidator(formModel, rulesSource)); 054 return formModel; 055 } 056 057 public static ValidatingFormModel createCompoundFormModel(Object formObject, String formId) { 058 DefaultFormModel model = new DefaultFormModel(formObject); 059 model.setId(formId); 060 return model; 061 } 062 063 public static ValidatingFormModel createFormModel(ValueModel formObjectHolder) { 064 return createFormModel(formObjectHolder, true, null); 065 } 066 067 public static ValidatingFormModel createFormModel(ValueModel formObjectHolder, String formId) { 068 return createFormModel(formObjectHolder, true, formId); 069 } 070 071 public static ValidatingFormModel createUnbufferedFormModel(ValueModel formObjectHolder, String formId) { 072 return createFormModel(formObjectHolder, false, formId); 073 } 074 075 public static ValidatingFormModel createFormModel(ValueModel formObjectHolder, boolean bufferChanges, 076 String formId) { 077 DefaultFormModel formModel = new DefaultFormModel(formObjectHolder, bufferChanges); 078 formModel.setId(formId); 079 return formModel; 080 } 081 082 public static ValidatingFormModel createCompoundFormModel(ValueModel formObjectHolder, String formId) { 083 DefaultFormModel model = new DefaultFormModel(formObjectHolder); 084 model.setId(formId); 085 return model; 086 } 087 088 public static ValidatingFormModel createFormModel(Object formObject) { 089 return createFormModel(formObject, true); 090 } 091 092 public static ValidatingFormModel createUnbufferedFormModel(Object formObject) { 093 return createFormModel(formObject, false); 094 } 095 096 public static ValidatingFormModel createFormModel(Object formObject, boolean bufferChanges) { 097 return createFormModel(formObject, bufferChanges, null); 098 } 099 100 public static HierarchicalFormModel createCompoundFormModel(Object formObject) { 101 return createCompoundFormModel(formObject, null); 102 } 103 104 public static FormModel createChildPageFormModel(HierarchicalFormModel parentModel) { 105 return createChildPageFormModel(parentModel, null); 106 } 107 108 public static ValidatingFormModel createChildPageFormModel(HierarchicalFormModel parentModel, 109 String childPageName) { 110 ValidatingFormModel child = createFormModel(parentModel.getFormObjectHolder()); 111 child.setId(childPageName); 112 parentModel.addChild(child); 113 return child; 114 } 115 116 /** 117 * Create a child form model nested by this form model identified by the 118 * provided name. The form object associated with the created child model is 119 * the value model at the specified parent property path. 120 * 121 * @param parentModel the model to create the FormModelHelper in 122 * @param childPageName the name to associate the created FormModelHelper 123 * with in the groupingModel 124 * @param childFormObjectPropertyPath the path into the groupingModel that 125 * the FormModelHelper is for 126 * 127 * @return The child form model 128 */ 129 public static ValidatingFormModel createChildPageFormModel(HierarchicalFormModel parentModel, String childPageName, 130 String childFormObjectPropertyPath) { 131 final ValueModel childValueModel = parentModel.getValueModel(childFormObjectPropertyPath); 132 return createChildPageFormModel(parentModel, childPageName, childValueModel); 133 } 134 135 public static ValidatingFormModel createChildPageFormModel(HierarchicalFormModel parentModel, String childPageName, 136 ValueModel childFormObjectHolder) { 137 ValidatingFormModel child = createFormModel(childFormObjectHolder); 138 child.setId(childPageName); 139 parentModel.addChild(child); 140 return child; 141 } 142 143 public static ValidationResultsReporter createSingleLineResultsReporter(ValidatingFormModel formModel, 144 Messagable messageReceiver) { 145 return new SimpleValidationResultsReporter(formModel.getValidationResults(), messageReceiver); 146 } 147 148 149 /** 150 * Returns the child of the formModel with the given page name. 151 * 152 * @param formModel the parent model to get the child from 153 * @param childPageName the name of the child to retrieve 154 * 155 * @return null the child can not be found 156 * 157 * @throws IllegalArgumentException if childPageName or formModel are null 158 */ 159 public static FormModel getChild(HierarchicalFormModel formModel, String childPageName) { 160 if (childPageName == null) throw new IllegalArgumentException("childPageName == null"); 161 if (formModel == null) throw new IllegalArgumentException("formModel == null"); 162 163 final FormModel[] children = formModel.getChildren(); 164 165 if (children == null) return null; 166 167 for (int i = 0; i < children.length; i++) { 168 final FormModel child = children[i]; 169 if (childPageName.equals(child.getId())) return child; 170 } 171 172 return null; 173 } 174 175 }