1
2 package org.ximtec.igesture;
3
4 import java.util.HashSet;
5 import java.util.Set;
6 import java.util.concurrent.Executor;
7 import java.util.concurrent.Executors;
8 import java.util.logging.Logger;
9
10 import org.ximtec.igesture.core.ResultSet;
11 import org.ximtec.igesture.event.GestureHandler;
12
13
14
15
16
17 public class MultimodalGestureManager implements GestureHandler{
18
19 private static final int NUMBER_OF_THREADS = 6;
20
21 private static final Logger LOGGER = Logger.getLogger(MultimodalGestureManager.class.getName());
22
23 private Set<String> composingGestures;
24 private Set<Recogniser> recognisers;
25 private MultimodalGestureQueue queue;
26
27 public MultimodalGestureManager(MultimodalGestureRecogniser recogniser)
28 {
29 composingGestures = recogniser.getComposingGestureClasses();
30 recognisers = new HashSet<Recogniser>();
31 queue = recogniser.getQueue();
32 }
33
34 public void addRecogniser(Recogniser recogniser, boolean mixed)
35 {
36 recogniser.addMultimodalGestureHandler(this);
37
38 recognisers.add(recogniser);
39 if(mixed == false)
40
41 recogniser.setMode(Recogniser.MULTIMODAL_MODE);
42 else
43
44 recogniser.setMode(Recogniser.MIXED_MODE);
45 }
46
47 public void removeRecogniser(Recogniser recogniser)
48 {
49 recogniser.removeMultimodalGestureHandler(this);
50
51 recognisers.remove(recogniser);
52
53 recogniser.setMode(Recogniser.NORMAL_MODE);
54 }
55
56 public void removeAllRecognisers()
57 {
58 for(Recogniser r : recognisers)
59 removeRecogniser(r);
60 }
61
62
63
64
65 @Override
66 public void handle(ResultSet resultSet) {
67
68
69 if(composingGestures.contains(resultSet.getGesture().getName()))
70 {
71 queue.push(resultSet);
72 }
73 else if(resultSet.getSource().getMode() != Recogniser.MIXED_MODE)
74 {
75
76
77 fireEvent(resultSet);
78 }
79 }
80
81
82
83
84
85
86
87
88 protected void fireEvent(final ResultSet resultSet) {
89
90 Executor executor = Executors.newFixedThreadPool(NUMBER_OF_THREADS);
91 for (final GestureHandler gestureHandler : resultSet.getSource().getGestureHandlers()) {
92 LOGGER.info("Handler: "+gestureHandler.getClass());
93 if (gestureHandler != null) {
94 executor.execute(new Runnable() {
95
96 @Override
97 public void run() {
98 gestureHandler.handle(resultSet);
99 }
100
101 });
102 }
103 }
104 }
105
106 }