View Javadoc

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 }