1 /*
2 * @(#)$Id: GestureSet.java 689 2009-07-22 00:10:27Z bsigner $
3 *
4 * Author : Ueli Kurmann, igesture@uelikurmann.ch
5 *
6 * Purpose : Container to manage a set of gesture classes.
7 *
8 * -----------------------------------------------------------------------
9 *
10 * Revision Information:
11 *
12 * Date Who Reason
13 *
14 * Dec 26, 2006 ukurmann Initial Release
15 * Mar 22, 2007 bsigner Cleanup
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 package org.ximtec.igesture.core;
27
28 import java.util.ArrayList;
29 import java.util.List;
30
31 import org.sigtec.util.Constant;
32
33 /**
34 * Container to manage a set of gesture classes.
35 *
36 * @version 1.0, Dec 2006
37 * @author Ueli Kurmann, igesture@uelikurmann.ch
38 * @author Beat Signer, signer@inf.ethz.ch
39 */
40 public class GestureSet extends DefaultDataObject {
41
42 public static final String PROPERTY_NAME = "name";
43
44 public static final String PROPERTY_CLASSES = "gestureClasses";
45
46 private List<GestureClass> gestureClasses;
47
48 private String name;
49
50 /**
51 * Constructs a new gesture set.
52 *
53 */
54 public GestureSet() {
55 this(Constant.EMPTY_STRING);
56 }
57
58
59 /**
60 * Constructs a new gesture set with a given name.
61 *
62 * @param name
63 * the name of the gesture set to be constructed.
64 */
65 public GestureSet(String name) {
66 super();
67 gestureClasses = new ArrayList<GestureClass>();
68 setName(name);
69 }
70
71
72 /**
73 * Constructs a new gesture set from a list of gesture classes.
74 *
75 * @param gestureClasses
76 * a list of gesture classes.
77 */
78 public GestureSet(List<GestureClass> gestureClasses) {
79 this.gestureClasses = gestureClasses;
80 }
81
82
83 public void setName(String name) {
84 String oldValue = this.name;
85 this.name = name;
86 propertyChangeSupport.firePropertyChange(PROPERTY_NAME, oldValue, name);
87 } // setName
88
89
90 /**
91 * Returns the name of the gesture set.
92 *
93 * @return the gesture set's name.
94 */
95 public String getName() {
96 return name;
97 } // getName
98
99
100 /**
101 * Adds a gesture class to the set.
102 *
103 * @param gestureClass
104 * the gesture class to be added.
105 */
106 public void addGestureClass(GestureClass gestureClass) {
107 this.gestureClasses.add(gestureClass);
108 propertyChangeSupport.fireIndexedPropertyChange(PROPERTY_CLASSES, gestureClasses.indexOf(gestureClass), null, gestureClass);
109 } // addGestureClass
110
111
112 /**
113 * Removes a gesture class from the gesture set.
114 *
115 * @param gestureClass
116 * the gesture class to be removed.
117 */
118 public void removeGestureClass(GestureClass gestureClass) {
119 int index = gestureClasses.indexOf(gestureClass);
120 this.gestureClasses.remove(gestureClass);
121 propertyChangeSupport.fireIndexedPropertyChange(PROPERTY_CLASSES, index, gestureClass, null);
122 } // removeGestureClass
123
124
125 /**
126 * Returns the gesture class at position index.
127 *
128 * @param index
129 * the index of the gesture class to be returned.
130 * @return the gesture class at position index.
131 */
132 public GestureClass getGestureClass(int index) {
133 assert (index >= 0 && index < gestureClasses.size());
134 return this.gestureClasses.toArray(new GestureClass[gestureClasses
135 .size()])[index];
136 } // getGestureClass
137
138
139 /**
140 * Returns the number of gesture classes the gesture set contains.
141 *
142 * @return the number of gesture classes the gesture set contains.
143 */
144 public int size() {
145 return gestureClasses.size();
146 } // size
147
148
149 /**
150 * Returns the list of all gesture classes the gesture set contains.
151 *
152 * @return the list of all gesture classes the gesture set contains.
153 */
154 public List<GestureClass> getGestureClasses() {
155 return gestureClasses;
156 } // getGestureClasses
157
158
159 /**
160 * Returns the gesture class with the specified name or null if a gesture
161 * class with the specified name does not exist.
162 *
163 * @param name
164 * name of the gesture class to be returned.
165 * @return the gesture class with the given name.
166 */
167 public GestureClass getGestureClass(String name) {
168 for (final GestureClass gestureClass : gestureClasses) {
169
170 if (gestureClass.getName().equals(name)) {
171 return gestureClass;
172 }
173
174 }
175
176 return null;
177 } // getGestureClass
178
179 /**
180 * {@inheritDoc}
181 */
182 @Override
183 public void accept(Visitor visitor) {
184 visitor.visit(this);
185
186 for(GestureClass gestureClass:gestureClasses){
187 gestureClass.accept(visitor);
188 }
189
190 } // accept
191
192
193 @Override
194 public String toString() {
195 return name;
196 } // toString
197
198 }