package com.redhat.ceylon.test.eclipse.plugin.launch;
import static com.redhat.ceylon.test.eclipse.plugin.CeylonTestPlugin.LAUNCH_CONFIG_PORT;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchesListener2;
import com.redhat.ceylon.test.eclipse.plugin.CeylonTestPlugin;
import com.redhat.ceylon.test.eclipse.plugin.model.TestEventListener;
import com.redhat.ceylon.test.eclipse.plugin.model.TestRun;
import com.redhat.ceylon.test.eclipse.plugin.model.TestRunContainer;
public class CeylonTestLaunchesListener implements ILaunchesListener2 {
private static final CeylonTestLaunchesListener instance = new CeylonTestLaunchesListener();
private final Set<ILaunch> trackedLaunches = new HashSet<ILaunch>();
public static void install() {
ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
launchManager.addLaunchListener(instance);
}
public static void uninstall() {
ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
launchManager.removeLaunchListener(instance);
}
@Override
public void launchesAdded(ILaunch[] launches) {
for(ILaunch launch : launches) {
trackedLaunches.add(launch);
}
}
@Override
public void launchesRemoved(ILaunch[] launches) {
for(ILaunch launch : launches) {
trackedLaunches.remove(launch);
}
}
@Override
public void launchesTerminated(ILaunch[] launches) {
for(ILaunch launch : launches) {
launchTerminated(launch);
}
}
private void launchTerminated(ILaunch launch) {
trackedLaunches.remove(launch);
TestRunContainer testRunContainer = CeylonTestPlugin.getDefault().getModel();
TestRun testRun = testRunContainer.getTestRun(launch);
if( testRun != null ) {
testRun.processLaunchTerminatedEvent();
}
}
@Override
public void launchesChanged(ILaunch[] launches) {
for(ILaunch launch : launches) {
launchChanged(launch);
}
}
private void launchChanged(ILaunch launch) {
if (!trackedLaunches.contains(launch)) {
return;
}
String portAttribute = launch.getAttribute(LAUNCH_CONFIG_PORT);
if( portAttribute == null ) {
return;
}
int port = Integer.parseInt(portAttribute);
TestEventListener.startListenerThread(launch, port);
TestRunContainer testRunContainer = CeylonTestPlugin.getDefault().getModel();
TestRun testRun = testRunContainer.getOrCreateTestRun(launch);
trackedLaunches.remove(launch);
}
}