001 package org.springframework.richclient.samples.showcase.binding; 002 003 import java.util.HashMap; 004 import java.util.Map; 005 006 import javax.swing.JComponent; 007 import javax.swing.JLabel; 008 import javax.swing.JPanel; 009 010 import org.springframework.binding.form.FormModel; 011 import org.springframework.richclient.command.ActionCommand; 012 import org.springframework.richclient.command.CommandGroup; 013 import org.springframework.richclient.form.FormModelHelper; 014 import org.springframework.richclient.form.builder.TableFormBuilder; 015 import org.springframework.richclient.samples.showcase.util.AbstractReporterForm; 016 import org.springframework.richclient.samples.showcase.util.AbstractReporterTitledApplicationDialog; 017 import org.springframework.richclient.samples.showcase.util.Reporter; 018 import org.springframework.rules.PropertyConstraintProvider; 019 import org.springframework.rules.constraint.property.PropertyConstraint; 020 import org.springframework.rules.factory.Constraints; 021 022 import com.jgoodies.forms.factories.FormFactory; 023 import com.jgoodies.forms.layout.CellConstraints; 024 import com.jgoodies.forms.layout.ColumnSpec; 025 import com.jgoodies.forms.layout.FormLayout; 026 import com.jgoodies.forms.layout.RowSpec; 027 028 public class ParentChildFormDialog extends AbstractReporterTitledApplicationDialog { 029 030 private class ChildPOJO implements PropertyConstraintProvider { 031 private String childName; 032 033 private String childDescription; 034 035 private Map<String, PropertyConstraint> propertyConstraints; 036 037 public ChildPOJO() { 038 propertyConstraints = new HashMap<String, PropertyConstraint>(1); 039 propertyConstraints.put("childName", Constraints.instance().required("childName")); 040 } 041 042 public String getChildName() { 043 return childName; 044 } 045 046 public void setChildName(String childName) { 047 this.childName = childName; 048 } 049 050 public String getChildDescription() { 051 return childDescription; 052 } 053 054 public void setChildDescription(String childDescription) { 055 this.childDescription = childDescription; 056 } 057 058 @Override 059 public String toString() { 060 return "childName = " + childName + ", childDescription = " + childDescription; 061 } 062 063 public PropertyConstraint getPropertyConstraint(String propertyName) { 064 return propertyConstraints.get(propertyName); 065 } 066 } 067 068 private class ParentPOJO implements PropertyConstraintProvider { 069 private String parentName; 070 071 private String parentDescription; 072 073 private Map<String, PropertyConstraint> propertyConstraints; 074 075 public ParentPOJO() { 076 propertyConstraints = new HashMap<String, PropertyConstraint>(1); 077 propertyConstraints.put("parentName", Constraints.instance().required("parentName")); 078 } 079 080 public String getParentName() { 081 return parentName; 082 } 083 084 public void setParentName(String parentName) { 085 this.parentName = parentName; 086 } 087 088 public String getParentDescription() { 089 return parentDescription; 090 } 091 092 public void setParentDescription(String parentDescription) { 093 this.parentDescription = parentDescription; 094 } 095 096 @Override 097 public String toString() { 098 return "parentName = " + parentName + ", parentDescription = " + parentDescription; 099 } 100 101 public PropertyConstraint getPropertyConstraint(String propertyName) { 102 return propertyConstraints.get(propertyName); 103 } 104 } 105 106 private class ChildForm extends AbstractReporterForm { 107 108 public ChildForm() { 109 super(FormModelHelper.createFormModel(new ChildPOJO(), "child"), "child"); 110 } 111 112 @Override 113 protected JComponent createFormControl() { 114 TableFormBuilder builder = new TableFormBuilder(getBindingFactory()); 115 builder.add("childName"); 116 builder.row(); 117 builder.add("childDescription"); 118 return builder.getForm(); 119 } 120 121 } 122 123 private class ParentForm extends AbstractReporterForm { 124 125 private ChildForm childForm; 126 127 public ParentForm() { 128 super(FormModelHelper.createFormModel(new ParentPOJO(), "parent"), "parent"); 129 } 130 131 @Override 132 protected JComponent createFormControl() { 133 TableFormBuilder builder = new TableFormBuilder(getBindingFactory()); 134 builder.add("parentName"); 135 builder.row(); 136 builder.add("parentDescription"); 137 JPanel panel = new JPanel(new FormLayout(new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC, 138 FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC }, new RowSpec[] { 139 FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, 140 FormFactory.UNRELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, 141 FormFactory.DEFAULT_ROWSPEC, FormFactory.UNRELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, 142 FormFactory.UNRELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC })); 143 CellConstraints cc = new CellConstraints(); 144 panel.add(new JLabel(getMessage("parentForm.label")), cc.xy(1, 1)); 145 panel.add(builder.getForm(), cc.xy(3, 3)); 146 CommandGroup parentFormcommandGroup = CommandGroup.createCommandGroup(new ActionCommand[] { 147 getEnableFormModelCommand(), getReadOnlyFormModelCommand(), getValidatingFormModelCommand() }); 148 panel.add(parentFormcommandGroup.createButtonBar(), cc.xy(3, 5)); 149 panel.add(new JLabel(getMessage("childForm.label")), cc.xy(1, 7)); 150 childForm = new ChildForm(); 151 childForm.setMessageArea(getMessageArea()); 152 panel.add(childForm.getControl(), cc.xy(3, 9)); 153 CommandGroup childFormcommandGroup = CommandGroup.createCommandGroup(new ActionCommand[] { 154 childForm.getEnableFormModelCommand(), childForm.getReadOnlyFormModelCommand(), 155 childForm.getValidatingFormModelCommand() }); 156 panel.add(childFormcommandGroup.createButtonBar(), cc.xy(3, 11)); 157 addChildForm(childForm); 158 newSingleLineResultsReporter(ParentChildFormDialog.this); 159 return panel; 160 } 161 162 @Override 163 public StringBuilder getFieldsDetails(StringBuilder builder, FormModel formModel) { 164 builder = super.getFieldsDetails(builder, formModel); 165 return super.getFieldsDetails(builder, childForm.getFormModel()); 166 } 167 168 @Override 169 public StringBuilder getFormObjectDetails(StringBuilder builder, FormModel formModel) { 170 builder = super.getFormObjectDetails(builder, formModel); 171 return super.getFormObjectDetails(builder, childForm.getFormModel()); 172 } 173 174 @Override 175 public StringBuilder getFormModelDetails(StringBuilder builder, FormModel formModel) { 176 builder = super.getFormModelDetails(builder, formModel); 177 return super.getFormModelDetails(builder, childForm.getFormModel()); 178 } 179 180 @Override 181 public void registerFormModelPropertyChangeListener() { 182 childForm.registerFormModelPropertyChangeListener(); 183 super.registerFormModelPropertyChangeListener(); 184 } 185 186 @Override 187 public void unregisterFormModelPropertyChangeListener() { 188 childForm.unregisterFormModelPropertyChangeListener(); 189 super.unregisterFormModelPropertyChangeListener(); 190 } 191 } 192 193 @Override 194 protected Reporter getReporter() { 195 return new ParentForm(); 196 } 197 198 }