1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.ximtec.igesture.tool.util;
28
29 import java.beans.PropertyChangeListener;
30 import java.beans.PropertyChangeSupport;
31 import java.lang.reflect.Field;
32
33 import org.ximtec.igesture.core.DataObject;
34 import org.ximtec.igesture.core.DefaultDataObject;
35 import org.ximtec.igesture.core.DefaultPropertyChangeNotifier;
36 import org.ximtec.igesture.core.GestureClass;
37 import org.ximtec.igesture.core.GestureSample;
38 import org.ximtec.igesture.core.GestureSet;
39 import org.ximtec.igesture.core.SampleDescriptor;
40 import org.ximtec.igesture.core.TestSet;
41 import org.ximtec.igesture.core.Visitor;
42
43
44 public class PropertyChangeVisitor implements Visitor {
45
46 private PropertyChangeListener listener;
47
48
49 public PropertyChangeVisitor(PropertyChangeListener listener) {
50 this.listener = listener;
51 }
52
53
54 @Override
55 public void visit(DataObject dataObject) {
56 setUp(dataObject);
57 dataObject.removePropertyChangeListener(listener);
58 dataObject.addPropertyChangeListener(listener);
59
60 }
61
62
63 @Override
64 public void visit(GestureClass gestureClass) {
65 setUp(gestureClass);
66 gestureClass.addPropertyChangeListener(listener);
67
68 }
69
70
71 @Override
72 public void visit(GestureSet gestureSet) {
73 setUp(gestureSet);
74 gestureSet.addPropertyChangeListener(listener);
75
76 }
77
78
79 @Override
80 public void visit(GestureSample gestureSample) {
81 setUp(gestureSample);
82 gestureSample.addPropertyChangeListener(listener);
83
84 }
85
86
87 @Override
88 public void visit(TestSet testSet) {
89 setUp(testSet);
90 testSet.addPropertyChangeListener(listener);
91
92 }
93
94
95 @Override
96 public void visit(SampleDescriptor sampleDescriptor) {
97 setUp(sampleDescriptor);
98 sampleDescriptor.addPropertyChangeListener(listener);
99
100 }
101
102
103 private void setUp(DataObject dataObject) {
104 if (dataObject instanceof DefaultDataObject) {
105 try {
106 Field field = DefaultPropertyChangeNotifier.class
107 .getDeclaredField("propertyChangeSupport");
108 field.setAccessible(true);
109 if (field.get(dataObject) == null) {
110 PropertyChangeSupport pcs = new PropertyChangeSupport(dataObject);
111 field.set(dataObject, pcs);
112 }
113 }
114 catch (Exception e) {
115 e.printStackTrace();
116 }
117 }
118 }
119
120 }