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.RegexpConstraint; 015 import org.springframework.rules.constraint.property.PropertyConstraint; 016 import org.springframework.rules.constraint.property.PropertyValueConstraint; 017 import org.springframework.util.StringUtils; 018 019 /** 020 * Show a basic dialog with a regular expression input field and a value input 021 * field. When entering a new regular expression, user can evaluate expression. 022 * 023 * @author Jan Hoskens 024 * 025 */ 026 public class BasicRegExpConstraintDialog extends TitledApplicationDialog { 027 028 /** 029 * This object is used as formObject. It contains a value to set, the 030 * regular expression that should be used while validating that value and 031 * the logic to get the {@link PropertyConstraint} for the value based on 032 * the regexp. 033 */ 034 private class RegExpValue implements PropertyConstraintProvider { 035 private String regExp = ""; 036 037 private String value = ""; 038 039 public String getRegExp() { 040 return regExp; 041 } 042 043 public void setRegExp(String regExp) { 044 this.regExp = regExp; 045 } 046 047 public String getValue() { 048 return value; 049 } 050 051 public void setValue(String value) { 052 this.value = value; 053 } 054 055 public PropertyConstraint getPropertyConstraint(String propertyName) { 056 if (StringUtils.hasText(regExp)) 057 { 058 if ((propertyName == null) || ("value".equals(propertyName))) { 059 return new PropertyValueConstraint("value", new RegexpConstraint(regExp, "regExpViolated")); 060 } 061 } 062 return null; 063 } 064 065 } 066 067 private class RegExpForm extends AbstractForm { 068 069 public RegExpForm() { 070 super(FormModelHelper.createFormModel(new RegExpValue(), false)); 071 } 072 073 protected JComponent createFormControl() { 074 TableFormBuilder builder = new TableFormBuilder(getBindingFactory()); 075 builder.add("regExp"); 076 builder.row(); 077 builder.add("value"); 078 newSingleLineResultsReporter(BasicRegExpConstraintDialog.this); 079 JPanel panel = new JPanel(); 080 panel.add(builder.getForm()); 081 panel.add(createValidateCommand().createButton()); 082 return panel; 083 } 084 085 private ActionCommand createValidateCommand() { 086 ActionCommand validateCommand = new ActionCommand("validateCommand") { 087 088 protected void doExecuteCommand() { 089 getFormModel().validate(); 090 } 091 }; 092 ((CommandConfigurer) ApplicationServicesLocator.services().getService(CommandConfigurer.class)) 093 .configure(validateCommand); 094 return validateCommand; 095 } 096 } 097 098 protected JComponent createTitledDialogContentPane() { 099 return new RegExpForm().getControl(); 100 } 101 102 protected boolean onFinish() { 103 return true; 104 } 105 106 }