/*******************************************************************************
* Copyright (c) 2014 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.launching;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.model.RuntimeProcess;
import melnorme.lang.ide.core.EclipseCore;
/**
* Extension to {@link RuntimeProcess} that allows updating the process label as used by the console.
*/
public class RuntimeProcessExtension extends RuntimeProcess {
public RuntimeProcessExtension(ILaunch launch, Process process, String name, Map<String, String> attributes) {
super(launch, process, name, attributes);
}
@Override
protected void fireTerminateEvent() {
updateProcessLabelForConsole();
super.fireTerminateEvent();
}
protected void updateProcessLabelForConsole() {
setAttribute(IProcess.ATTR_PROCESS_LABEL, calcExtendedProcessLabel(this));
}
public static String calcExtendedProcessLabel(IProcess process) {
ILaunch launch = process.getLaunch();
StringBuffer buffer = new StringBuffer();
if (process.isTerminated()) {
try {
int exitValue = process.getExitValue();
buffer.append("<exit code: " + exitValue + "> ");
} catch (DebugException e) {
// Should not happen
}
}
ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
if (launchConfiguration != null) {
buffer.append(launchConfiguration.getName());
try {
ILaunchConfigurationType launchConfigType = launchConfiguration.getType();
if (launchConfigType != null) {
String type = launchConfigType.getName();
buffer.append(" [");
buffer.append(type);
buffer.append("] ");
}
} catch (CoreException ce) {
EclipseCore.logStatus(ce);
}
}
buffer.append(process.getLabel());
return buffer.toString();
}
}