source: trunk/JFCMonitor/src/de/ugoe/cs/eventbench/jfcmonitor/JFCListener.java @ 268

Last change on this file since 268 was 268, checked in by sherbold, 12 years ago
  • extended de.ugoe.cs.eventbench.jfcmonitor.JFCListener to log the events in a more detailed way and to use an OutputStreamWriter? instead of just dumping the output on the standard output stream
  • Property svn:mime-type set to text/plain
File size: 3.6 KB
Line 
1package de.ugoe.cs.eventbench.jfcmonitor;
2
3import java.awt.AWTEvent;
4import java.awt.event.AWTEventListener;
5import java.awt.event.KeyEvent;
6import java.awt.event.MouseEvent;
7import java.io.IOException;
8import java.io.OutputStreamWriter;
9import java.lang.reflect.InvocationTargetException;
10import java.lang.reflect.Method;
11
12import javax.swing.JComponent;
13
14public class JFCListener implements AWTEventListener {
15
16        final static String ENDLINE = System.getProperty("line.separator");
17       
18        final OutputStreamWriter outputWriter;
19       
20        public JFCListener(OutputStreamWriter outputWriter) {
21                this.outputWriter = outputWriter;
22        }
23       
24        @Override
25        public void eventDispatched(AWTEvent event) {
26                StringBuilder builder = new StringBuilder();
27                               
28                if( event instanceof MouseEvent ) {
29                        MouseEvent mouseEvent = (MouseEvent) event;
30                        if( !isMouseMovement(event.getID()) ) {
31                                builder.append("<event id=\"" + event.getID() + "\">" + ENDLINE);
32                                builder.append(" <param name=\"X\" value=\"" + mouseEvent.getX() + "\" />" + ENDLINE);
33                                builder.append(" <param name=\"Y\" value=\"" + mouseEvent.getY() + "\" />" + ENDLINE);
34                                builder.append(" <param name=\"Button\" value=\"" + mouseEvent.getButton() + "\" />" + ENDLINE);
35                                builder.append(" <param name=\"Modifiers\" value=\"" + mouseEvent.getModifiers() + "\" />" + ENDLINE);
36                                addSourceInfo(builder, event);
37                                builder.append("</event>" + ENDLINE);
38                        }
39                }
40                if( event instanceof KeyEvent ) {
41                        KeyEvent keyEvent = (KeyEvent) event;
42                        if( keyEvent.getID()==KeyEvent.KEY_TYPED ) {
43                                builder.append("<event id=\"" + event.getID() + "\">" + ENDLINE);
44                                builder.append(" <param name=\"KeyCode\" value=\"" + keyEvent.getKeyCode() + "\" />" + ENDLINE);
45                                builder.append(" <param name=\"Modifiers\" value=\"" + keyEvent.getModifiers() + "\" />" + ENDLINE);
46                                addSourceInfo(builder, event);
47                                builder.append("</event>" + ENDLINE);
48                        }
49                }
50                if( builder.length()>0 && outputWriter!=null ) {
51                        try {
52                                outputWriter.write(builder.toString());
53                                outputWriter.flush();
54                        } catch (IOException e) {
55                                // TODO Auto-generated catch block
56                                e.printStackTrace();
57                        }
58                }
59        }
60       
61        private void addSourceInfo(StringBuilder builder, AWTEvent event) {
62                builder.append(" <param name=\"Source\" value=\"" + event.getSource().toString() + "\" />" + ENDLINE);
63                if( event.getSource() instanceof JComponent ) {
64                        JComponent source = (JComponent) event.getSource();
65                        builder.append(" <param name=\"SourceName\" value=\"" + source.getName() + "\" />" + ENDLINE);
66                        for(Method method : source.getClass().getMethods() ) {
67                                try {
68                                        if( method.getName()=="getText" ) {
69                                                String text = (String) method.invoke(source, new Object[]{});
70                                                builder.append(" <param name=\"SourceText\" value=\"" + text + "\" />" + ENDLINE);
71                                        }
72                                        if( method.getName()=="getTitle" ) {
73                                                String title = (String) method.invoke(source, new Object[]{});
74                                                builder.append(" <param name=\"SourceTitle\" value=\"" + title + "\" />" + ENDLINE);
75                                        }
76                                } catch (IllegalArgumentException e) {
77                                } catch (IllegalAccessException e) {
78                                } catch (InvocationTargetException e) {
79                                }
80                        }
81                        /* TODO should include info about parent
82                        builder.append(" <param name=\"Parent\" value=\"" + source.getParent().toString() + "\" />" + ENDLINE);
83                        builder.append(" <param name=\"ParentName\" value=\"" + source.getParent().getName() + "\" />" + ENDLINE);
84                        */
85                }
86        }
87       
88        private boolean isMouseMovement(int eventId) {
89                return eventId==MouseEvent.MOUSE_MOVED || eventId==MouseEvent.MOUSE_DRAGGED || eventId==MouseEvent.MOUSE_ENTERED || eventId==MouseEvent.MOUSE_EXITED;
90        }
91
92}
Note: See TracBrowser for help on using the repository browser.