package com.sap.runlet.expressionpad.launch;
import java.util.Arrays;
import java.util.logging.Logger;
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 com.sap.runlet.abstractinterpreter.objects.RunletObject;
import com.sap.runlet.expressionpad.RunletEvaluator;
import com.sap.runlet.interpreter.RunletObjectFormatter;
import data.classes.AssociationEnd;
import data.classes.ClassTypeDefinition;
import data.classes.TypeDefinition;
public class LaunchConfig implements ILaunchConfigurationDelegate {
private static Logger log = Logger.getLogger(LaunchConfig.class.getName());
@Override
public void launch(final ILaunchConfiguration configuration, String mode, ILaunch launch,
IProgressMonitor monitor) throws CoreException {
final RunletEvaluator main = new RunletEvaluator(configuration.getAttribute(RunletMainTab.PROJECT_ATTRIBUTE,
RunletMainTab.NGPM_STDLIB));
if (mode.equals("debug")) {
RunletDebugTarget debugTarget = new RunletDebugTarget(main, launch, configuration
.getName(), new RunletObjectFormatter());
launch.addDebugTarget(debugTarget);
launch.addProcess(debugTarget.getProcess());
// TODO for testing, request to suspend immediately
debugTarget.suspend();
//debugSession.suspend(main.getInterpreter());
}
new Thread(mode + " Runlet " + configuration.getName()) {
public void run() {
try {
RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition>[] result = main.evaluate(configuration.getAttribute(
RunletMainTab.EXPRESSION_ATTRIBUTE, "")); //$NON-NLS-1$
main.getInterpreter().terminate();
log.info(Messages.LaunchConfig_1 + Arrays.asList(result));
} catch (Exception e) {
log.throwing(getClass().getName(), "launch", e); //$NON-NLS-1$
}
}
}.start();
}
}