blob: add9cf9d76f4fcb7ac0adabc679ac1571893c251 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nokia - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.edc.tests.tcfagent;
import org.eclipse.cdt.debug.edc.tcf.extension.AgentUtils;
import org.eclipse.cdt.debug.edc.tcf.extension.services.ILogging;
import org.eclipse.tm.tcf.protocol.IChannel;
import org.eclipse.tm.tcf.protocol.IService;
import org.eclipse.tm.tcf.protocol.IToken;
import org.eclipse.tm.tcf.protocol.JSON;
/**
* See {@link IUnitTestDriver}
*/
public class UnitTestDriverService implements IService {
private final IChannel channel;
private class CommandServer implements IChannel.ICommandServer {
public void command(IToken token, String name, byte[] data) {
try {
command(token, name, JSON.parseSequence(data));
} catch (Throwable x) {
channel.terminate(x);
}
}
private void command(IToken token, String name, Object[] args) throws Exception {
if (name.equals(IUnitTestDriver.COMMAND_LOGGING_WRITE)||
name.equals(IUnitTestDriver.COMMAND_LOGGING_WRITELN) ||
name.equals(IUnitTestDriver.COMMAND_LOGGING_DIALOG))
{
if (!AgentUtils.checkNumArgs(token, channel, args.length, 1))
return;
String s = (String) args[0];
// Now ask loggingService to send a event.
LoggingService loggingSvc = (LoggingService)channel.getLocalService(ILogging.NAME);
if (loggingSvc == null)
channel.sendResult(token, AgentUtils.jsonErr("LoggingService not supported by the agent."));
else {
channel.sendResult(token, JSON.toJSONSequence(new Object[] { null }));
if (name.equals(IUnitTestDriver.COMMAND_LOGGING_WRITE))
loggingSvc.write(s);
else if (name.equals(IUnitTestDriver.COMMAND_LOGGING_WRITELN))
loggingSvc.writeln(s);
else if (name.equals(IUnitTestDriver.COMMAND_LOGGING_DIALOG))
loggingSvc.dialog(0, s, s);
}
}
else {
channel.rejectCommand(token);
}
}
}
public UnitTestDriverService(IChannel channel) {
this.channel = channel;
channel.addCommandServer(this, new CommandServer());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.tm.tcf.protocol.IService#getName()
*/
public String getName() {
return IUnitTestDriver.NAME;
}
}