|
26 | 26 | import java.util.logging.Level; |
27 | 27 | import java.util.logging.Logger; |
28 | 28 | import javax.accessibility.Accessible; |
| 29 | +import javax.accessibility.AccessibleContext; |
29 | 30 | import javax.swing.text.Document; |
30 | 31 | import javax.swing.text.JTextComponent; |
31 | 32 | import org.netbeans.api.annotations.common.NullAllowed; |
@@ -58,52 +59,61 @@ void startListening() { |
58 | 59 | */ |
59 | 60 | @Override |
60 | 61 | public void propertyChange(PropertyChangeEvent evt) { |
61 | | - FileObject changedFile = getChangedFile(); |
62 | | - |
63 | | - Exercise exercise = getExercise(changedFile); |
64 | | - String eventName = underscorify(evt.getPropertyName()); |
| 62 | + try { |
| 63 | + FileObject changedFile = getChangedFile(); |
| 64 | + |
| 65 | + Exercise exercise = getExercise(changedFile); |
| 66 | + String eventName = underscorify(evt.getPropertyName()); |
| 67 | + |
| 68 | + LoggableEvent event; |
| 69 | + if (exercise != null) { |
| 70 | + log.log(Level.FINER, "Exercise: {0}", exercise); |
| 71 | + String filePath = TmcFileUtils.tryGetPathRelativeToProject(changedFile); |
| 72 | + String data = JsonMaker.create() |
| 73 | + .add("new_value", toStringWithObjects(evt.getNewValue())) |
| 74 | + .add("old_value", toStringWithObjects(evt.getOldValue())) |
| 75 | + .add("file", toStringWithObjects(filePath)) |
| 76 | + .toString(); |
| 77 | + |
| 78 | + event = new LoggableEvent(exercise, eventName, data.getBytes(Charset.forName("UTF-8"))); |
| 79 | + } else { |
| 80 | + String data = JsonMaker.create() |
| 81 | + .add("new_value", toStringWithObjects(evt.getNewValue())) |
| 82 | + .add("old_value", toStringWithObjects(evt.getOldValue())) |
| 83 | + .add("non_tmc_project", true) |
| 84 | + .toString(); |
| 85 | + event = new LoggableEvent(eventName, data.getBytes(Charset.forName("UTF-8"))); |
| 86 | + } |
65 | 87 |
|
66 | | - LoggableEvent event; |
67 | | - if (exercise != null) { |
68 | | - log.log(Level.FINER, "Exercise: {0}", exercise); |
69 | | - String filePath = TmcFileUtils.tryGetPathRelativeToProject(changedFile); |
70 | | - String data = JsonMaker.create() |
71 | | - .add("new_value", toStringWithObjects(evt.getNewValue())) |
72 | | - .add("old_value", toStringWithObjects(evt.getOldValue())) |
73 | | - .add("file", toStringWithObjects(filePath)) |
74 | | - .toString(); |
75 | | - event = new LoggableEvent(exercise, eventName, data.getBytes(Charset.forName("UTF-8"))); |
76 | | - } else { |
77 | | - String data = JsonMaker.create() |
78 | | - .add("new_value", toStringWithObjects(evt.getNewValue())) |
79 | | - .add("old_value", toStringWithObjects(evt.getOldValue())) |
80 | | - .add("non_tmc_project", true) |
81 | | - .toString(); |
82 | | - event = new LoggableEvent(eventName, data.getBytes(Charset.forName("UTF-8"))); |
| 88 | + receiver.receiveEvent(event); |
| 89 | + } catch (Exception e) { |
| 90 | + log.log(Level.WARNING, "Error in window event listener: {0}", e); |
83 | 91 | } |
84 | | - |
85 | | - receiver.receiveEvent(event); |
86 | 92 | } |
87 | 93 |
|
88 | 94 | /** |
89 | 95 | * Logs window events. |
90 | 96 | */ |
91 | 97 | private void reactToEvent(String action, WindowEvent event) { |
92 | | - String data = JsonMaker.create() |
93 | | - .add("new_state", event.getNewState()) |
94 | | - .add("old_state", event.getOldState()) |
95 | | - .toString(); |
96 | | - if (courseDb != null) { |
97 | | - Course course = courseDb.getCurrentCourse(); |
98 | | - if (course != null) { |
99 | | - receiver.receiveEvent( |
100 | | - new LoggableEvent(course, action, data.getBytes(Charset.forName("UTF-8")))); |
| 98 | + try { |
| 99 | + String data = JsonMaker.create() |
| 100 | + .add("new_state", event.getNewState()) |
| 101 | + .add("old_state", event.getOldState()) |
| 102 | + .toString(); |
| 103 | + if (courseDb != null) { |
| 104 | + Course course = courseDb.getCurrentCourse(); |
| 105 | + if (course != null) { |
| 106 | + receiver.receiveEvent( |
| 107 | + new LoggableEvent(course, action, data.getBytes(Charset.forName("UTF-8")))); |
| 108 | + } else { |
| 109 | + receiver.receiveEvent( |
| 110 | + new LoggableEvent(action, data.getBytes(Charset.forName("UTF-8")))); |
| 111 | + } |
101 | 112 | } else { |
102 | | - receiver.receiveEvent( |
103 | | - new LoggableEvent(action, data.getBytes(Charset.forName("UTF-8")))); |
| 113 | + log.log(Level.WARNING, "Coursedb is null"); |
104 | 114 | } |
105 | | - } else { |
106 | | - log.log(Level.WARNING, "Coursedb is null"); |
| 115 | + } catch (Exception e) { |
| 116 | + log.log(Level.WARNING, "Error in window event listener: {0}", e); |
107 | 117 | } |
108 | 118 | } |
109 | 119 |
|
@@ -152,14 +162,30 @@ private Exercise getExercise(@NullAllowed FileObject obj) { |
152 | 162 | } |
153 | 163 |
|
154 | 164 | private String toStringWithObjects(Object object) { |
155 | | - if (object == null) { |
156 | | - return "null"; |
157 | | - } else if (object instanceof Mode) { |
158 | | - return ((Mode) object).getName(); |
159 | | - } else if (object instanceof Accessible) { |
160 | | - return ((Accessible) object).getAccessibleContext().getAccessibleName(); |
| 165 | + try { |
| 166 | + if (object == null) { |
| 167 | + return "null"; |
| 168 | + } else if (object instanceof Mode) { |
| 169 | + return ((Mode) object).getName(); |
| 170 | + } else if (object instanceof Accessible) { |
| 171 | + try { |
| 172 | + Accessible acc = (Accessible) object; |
| 173 | + AccessibleContext context = acc.getAccessibleContext(); |
| 174 | + if (context != null) { |
| 175 | + String str = context.getAccessibleName(); |
| 176 | + if (str != null) { |
| 177 | + return str; |
| 178 | + } |
| 179 | + } |
| 180 | + } catch (Exception e) { |
| 181 | + log.log(Level.WARNING, "Windowstate exception error: {0}", e); |
| 182 | + return "accessible_exception"; |
| 183 | + } |
| 184 | + } |
| 185 | + return object.toString(); |
| 186 | + } catch (Exception e) { |
| 187 | + return "error"; |
161 | 188 | } |
162 | | - return object.toString(); |
163 | 189 | } |
164 | 190 |
|
165 | 191 | private String underscorify(String string) { |
|
0 commit comments