|
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