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
16
17
18
19
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
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
50
51
52
53 public boolean isDirty() {
54 return this.dirty;
55 }
56
57
58
59
60
61 private void initEventHandling() {
62 final PropertyChangeListener handler = new ValidationUpdateHandler();
63 addBeanPropertyChangeListener(handler);
64 getBeanChannel().addValueChangeListener(handler);
65 }
66
67
68
69
70
71 private class ValidationUpdateHandler
72 implements PropertyChangeListener {
73
74 public void propertyChange(PropertyChangeEvent evt) {
75 updateValidationResult();
76 if (StringUtils.indexOfAny(evt.getPropertyName(), getPropertiesToCheck()) >= 0) {
77 if (!ObjectUtils.equals(evt.getOldValue(), evt.getNewValue())) {
78 updateButtonState(true);
79 }
80 }
81 }
82
83 }
84
85
86
87
88
89
90 public void setDirty(boolean aDirty) {
91 this.dirty = aDirty;
92 }
93
94 }