1 /*******************************************************************************
2 * Copyright (c) 2011 Ericsson
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
10 * Polytechnique Montréal - Initial API and implementation
11 * Bernd Hufmann - Productification, enhancements and fixes
13 *******************************************************************************/
14 package org
.eclipse
.linuxtools
.lttng
.tracecontrol
.service
;
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
;
23 * <b><u>LttControllerServiceProxy</u></b>
25 * Provides the mplementation of the ILttControllerService interface for
26 * sending of commands to the remote system.
29 public class LttControllerServiceProxy
implements ILttControllerService
{
31 // ------------------------------------------------------------------------
33 // ------------------------------------------------------------------------
35 private static final short INVALID_ARG_LENGTH
= 2;
37 private IChannel fProxychannel
;
39 // ------------------------------------------------------------------------
41 // ------------------------------------------------------------------------
42 public LttControllerServiceProxy(IChannel chan
) {
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
52 * @see org.eclipse.tm.tcf.protocol.IService#getName()
54 * Return service name, as it appears on the wire - a TCF name of the service.
57 public String
getName() {
62 * Sets the service channel.
65 public void setChannel(IChannel channel
) {
66 fProxychannel
= channel
;
71 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getProviders(org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetProviders)
74 public IToken
getProviders(final DoneGetProviders done
) {
75 return new Command(fProxychannel
, this, LttngConstants
.Lttng_Control_GetProviders
, new Object
[] {}) {
77 public void done(Exception error
, Object
[] args
) {
78 String
[] strArray
= new String
[0];
81 assert args
.length
== INVALID_ARG_LENGTH
;
82 error
= toDetailedError(toError(args
[0]), args
[1]);
84 strArray
= toStringArray(str
.toString());
86 done
.doneGetProviders(token
, error
, strArray
);
93 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getTargets(java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetTargets)
96 public IToken
getTargets(String provider
, final DoneGetTargets done
) {
97 return new Command(fProxychannel
, this, LttngConstants
.Lttng_Control_GetTargets
, new Object
[] { provider
}) {
99 public void done(Exception error
, Object
[] args
) {
100 String
[] strArray
= new String
[0];
103 assert args
.length
== INVALID_ARG_LENGTH
;
104 error
= toDetailedError(toError(args
[0]), args
[1]);
106 strArray
= toStringArray(str
.toString());
108 done
.doneGetTargets(token
, error
, strArray
);
115 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getMarkers(java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetMarkers)
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
}) {
121 public void done(Exception error
, Object
[] args
) {
122 String
[] strArray
= new String
[0];
125 assert args
.length
== INVALID_ARG_LENGTH
;
126 error
= toDetailedError(toError(args
[0]), args
[1]);
128 strArray
= toStringArray(str
.toString());
130 done
.doneGetMarkers(token
, error
, strArray
);
137 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getTraces(java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetTraces)
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
}) {
143 public void done(Exception error
, Object
[] args
) {
144 String
[] strArray
= new String
[0];
147 assert args
.length
== INVALID_ARG_LENGTH
;
148 error
= toDetailedError(toError(args
[0]), args
[1]);
150 strArray
= toStringArray(str
.toString());
152 done
.doneGetTraces(token
, error
, strArray
);
159 * @see org.eclipse.linuxtools.lttng.rse.service.ILttControllerService#getActiveTraces(java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.rse.service.ILttControllerService.DoneGetActiveTraces)
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
}) {
165 public void done(Exception error
, Object
[] args
) {
166 String
[] strArray
= new String
[0];
169 assert args
.length
== INVALID_ARG_LENGTH
;
170 error
= toDetailedError(toError(args
[0]), args
[1]);
172 strArray
= toStringArray(str
.toString());
174 done
.doneGetActiveTraces(token
, error
, strArray
);
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)
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
}) {
187 public void done(Exception error
, Object
[] args
) {
188 String
[] retStrArray
= new String
[0];
191 assert args
.length
== INVALID_ARG_LENGTH
;
192 error
= toDetailedError(toError(args
[0]), args
[1]);
194 String
[] strArray
= toStringArray(str
.toString());
195 retStrArray
= new String
[strArray
.length
];
197 for (int i
= 0; i
< strArray
.length
; i
++) {
198 String
[] tempStr
= strArray
[i
].split(LttngConstants
.Lttng_Control_GetActiveTraceInfoSeparator
);
199 retStrArray
[i
] = tempStr
[1];
202 done
.doneGetActiveTraceInfo(token
, error
, retStrArray
);
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)
212 public IToken
getChannels(String provider
, String target
, String trace
, final DoneGetChannels done
) {
214 return new Command(fProxychannel
, this, LttngConstants
.Lttng_Control_GetChannels
, new Object
[] { provider
, target
, trace
}) {
216 public void done(Exception error
, Object
[] args
) {
217 String
[] strArray
= new String
[0];
220 assert args
.length
== INVALID_ARG_LENGTH
;
221 error
= toDetailedError(toError(args
[0]), args
[1]);
223 strArray
= toStringArray(str
.toString());
225 done
.doneGetChannels(token
, error
, strArray
);
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)
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
}) {
238 public void done(Exception error
, Object
[] args
) {
241 assert args
.length
== INVALID_ARG_LENGTH
;
242 error
= toDetailedError(toError(args
[0]), args
[1]);
245 done
.doneSetupTrace(token
, error
, str
);
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)
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
}) {
258 public void done(Exception error
, Object
[] args
) {
261 assert args
.length
== INVALID_ARG_LENGTH
;
262 error
= toDetailedError(toError(args
[0]), args
[1]);
265 done
.doneSetTraceTransport(token
, error
, str
);
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)
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
}) {
278 public void done(Exception error
, Object
[] args
) {
280 String result
= ""; //$NON-NLS-1$
282 assert args
.length
== INVALID_ARG_LENGTH
;
283 error
= toDetailedError(toError(args
[0]), args
[1]);
285 result
= str
.toString();
286 if (result
.length() > 2) {
287 result
= result
.substring(1, result
.length() - 1);
290 done
.doneGetMarkerInfo(token
, error
, result
);
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)
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
}) {
303 public void done(Exception error
, Object
[] args
) {
306 assert args
.length
== INVALID_ARG_LENGTH
;
307 error
= toDetailedError(toError(args
[0]), args
[1]);
310 done
.doneSetMarkerEnable(token
, error
, str
);
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)
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
}) {
323 public void done(Exception error
, Object
[] args
) {
326 assert args
.length
== INVALID_ARG_LENGTH
;
327 error
= toDetailedError(toError(args
[0]), args
[1]);
330 done
.doneSetChannelEnable(token
, error
, str
);
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)
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
}) {
343 public void done(Exception error
, Object
[] args
) {
346 assert args
.length
== INVALID_ARG_LENGTH
;
347 error
= toDetailedError(toError(args
[0]), args
[1]);
350 done
.doneSetChannelOverwrite(token
, error
, str
);
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)
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
}) {
363 public void done(Exception error
, Object
[] args
) {
366 assert args
.length
== INVALID_ARG_LENGTH
;
367 error
= toDetailedError(toError(args
[0]), args
[1]);
370 done
.doneSetChannelTimer(token
, error
, str
);
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)
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
}) {
383 public void done(Exception error
, Object
[] args
) {
386 assert args
.length
== INVALID_ARG_LENGTH
;
387 error
= toDetailedError(toError(args
[0]), args
[1]);
390 done
.doneSetChannelSubbufNum(token
, error
, str
);
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)
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
}) {
403 public void done(Exception error
, Object
[] args
) {
406 assert args
.length
== INVALID_ARG_LENGTH
;
407 error
= toDetailedError(toError(args
[0]), args
[1]);
410 done
.doneSetChannelSubbufSize(token
, error
, str
);
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)
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
}) {
423 public void done(Exception error
, Object
[] args
) {
426 assert args
.length
== INVALID_ARG_LENGTH
;
427 error
= toDetailedError(toError(args
[0]), args
[1]);
430 done
.doneAllocTrace(token
, error
, str
);
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)
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
}) {
443 public void done(Exception error
, Object
[] args
) {
446 assert args
.length
== INVALID_ARG_LENGTH
;
447 error
= toDetailedError(toError(args
[0]), args
[1]);
450 done
.doneWriteTraceLocal(token
, error
, str
);
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)
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
}) {
463 public void done(Exception error
, Object
[] args
) {
466 assert args
.length
== INVALID_ARG_LENGTH
;
467 error
= toDetailedError(toError(args
[0]), args
[1]);
470 done
.doneWriteTraceNetwork(token
, error
, str
);
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)
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
}) {
483 public void done(Exception error
, Object
[] args
) {
486 assert args
.length
== INVALID_ARG_LENGTH
;
487 error
= toDetailedError(toError(args
[0]), args
[1]);
490 done
.doneStartTrace(token
, error
, str
);
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)
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
}) {
503 public void done(Exception error
, Object
[] args
) {
506 assert args
.length
== INVALID_ARG_LENGTH
;
507 error
= toDetailedError(toError(args
[0]), args
[1]);
510 done
.donePauseTrace(token
, error
, str
);
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)
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
}) {
523 public void done(Exception error
, Object
[] args
) {
526 assert args
.length
== INVALID_ARG_LENGTH
;
527 error
= toDetailedError(toError(args
[0]), args
[1]);
530 done
.doneDestroyTrace(token
, error
, str
);
536 * Converts comma separated string to String array.
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();
547 return new String
[0];
551 * Creates new error report using a given error and a detailed message.
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$