package tk.eclipse.plugin.jseditor.launch;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.ui.ILaunchShortcut;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import tk.eclipse.plugin.htmleditor.HTMLPlugin;
import tk.eclipse.plugin.htmleditor.HTMLProjectParams;
/**
*
* @author Naoki Takezoe
*/
public class JavaScriptLaunchShortcut implements ILaunchShortcut {
public void launch(ISelection selection, String mode) {
if(selection instanceof IStructuredSelection){
Object element = ((IStructuredSelection)selection).getFirstElement();
if(element != null && element instanceof IFile){
try {
IFile file = (IFile)element;
ILaunchConfiguration config = getLaunchConfiguration(file);
config.launch("run", new NullProgressMonitor());
} catch(Exception ex){
HTMLPlugin.logException(ex);
}
}
}
}
public void launch(IEditorPart editor, String mode) {
IEditorInput input = editor.getEditorInput();
if(input instanceof IFileEditorInput){
try {
IFile file = ((IFileEditorInput)input).getFile();
ILaunchConfiguration config = getLaunchConfiguration(file);
config.launch("run", new NullProgressMonitor());
} catch(Exception ex){
HTMLPlugin.logException(ex);
}
}
}
private ILaunchConfiguration getLaunchConfiguration(IFile file) throws CoreException {
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfiguration[] configs = manager.getLaunchConfigurations();
String fullPath = file.getLocation().toFile().getAbsolutePath();
for(int i=0;i<configs.length;i++){
String value = configs[i].getAttribute(JavaScriptLaunchConstants.ATTR_JAVASCRIPT_FILE, "");
if(value.equals(fullPath)){
return configs[i];
}
}
ILaunchConfigurationType type = manager.getLaunchConfigurationType(
"tk.eclipse.plugin.jseditor.launch.JavaScriptLaunchConfigurationType");
ILaunchConfigurationWorkingCopy wc = type.newInstance(null,
manager.generateUniqueLaunchConfigurationNameFrom(file.getName()));
wc.setAttribute(JavaScriptLaunchConstants.ATTR_JAVASCRIPT_FILE, fullPath);
try {
HTMLProjectParams params = new HTMLProjectParams(file.getProject());
String[] javaScripts = params.getJavaScripts();
List<String> includes = new ArrayList<String>();
for(int i=0;i<javaScripts.length;i++){
includes.add(javaScripts[i]);
}
wc.setAttribute(JavaScriptLaunchConstants.ATTR_JAVASCRIPT_INCLUDES, includes);
} catch(Exception ex){
HTMLPlugin.logException(ex);
}
return wc.doSave();
}
}