package fr.opensagres.mongodb.ide.launching.internal.launchConfigurations.mongod; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.IProcess; import fr.opensagres.mongodb.ide.core.model.MongoRuntime; import fr.opensagres.mongodb.ide.core.model.Server; import fr.opensagres.mongodb.ide.core.model.ServerState; import fr.opensagres.mongodb.ide.launching.internal.LaunchHelper; import fr.opensagres.mongodb.ide.launching.internal.ServerLauncherManager; import fr.opensagres.mongodb.ide.launching.internal.launchConfigurations.MongoProcessType; import fr.opensagres.mongodb.ide.launching.internal.launchConfigurations.ProcessLaunchConfigurationDelegate; public class MongodLaunchConfigurationDelegate extends ProcessLaunchConfigurationDelegate { public MongodLaunchConfigurationDelegate() { super(MongoProcessType.mongod); } @Override protected void onStart(ILaunchConfiguration configuration) throws CoreException { Server server = LaunchHelper.getServer(configuration); server.setServerState(ServerState.Starting); PingThread ping = new PingThread(server, -1); server.setData(ping); } @Override protected void onEnd(ILaunchConfiguration configuration, IProcess newProcess, boolean error) throws CoreException { Server server = LaunchHelper.getServer(configuration); if (!error) { addProcessListener(server, newProcess); // server.setServerState(ServerState.Started); } else { ServerLauncherManager.terminate(server); } } @Override protected String[] getArguments(ILaunchConfiguration configuration, MongoRuntime runtime) throws CoreException { Server server = LaunchHelper.getServer(configuration); Integer port = server.getPort(); if (port != null) { return new String[] { "-port", port.toString() }; } return null; } @Override protected IProcess createProcess(ILaunch launch, IPath location, Process p, Map processAttributes) { return new MongodProcess(launch, p, location.toOSString(), processAttributes); } @Override protected MongoRuntime getRuntime(ILaunchConfiguration configuration) throws CoreException { Server server = LaunchHelper.getServer(configuration); if (server != null) { MongoRuntime runtime = server.getRuntime(); if (runtime != null) { return runtime; } } return null; } private void addProcessListener(final Server server, final IProcess newProcess) { IDebugEventSetListener processListener = server .getData(IDebugEventSetListener.class); if (processListener != null || newProcess == null) return; processListener = new IDebugEventSetListener() { public void handleDebugEvents(DebugEvent[] events) { if (events != null) { int size = events.length; for (int i = 0; i < size; i++) { if (newProcess != null && newProcess.equals(events[i].getSource()) && events[i].getKind() == DebugEvent.TERMINATE) { ServerLauncherManager.stopImpl(server); } } } } }; DebugPlugin.getDefault().addDebugEventListener(processListener); } }