Rename xxx.lttng to xxx.lttng.core
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.core / src / org / eclipse / linuxtools / lttng / tracecontrol / service / LttControllerServiceProxy.java
1 /*******************************************************************************
2 * Copyright (c) 2011 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Polytechnique Montréal - Initial API and implementation
11 * Bernd Hufmann - Productification, enhancements and fixes
12 *
13 *******************************************************************************/
14 package org.eclipse.linuxtools.lttng.tracecontrol.service;
15
16 import org.eclipse.linuxtools.lttng.LttngConstants;
17 import org.eclipse.tm.tcf.core.Command;
18 import org.eclipse.tm.tcf.core.ErrorReport;
19 import org.eclipse.tm.tcf.protocol.IChannel;
20 import org.eclipse.tm.tcf.protocol.IToken;
21
22 /**
23 * <b><u>LttControllerServiceProxy</u></b>
24 * <p>
25 * Provides the mplementation of the ILttControllerService interface for
26 * sending of commands to the remote system.
27 * </p>
28 */
29 public class LttControllerServiceProxy implements ILttControllerService {
30
31 // ------------------------------------------------------------------------
32 // Attributes
33 // ------------------------------------------------------------------------
34
35 private static final short INVALID_ARG_LENGTH = 2;
36
37 private IChannel fProxychannel;
38
39 // ------------------------------------------------------------------------
40 // Constructors
41 // ------------------------------------------------------------------------
42 public LttControllerServiceProxy(IChannel chan) {
43 fProxychannel = chan;
44 }
45
46 // ------------------------------------------------------------------------
47 // Operations
48 // ------------------------------------------------------------------------
49
50 /*
51 * (non-Javadoc)
52 * @see org.eclipse.tm.tcf.protocol.IService#getName()
53 *
54 * Return service name, as it appears on the wire - a TCF name of the service.
55 */
56 @Override
57 public String getName() {
58 return NAME;
59 }
60
61 /**
62 * Sets the service channel.
63 * @param channel
64 */
65 public void setChannel(IChannel channel) {
66 fProxychannel = channel;
67 }
68
69 /*
70 * (non-Javadoc)
71 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getProviders(org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetProviders)
72 */
73 @Override
74 public IToken getProviders(final DoneGetProviders done) {
75 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetProviders, new Object[] {}) {
76 @Override
77 public void done(Exception error, Object[] args) {
78 String[] strArray = new String[0];
79 Object str = null;
80 if (error == null) {
81 assert args.length == INVALID_ARG_LENGTH;
82 error = toDetailedError(toError(args[0]), args[1]);
83 str = args[1];
84 strArray = toStringArray(str.toString());
85 }
86 done.doneGetProviders(token, error, strArray);
87 }
88 }.token;
89 }
90
91 /*
92 * (non-Javadoc)
93 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getTargets(java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetTargets)
94 */
95 @Override
96 public IToken getTargets(String provider, final DoneGetTargets done) {
97 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetTargets, new Object[] { provider }) {
98 @Override
99 public void done(Exception error, Object[] args) {
100 String[] strArray = new String[0];
101 Object str = null;
102 if (error == null) {
103 assert args.length == INVALID_ARG_LENGTH;
104 error = toDetailedError(toError(args[0]), args[1]);
105 str = args[1];
106 strArray = toStringArray(str.toString());
107 }
108 done.doneGetTargets(token, error, strArray);
109 }
110 }.token;
111 }
112
113 /*
114 * (non-Javadoc)
115 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getMarkers(java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetMarkers)
116 */
117 @Override
118 public IToken getMarkers(String provider, String target, final DoneGetMarkers done) {
119 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetMarkers, new Object[] { provider, target }) {
120 @Override
121 public void done(Exception error, Object[] args) {
122 String[] strArray = new String[0];
123 Object str = null;
124 if (error == null) {
125 assert args.length == INVALID_ARG_LENGTH;
126 error = toDetailedError(toError(args[0]), args[1]);
127 str = args[1];
128 strArray = toStringArray(str.toString());
129 }
130 done.doneGetMarkers(token, error, strArray);
131 }
132 }.token;
133 }
134
135 /*
136 * (non-Javadoc)
137 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getTraces(java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetTraces)
138 */
139 @Override
140 public IToken getTraces(String provider, String target, final DoneGetTraces done) {
141 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetTraces, new Object[] { provider, target }) {
142 @Override
143 public void done(Exception error, Object[] args) {
144 String[] strArray = new String[0];
145 Object str = null;
146 if (error == null) {
147 assert args.length == INVALID_ARG_LENGTH;
148 error = toDetailedError(toError(args[0]), args[1]);
149 str = args[1];
150 strArray = toStringArray(str.toString());
151 }
152 done.doneGetTraces(token, error, strArray);
153 }
154 }.token;
155 }
156
157 /*
158 * (non-Javadoc)
159 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getActiveTraces(java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetActiveTraces)
160 */
161 @Override
162 public IToken getActiveTraces(String provider, String target, final DoneGetActiveTraces done) {
163 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetActiveTraces, new Object[] { provider, target }) {
164 @Override
165 public void done(Exception error, Object[] args) {
166 String[] strArray = new String[0];
167 Object str = null;
168 if (error == null) {
169 assert args.length == INVALID_ARG_LENGTH;
170 error = toDetailedError(toError(args[0]), args[1]);
171 str = args[1];
172 strArray = toStringArray(str.toString());
173 }
174 done.doneGetActiveTraces(token, error, strArray);
175 }
176 }.token;
177 }
178
179 /*
180 * (non-Javadoc)
181 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getActiveTraceInfo(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetActiveTraceInfo)
182 */
183 @Override
184 public IToken getActiveTraceInfo(String provider, String target, String trace, final DoneGetActiveTraceInfo done) {
185 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetActiveTraceInfo, new Object[] { provider, target, trace }) {
186 @Override
187 public void done(Exception error, Object[] args) {
188 String[] retStrArray = new String[0];
189 Object str = null;
190 if (error == null) {
191 assert args.length == INVALID_ARG_LENGTH;
192 error = toDetailedError(toError(args[0]), args[1]);
193 str = args[1];
194 String[] strArray = toStringArray(str.toString());
195 retStrArray = new String[strArray.length];
196
197 for (int i = 0; i < strArray.length; i++) {
198 String[] tempStr = strArray[i].split(LttngConstants.Lttng_Control_GetActiveTraceInfoSeparator);
199 retStrArray[i] = tempStr[1];
200 }
201 }
202 done.doneGetActiveTraceInfo(token, error, retStrArray);
203 }
204 }.token;
205 }
206
207 /*
208 * (non-Javadoc)
209 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getChannels(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetChannels)
210 */
211 @Override
212 public IToken getChannels(String provider, String target, String trace, final DoneGetChannels done) {
213
214 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetChannels, new Object[] { provider, target, trace }) {
215 @Override
216 public void done(Exception error, Object[] args) {
217 String[] strArray = new String[0];
218 Object str = null;
219 if (error == null) {
220 assert args.length == INVALID_ARG_LENGTH;
221 error = toDetailedError(toError(args[0]), args[1]);
222 str = args[1];
223 strArray = toStringArray(str.toString());
224 }
225 done.doneGetChannels(token, error, strArray);
226 }
227 }.token;
228 }
229
230 /*
231 * (non-Javadoc)
232 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setupTrace(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetupTrace)
233 */
234 @Override
235 public IToken setupTrace(String provider, String target, String trace, final DoneSetupTrace done) {
236 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetupTrace, new Object[] { provider, target, trace }) {
237 @Override
238 public void done(Exception error, Object[] args) {
239 Object str = null;
240 if (error == null) {
241 assert args.length == INVALID_ARG_LENGTH;
242 error = toDetailedError(toError(args[0]), args[1]);
243 str = args[1];
244 }
245 done.doneSetupTrace(token, error, str);
246 }
247 }.token;
248 }
249
250 /*
251 * (non-Javadoc)
252 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setTraceTransport(java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetTraceTransport)
253 */
254 @Override
255 public IToken setTraceTransport(String provider, String target, String trace, String transport, final DoneSetTraceTransport done) {
256 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetupTraceTransport, new Object[] { provider, target, trace, transport }) {
257 @Override
258 public void done(Exception error, Object[] args) {
259 Object str = null;
260 if (error == null) {
261 assert args.length == INVALID_ARG_LENGTH;
262 error = toDetailedError(toError(args[0]), args[1]);
263 str = args[1];
264 }
265 done.doneSetTraceTransport(token, error, str);
266 }
267 }.token;
268 }
269
270 /*
271 * (non-Javadoc)
272 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getMarkerInfo(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetMarkerInfo)
273 */
274 @Override
275 public IToken getMarkerInfo(String provider, String target, String marker, final DoneGetMarkerInfo done) {
276 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_GetMarkerInfo, new Object[] { provider, target, marker }) {
277 @Override
278 public void done(Exception error, Object[] args) {
279 Object str = null;
280 String result = ""; //$NON-NLS-1$
281 if (error == null) {
282 assert args.length == INVALID_ARG_LENGTH;
283 error = toDetailedError(toError(args[0]), args[1]);
284 str = args[1];
285 result = str.toString();
286 if (result.length() > 2) {
287 result = result.substring(1, result.length() - 1);
288 }
289 }
290 done.doneGetMarkerInfo(token, error, result);
291 }
292 }.token;
293 }
294
295 /*
296 * (non-Javadoc)
297 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setMarkerEnable(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetMarkerEnable)
298 */
299 @Override
300 public IToken setMarkerEnable(String provider, String target, String marker, Boolean enable, final DoneSetMarkerEnable done) {
301 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetMarkerEnable, new Object[] { provider, target, marker, enable }) {
302 @Override
303 public void done(Exception error, Object[] args) {
304 Object str = null;
305 if (error == null) {
306 assert args.length == INVALID_ARG_LENGTH;
307 error = toDetailedError(toError(args[0]), args[1]);
308 str = args[1];
309 }
310 done.doneSetMarkerEnable(token, error, str);
311 }
312 }.token;
313 }
314
315 /*
316 * (non-Javadoc)
317 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setChannelEnable(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetChannelEnable)
318 */
319 @Override
320 public IToken setChannelEnable(String provider, String target, String trace, String channel, Boolean enable, final DoneSetChannelEnable done) {
321 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetChannelEnable, new Object[] { provider, target, trace, channel, enable }) {
322 @Override
323 public void done(Exception error, Object[] args) {
324 Object str = null;
325 if (error == null) {
326 assert args.length == INVALID_ARG_LENGTH;
327 error = toDetailedError(toError(args[0]), args[1]);
328 str = args[1];
329 }
330 done.doneSetChannelEnable(token, error, str);
331 }
332 }.token;
333 }
334
335 /*
336 * (non-Javadoc)
337 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setChannelOverwrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetChannelOverwrite)
338 */
339 @Override
340 public IToken setChannelOverwrite(String provider, String target, String trace, String channel, Boolean overwrite, final DoneSetChannelOverwrite done) {
341 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetChannelOverwrite, new Object[] { provider, target, trace, channel, overwrite }) {
342 @Override
343 public void done(Exception error, Object[] args) {
344 Object str = null;
345 if (error == null) {
346 assert args.length == INVALID_ARG_LENGTH;
347 error = toDetailedError(toError(args[0]), args[1]);
348 str = args[1];
349 }
350 done.doneSetChannelOverwrite(token, error, str);
351 }
352 }.token;
353 }
354
355 /*
356 * (non-Javadoc)
357 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setChannelTimer(java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetChannelTimer)
358 */
359 @Override
360 public IToken setChannelTimer(String provider, String target, String trace, String channel, long period, final DoneSetChannelTimer done) {
361 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetChannelTimer, new Object[] { provider, target, trace, channel, period }) {
362 @Override
363 public void done(Exception error, Object[] args) {
364 Object str = null;
365 if (error == null) {
366 assert args.length == INVALID_ARG_LENGTH;
367 error = toDetailedError(toError(args[0]), args[1]);
368 str = args[1];
369 }
370 done.doneSetChannelTimer(token, error, str);
371 }
372 }.token;
373 }
374
375 /*
376 * (non-Javadoc)
377 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setChannelSubbufNum(java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetChannelSubbufNum)
378 */
379 @Override
380 public IToken setChannelSubbufNum(String provider, String target, String trace, String channel, long subbufNum, final DoneSetChannelSubbufNum done) {
381 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetChannelSubbufNum, new Object[] { provider, target, trace, channel, subbufNum }) {
382 @Override
383 public void done(Exception error, Object[] args) {
384 Object str = null;
385 if (error == null) {
386 assert args.length == INVALID_ARG_LENGTH;
387 error = toDetailedError(toError(args[0]), args[1]);
388 str = args[1];
389 }
390 done.doneSetChannelSubbufNum(token, error, str);
391 }
392 }.token;
393 }
394
395 /*
396 * (non-Javadoc)
397 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#setChannelSubbufSize(java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneSetChannelSubbufSize)
398 */
399 @Override
400 public IToken setChannelSubbufSize(String provider, String target, String trace, String channel, long subbufSize, final DoneSetChannelSubbufSize done) {
401 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_SetChannelSubbufSize, new Object[] { provider, target, trace, channel, subbufSize }) {
402 @Override
403 public void done(Exception error, Object[] args) {
404 Object str = null;
405 if (error == null) {
406 assert args.length == INVALID_ARG_LENGTH;
407 error = toDetailedError(toError(args[0]), args[1]);
408 str = args[1];
409 }
410 done.doneSetChannelSubbufSize(token, error, str);
411 }
412 }.token;
413 }
414
415 /*
416 * (non-Javadoc)
417 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#allocTrace(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneAllocTrace)
418 */
419 @Override
420 public IToken allocTrace(String provider, String target, String trace, final DoneAllocTrace done) {
421 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_AllocTrace, new Object[] { provider, target, trace }) {
422 @Override
423 public void done(Exception error, Object[] args) {
424 Object str = null;
425 if (error == null) {
426 assert args.length == INVALID_ARG_LENGTH;
427 error = toDetailedError(toError(args[0]), args[1]);
428 str = args[1];
429 }
430 done.doneAllocTrace(token, error, str);
431 }
432 }.token;
433 }
434
435 /*
436 * (non-Javadoc)
437 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#writeTraceLocal(java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneWriteTraceLocal)
438 */
439 @Override
440 public IToken writeTraceLocal(String provider, String target, String trace, String path, int numChannel, Boolean isAppend, Boolean isFlightRecorder, Boolean isNormalOnly, final DoneWriteTraceLocal done) {
441 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_WriteTraceLocal, new Object[] { provider, target, trace, path, numChannel, isAppend, isFlightRecorder, isNormalOnly }) {
442 @Override
443 public void done(Exception error, Object[] args) {
444 Object str = null;
445 if (error == null) {
446 assert args.length == INVALID_ARG_LENGTH;
447 error = toDetailedError(toError(args[0]), args[1]);
448 str = args[1];
449 }
450 done.doneWriteTraceLocal(token, error, str);
451 }
452 }.token;
453 }
454
455 /*
456 * (non-Javadoc)
457 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#writeTraceNetwork(java.lang.String, java.lang.String, java.lang.String, int, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneWriteTraceNetwork)
458 */
459 @Override
460 public IToken writeTraceNetwork(String provider, String target, String trace, int numChannel, Boolean isAppend, Boolean isFlightRecorder, Boolean isNormalOnly, final DoneWriteTraceNetwork done) {
461 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_WriteTraceNetwork, new Object[] { provider, target, trace, numChannel, isAppend, isFlightRecorder, isNormalOnly }) {
462 @Override
463 public void done(Exception error, Object[] args) {
464 Object str = null;
465 if (error == null) {
466 assert args.length == INVALID_ARG_LENGTH;
467 error = toDetailedError(toError(args[0]), args[1]);
468 str = args[1];
469 }
470 done.doneWriteTraceNetwork(token, error, str);
471 }
472 }.token;
473 }
474
475 /*
476 * (non-Javadoc)
477 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#startTrace(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneStartTrace)
478 */
479 @Override
480 public IToken startTrace(String provider, String target, String trace, final DoneStartTrace done) {
481 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_StartTrace, new Object[] { provider, target, trace }) {
482 @Override
483 public void done(Exception error, Object[] args) {
484 Object str = null;
485 if (error == null) {
486 assert args.length == INVALID_ARG_LENGTH;
487 error = toDetailedError(toError(args[0]), args[1]);
488 str = args[1];
489 }
490 done.doneStartTrace(token, error, str);
491 }
492 }.token;
493 }
494
495 /*
496 * (non-Javadoc)
497 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#pauseTrace(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DonePauseTrace)
498 */
499 @Override
500 public IToken pauseTrace(String provider, String target, String trace, final DonePauseTrace done) {
501 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_PauseTrace, new Object[] { provider, target, trace }) {
502 @Override
503 public void done(Exception error, Object[] args) {
504 Object str = null;
505 if (error == null) {
506 assert args.length == INVALID_ARG_LENGTH;
507 error = toDetailedError(toError(args[0]), args[1]);
508 str = args[1];
509 }
510 done.donePauseTrace(token, error, str);
511 }
512 }.token;
513 }
514
515 /*
516 * (non-Javadoc)
517 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#destroyTrace(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneDestroyTrace)
518 */
519 @Override
520 public IToken destroyTrace(String provider, String target, String trace, final DoneDestroyTrace done) {
521 return new Command(fProxychannel, this, LttngConstants.Lttng_Control_DestroyTrace, new Object[] { provider, target, trace }) {
522 @Override
523 public void done(Exception error, Object[] args) {
524 Object str = null;
525 if (error == null) {
526 assert args.length == INVALID_ARG_LENGTH;
527 error = toDetailedError(toError(args[0]), args[1]);
528 str = args[1];
529 }
530 done.doneDestroyTrace(token, error, str);
531 }
532 }.token;
533 }
534
535 /*
536 * Converts comma separated string to String array.
537 */
538 private String[] toStringArray(String list) {
539 if (list.length() > 2) {
540 String temp = list.substring(1, list.length() - 1);
541 String[] str = temp.split(LttngConstants.Lttng_Control_Separator);
542 for (int i = 0; i < str.length; i++) {
543 str[i] = str[i].trim();
544 }
545 return str;
546 }
547 return new String[0];
548 }
549
550 /*
551 * Creates new error report using a given error and a detailed message.
552 */
553 private Exception toDetailedError(Exception error, Object detail) {
554 if ((error != null) && (error instanceof ErrorReport) && (detail != null)) {
555 error = new ErrorReport(error.getMessage() + "\nDetail: " + detail.toString(), ((ErrorReport) error).getAttributes()); //$NON-NLS-1$
556 }
557 return error;
558 }
559 }
This page took 0.043686 seconds and 5 git commands to generate.