View Javadoc

1   package com.melloware.jukes.gui.view.validation;
2   
3   import java.beans.PropertyChangeEvent;
4   import java.beans.PropertyChangeListener;
5   
6   import org.apache.commons.lang.ObjectUtils;
7   import org.apache.commons.lang.StringUtils;
8   
9   import com.jgoodies.binding.PresentationModel;
10  import com.jgoodies.validation.ValidationResultModel;
11  import com.jgoodies.validation.util.DefaultValidationResultModel;
12  
13  
14  /**
15   * Abstract validation model for all validation models in the Jukes.
16   * <p>
17   * Copyright (c) 1999-2007 Melloware, Inc. <http://www.melloware.com>
18   * @author Emil A. Lefkof III <info@melloware.com>
19   * @version 4.0
20   */
21  @SuppressWarnings("PMD")
22  abstract public class AbstractValidationModel
23      extends PresentationModel {
24  
25      protected boolean dirty = false;
26      protected final ValidationResultModel validationResultModel;
27  
28      /**
29       * Default constructor.
30       */
31      public AbstractValidationModel(Object aObject) {
32          super(aObject);
33          validationResultModel = new DefaultValidationResultModel();
34          initEventHandling();
35          updateValidationResult();
36      }
37  
38      abstract public void updateButtonState(boolean enabled);
39  
40      public ValidationResultModel getValidationResultModel() {
41          return validationResultModel;
42      }
43  
44      abstract protected String[] getPropertiesToCheck();
45  
46      abstract protected void updateValidationResult();
47  
48      /**
49       * Has this form been modified?
50       * <p>
51       * @return if the form is dirty
52       */
53      public boolean isDirty() {
54          return this.dirty;
55      }
56  
57      /**
58      * Listens to changes in all properties of the current Orm
59      * and to Orm changes.
60      */
61      private void initEventHandling() {
62          final PropertyChangeListener handler = new ValidationUpdateHandler();
63          addBeanPropertyChangeListener(handler);
64          getBeanChannel().addValueChangeListener(handler);
65      }
66  
67      /**
68       * Validates the order using an OrmValidator and
69       * updates the validation result.
70       */
71      private class ValidationUpdateHandler
72          implements PropertyChangeListener {
73  
74          public void propertyChange(PropertyChangeEvent evt) { //NOPMD
75              updateValidationResult();
76              if (StringUtils.indexOfAny(evt.getPropertyName(), getPropertiesToCheck()) >= 0) { //NOPMD
77                  if (!ObjectUtils.equals(evt.getOldValue(), evt.getNewValue())) { //NOPMD
78                      updateButtonState(true);
79                  }
80              }
81          }
82  
83      }
84  
85  	/**
86  	 * Sets the dirty.
87  	 * <p>
88  	 * @param aDirty The dirty to set.
89  	 */
90  	public void setDirty(boolean aDirty) {
91  		this.dirty = aDirty;
92  	}
93  
94  }