/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.debug.ui.blocks; import org.eclipse.core.resources.IProject; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.python.pydev.core.IInterpreterManager; import org.python.pydev.core.log.Log; import org.python.pydev.debug.core.Constants; import org.python.pydev.debug.ui.launching.PythonRunnerConfig; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.plugin.nature.PythonNature; import org.python.pydev.runners.SimpleRunner; import org.python.pydev.shared_core.string.StringUtils; /** * A control for displaying a list of python paths. */ public class PythonPathBlock extends AbstractLaunchConfigurationTab { private List fPythonPathList; /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { Label label = new Label(parent, SWT.NONE); label.setText("PYTHONPATH that will be used in the run:"); fPythonPathList = new List(parent, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL); GridData gd = new GridData(GridData.FILL_BOTH); fPythonPathList.setLayoutData(gd); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ @Override public String getName() { return "Python path"; } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) */ @Override public void initializeFrom(ILaunchConfiguration configuration) { try { String id = configuration.getType().getIdentifier(); IInterpreterManager manager = null; if (Constants.ID_JYTHON_LAUNCH_CONFIGURATION_TYPE.equals(id) || Constants.ID_JYTHON_UNITTEST_LAUNCH_CONFIGURATION_TYPE.equals(id)) { manager = PydevPlugin.getJythonInterpreterManager(); } else if (Constants.ID_IRONPYTHON_LAUNCH_CONFIGURATION_TYPE.equals(id) || Constants.ID_IRONPYTHON_UNITTEST_LAUNCH_CONFIGURATION_TYPE.equals(id)) { manager = PydevPlugin.getIronpythonInterpreterManager(); } else if (Constants.ID_PYTHON_REGULAR_LAUNCH_CONFIGURATION_TYPE.equals(id) || Constants.ID_PYTHON_COVERAGE_LAUNCH_CONFIGURATION_TYPE.equals(id) || Constants.ID_PYTHON_UNITTEST_LAUNCH_CONFIGURATION_TYPE.equals(id)) { manager = PydevPlugin.getPythonInterpreterManager(); } else { //Get from the project try { //could throw core exception if project does not exist. IProject project = PythonRunnerConfig.getProjectFromConfiguration(configuration); PythonNature nature = PythonNature.getPythonNature(project); if (nature != null) { manager = PydevPlugin.getInterpreterManager(nature); } } catch (Exception e) { Log.log(e); } if (manager == null) { Log.log("Could not recognize: '" + id + "' using default python interpreter manager."); manager = PydevPlugin.getPythonInterpreterManager(); } } String pythonPath = PythonRunnerConfig.getPythonpathFromConfiguration(configuration, manager); fPythonPathList.removeAll(); java.util.List<String> paths = SimpleRunner.splitPythonpath(pythonPath); for (String p : paths) { fPythonPathList.add(p); } setErrorMessage(null); } catch (Exception e) { // Exceptions here may have several reasons // - The interpreter is incorrectly configured // - The arguments use an unresolved variable. // In each case, the exception contains a meaningful message, that is displayed Log.log(e); String message = e.getMessage(); if (message == null) { message = "null (see error log for the traceback)."; } String errorMsg = StringUtils.replaceNewLines(message, " "); fPythonPathList.removeAll(); fPythonPathList.add(errorMsg); setErrorMessage(errorMsg); } } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ @Override public void performApply(ILaunchConfigurationWorkingCopy configuration) { // Nothing to apply, this is a read-only control initializeFrom(configuration); } /* * (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ @Override public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { // No defaults to set } }