package rtt.ui.launching;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.pde.launching.EclipseApplicationLaunchConfiguration;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import rtt.core.RTTApplication;
import rtt.core.RTTApplication.MapKeys;
public class RTTLaunchConfiguration extends
EclipseApplicationLaunchConfiguration implements
ILaunchConfigurationDelegate {
public enum Constant {
ARCHIVE("rtt.launching.archive", MapKeys.ARCHIVE, ""),
SUITE("rtt.launching.suite", MapKeys.SUITE, ""),
ACTION("rtt.lauching.action", MapKeys.ACTION, RTTApplication.GENERATE),
PROJECT("rtt.launching.bundle", MapKeys.PROJECT, ""),
TYPE("rtt.launching.type", MapKeys.TYPE, RTTApplication.JAVA_TYPE),
CONFIG("rtt.launching.config", MapKeys.CONFIG, "");
private String id;
private String argument;
private String defaultValue;
private Constant(String id, MapKeys key, String defaultValue) {
this.id = id;
this.argument = key.getArgumentCode();
this.defaultValue = defaultValue;
}
public String getArgument() {
return argument;
}
public String getID() {
return id;
}
public String getDefaultValue() {
return defaultValue;
}
}
public static final String ID = "rtt.ui.launchConfigurationType";
public RTTLaunchConfiguration() {
super();
}
@Override
public void launch(ILaunchConfiguration configuration, String mode,
ILaunch launch, IProgressMonitor monitor) throws CoreException {
boolean configurationComplete = true;
for (Constant constant : Constant.values()) {
String value = configuration.getAttribute(constant.getID(), "");
if (value.isEmpty()) {
configurationComplete = false;
break;
}
}
if (configurationComplete) {
super.launch(configuration, mode, launch, monitor);
} else {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
Shell shell = Display.getDefault().getActiveShell();
MessageDialog.openError(
shell, "Error", "Not sufficient arguments to run RTT.");
}
});
}
}
@Override
public String[] getProgramArguments(ILaunchConfiguration configuration)
throws CoreException {
String[] baseArguments = super.getProgramArguments(configuration);
List<String> argumentList = new ArrayList<String>();
for (String argument : baseArguments) {
argumentList.add(argument);
}
for (Constant constant : Constant.values()) {
argumentList.add(constant.getArgument());
argumentList.add(configuration.getAttribute(constant.getID(), ""));
}
return argumentList.toArray(new String[argumentList.size()]);
}
}