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 }