source: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/windows/SequenceSplitter.java @ 76

Last change on this file since 76 was 76, checked in by sherbold, 13 years ago
  • refactoring
File size: 3.8 KB
Line 
1package de.ugoe.cs.eventbench.windows;
2
3import java.util.LinkedList;
4import java.util.List;
5
6import de.ugoe.cs.eventbench.data.Event;
7import de.ugoe.cs.eventbench.windows.data.WindowsMessage;
8import de.ugoe.cs.util.console.Console;
9
10public class SequenceSplitter {
11
12        private List<WindowsMessage> currentSequence;
13       
14        private int openDowns;
15       
16        private boolean initMessages;
17       
18        private EventGenerator tokenGenerator;
19       
20        private List<Event<WindowsMessage>> actionSequence;
21       
22        public SequenceSplitter() {
23                currentSequence = new LinkedList<WindowsMessage>();
24                openDowns = 0;
25                initMessages = true;
26                tokenGenerator = new EventGenerator();
27                actionSequence = new LinkedList<Event<WindowsMessage>>();
28        }
29       
30        public void addMessage(WindowsMessage msg) {
31                if( startOfSequence(msg) ) {
32                        if( !initMessages ) {
33                                Event<WindowsMessage> currentAction = tokenGenerator.generateEvent(currentSequence);
34                                if( currentAction!=null ) {
35                                        actionSequence.add(currentAction);
36                                }
37                                if( isKeyMessage(msg.getType()) && openDowns>0 ) {
38                                        Console.traceln("Key message found with open down mouse messages - will probabably result in a faulty sequence.");
39                                }
40                        } else {
41                                initMessages = false;
42                        }
43                        currentSequence = new LinkedList<WindowsMessage>();
44                }
45                if( isUpMessage(msg.getType()) ) {
46                        if( openDowns>0 ) {
47                                openDowns--;
48                        }
49                }
50                currentSequence.add(msg);
51        }
52       
53        public List<Event<WindowsMessage>> getSequence() {
54                return actionSequence;
55        }
56       
57        public void endSession() {
58                Event<WindowsMessage> currentAction = tokenGenerator.generateEvent(currentSequence);
59                if( currentAction!=null ) {
60                        actionSequence.add(currentAction);
61                }
62        }
63
64        private boolean startOfSequence(WindowsMessage msg) {
65                boolean isStart = false;
66                int msgType = msg.getType();
67                if( isKeyMessage(msgType) ) {
68                        isStart = true;
69                }
70                if( isDownMessage(msgType) ) {
71                        openDowns++;
72                        if( openDowns==1 ) {
73                                isStart = true;
74                        }
75                }
76                if( isDblclkMessage(msgType) ) {
77                        openDowns++;
78                }
79                return isStart;
80        }
81
82        private boolean isKeyMessage(int msgType) {
83                boolean isKeyMsg = false;
84                switch (msgType) {
85                        case MessageDefs.WM_KEYDOWN:
86                        case MessageDefs.WM_KEYUP:
87                        case MessageDefs.WM_SYSKEYDOWN:
88                        case MessageDefs.WM_SYSKEYUP:
89                                isKeyMsg = true;
90                                break;
91                        default:
92                                        break;
93                }
94                return isKeyMsg;
95        }
96       
97        private boolean isDownMessage(int msgType) {
98                boolean isDownMsg = false;
99                switch (msgType) {
100                        case MessageDefs.WM_LBUTTONDOWN:
101                        case MessageDefs.WM_RBUTTONDOWN:
102                        case MessageDefs.WM_MBUTTONDOWN:
103                        case MessageDefs.WM_XBUTTONDOWN:
104                        case MessageDefs.WM_NCLBUTTONDOWN:
105                        case MessageDefs.WM_NCRBUTTONDOWN:
106                        case MessageDefs.WM_NCMBUTTONDOWN:
107                        case MessageDefs.WM_NCXBUTTONDOWN:
108                                isDownMsg = true;
109                                break;
110                        default:
111                                break;
112                }
113                return isDownMsg;
114        }
115
116        private boolean isDblclkMessage(int msgType) {
117                boolean isDblclkMsg = false;
118                switch (msgType) {
119                        case MessageDefs.WM_LBUTTONDBLCLK:
120                        case MessageDefs.WM_RBUTTONDBLCLK:
121                        case MessageDefs.WM_MBUTTONDBLCLK:
122                        case MessageDefs.WM_XBUTTONDBLCLK:
123                        case MessageDefs.WM_NCLBUTTONDBLCLK:
124                        case MessageDefs.WM_NCRBUTTONDBLCLK:
125                        case MessageDefs.WM_NCMBUTTONDBLCLK:
126                        case MessageDefs.WM_NCXBUTTONDBLCLK:
127                                isDblclkMsg = true;
128                                break;
129                        default:
130                                break;
131                }
132                return isDblclkMsg;
133        }
134       
135        private boolean isUpMessage(int msgType) {
136                boolean isUpMsg = false;
137                switch (msgType) {
138                        case MessageDefs.WM_LBUTTONUP:
139                        case MessageDefs.WM_RBUTTONUP:
140                        case MessageDefs.WM_MBUTTONUP:
141                        case MessageDefs.WM_XBUTTONUP:
142                        case MessageDefs.WM_NCLBUTTONUP:
143                        case MessageDefs.WM_NCRBUTTONUP:
144                        case MessageDefs.WM_NCMBUTTONUP:
145                        case MessageDefs.WM_NCXBUTTONUP:
146                                isUpMsg = true;
147                                break;
148                        default:
149                                break;
150                }
151                return isUpMsg;
152        }
153       
154}
Note: See TracBrowser for help on using the repository browser.