View Javadoc

1   /*
2    * @(#)$Id: PropertyChangeVisitor.java 689 2009-07-22 00:10:27Z bsigner $
3    *
4    * Author   : Ueli Kurmann, igesture@uelikurmann.ch
5    *                                   
6    *                                   
7    * Purpose  : 
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date       Who     Reason
14   *
15   * 23.03.2008 ukurmann  Initial Release
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
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 }