001 package org.springframework.richclient.samples.showcase.validation;
002
003 import javax.swing.JComponent;
004 import javax.swing.JPanel;
005
006 import org.springframework.richclient.application.ApplicationServicesLocator;
007 import org.springframework.richclient.command.ActionCommand;
008 import org.springframework.richclient.command.config.CommandConfigurer;
009 import org.springframework.richclient.dialog.TitledApplicationDialog;
010 import org.springframework.richclient.form.AbstractForm;
011 import org.springframework.richclient.form.FormModelHelper;
012 import org.springframework.richclient.form.builder.TableFormBuilder;
013 import org.springframework.rules.PropertyConstraintProvider;
014 import org.springframework.rules.constraint.RelationalOperator;
015 import org.springframework.rules.constraint.StringLengthConstraint;
016 import org.springframework.rules.constraint.property.PropertyConstraint;
017 import org.springframework.rules.constraint.property.PropertyValueConstraint;
018
019 /**
020 * Dialog showing a number of fields to manipulate the
021 * {@link StringLengthConstraint} and see it in action on the value field.
022 *
023 * @author Jan Hoskens
024 *
025 */
026 public class StringLenghtConstraintDialog extends TitledApplicationDialog {
027
028 public class StringLengthValue implements PropertyConstraintProvider {
029
030 private int length = 4;
031
032 private RelationalOperator relationalOperator = RelationalOperator.LESS_THAN_EQUAL_TO;
033
034 private int minLength = 2;
035
036 private int maxLength = 4;
037
038 private boolean rangeConstraint = false;
039
040 private String value;
041
042 public int getLength() {
043 return length;
044 }
045
046 public void setLength(int length) {
047 this.length = length;
048 }
049
050 public RelationalOperator getRelationalOperator() {
051 return relationalOperator;
052 }
053
054 public void setRelationalOperator(RelationalOperator relationalOperator) {
055 this.relationalOperator = relationalOperator;
056 }
057
058 public int getMinLength() {
059 return minLength;
060 }
061
062 public void setMinLength(int minLength) {
063 this.minLength = minLength;
064 }
065
066 public int getMaxLength() {
067 return maxLength;
068 }
069
070 public void setMaxLength(int maxLength) {
071 this.maxLength = maxLength;
072 }
073
074 public void setRangeConstraint(boolean rangeConstraint) {
075 this.rangeConstraint = rangeConstraint;
076 }
077
078 public boolean isRangeConstraint() {
079 return rangeConstraint;
080 }
081
082 public String getValue() {
083 return value;
084 }
085
086 public void setValue(String value) {
087 this.value = value;
088 }
089
090 public PropertyConstraint getPropertyConstraint(String propertyName) {
091 if (isRangeConstraint()) {
092 return new PropertyValueConstraint("value", new StringLengthConstraint(minLength, maxLength,
093 "rangeConstraint"));
094 }
095
096 return new PropertyValueConstraint("value", new StringLengthConstraint(relationalOperator, length));
097 }
098
099 }
100
101 public class StringLengthConstraintForm extends AbstractForm {
102
103 public StringLengthConstraintForm() {
104 super(FormModelHelper.createFormModel(new StringLengthValue(), false, "stringLengthValue"));
105 }
106
107 protected JComponent createFormControl() {
108 TableFormBuilder builder = new TableFormBuilder(getBindingFactory());
109 builder.add("relationalOperator");
110 builder.row();
111 builder.add("length");
112 builder.row();
113 builder.add("minLength");
114 builder.row();
115 builder.add("maxLength");
116 builder.row();
117 builder.add("rangeConstraint");
118 builder.row();
119 builder.add("value");
120 newSingleLineResultsReporter(StringLenghtConstraintDialog.this);
121 JPanel panel = new JPanel();
122 panel.add(builder.getForm());
123 panel.add(createValidateCommand().createButton());
124 return panel;
125 }
126
127 private ActionCommand createValidateCommand() {
128 ActionCommand validateCommand = new ActionCommand("validateCommand") {
129
130 protected void doExecuteCommand() {
131 getFormModel().validate();
132 }
133 };
134 ((CommandConfigurer) ApplicationServicesLocator.services().getService(CommandConfigurer.class))
135 .configure(validateCommand);
136 return validateCommand;
137 }
138
139 }
140
141 protected JComponent createTitledDialogContentPane() {
142
143 return new StringLengthConstraintForm().getControl();
144 }
145
146 protected boolean onFinish() {
147 return true;
148 }
149
150 }