/**
* Copyright (c) 2005-2011 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.
*/
/*
* Created on Jun 2, 2005
*
* @author Fabio Zadrozny
*/
package org.python.pydev.core;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
/**
* @author Fabio Zadrozny
*/
public interface IPythonPathNature {
/**
* Sets the project this python path nature is associated with
* @param project
*/
public void setProject(IProject project, IPythonNature nature);
/**
* @param interpreter: this is the interpreter that should be used for getting the pythonpathString interpreter
* (if it is null, the default interpreter is used)
*
* @param manager this is the interpreter manager that contains the interpreter passed. It's needed so that we
* can get the actual pythonpath for the interpreter passed (needed for the system pythonpath info).
*
* @return the pythonpath (source and externals) for the project as a list of strings (always as paths
* in the filesystem properly substituted)
*/
public List<String> getCompleteProjectPythonPath(IInterpreterInfo interpreter, IInterpreterManager info);
/**
* @param addExternal if true, the external libraries will also be added (and not only the project
* source folders)
*
* @return the pythonpath (source and externals) as a string (paths separated by | ), and always as
* complete paths in the filesystem.
* @throws CoreException
*/
public String getOnlyProjectPythonPathStr(boolean addExternal) throws CoreException;
/**
* Sets the project source path (paths are relative to the project location and are separated by | )
* It can contain variables to be substituted.
*
* @param newSourcePath
* @throws CoreException
*/
public void setProjectSourcePath(String newSourcePath) throws CoreException;
/**
* Sets the project external source paths (those are full-paths for mapping to a file in the filesystem, separated by | ).
* It can contain variables to be substituted.
*
* @param newExternalSourcePath
* @throws CoreException
*/
public void setProjectExternalSourcePath(String newExternalSourcePath) throws CoreException;
/**
* @param replaceVariables if true, any variables must be substituted (note that the return should still be always
* interpreted relative to the project location)
* @return only the project source paths (paths are relative to the project location and are separated by | )
* @throws CoreException
*/
public String getProjectSourcePath(boolean replaceVariables) throws CoreException;
/**
* @param replaceVariables if true, any variables must be substituted
* @return only the project external source paths (those are full-paths for mapping to a file in the filesystem, separated by | ).
* @throws CoreException
*/
public String getProjectExternalSourcePath(boolean replaceVariables) throws CoreException;
public List<String> getProjectExternalSourcePathAsList(boolean replaceVariables) throws CoreException;
/**
* @param replaceVariables if true, any variables must be substituted (note that the return should still be always
* interpreted relative to the project location)
* @return only the project source paths as a list of strings (paths are relative to the project location)
* @throws CoreException
*/
public Set<String> getProjectSourcePathSet(boolean replaceVariables) throws CoreException;
/**
* Can be called to force the cleaning of the caches (needed when the nature is rebuilt)
*/
public void clearCaches();
/**
* This method sets a variable substitution so that the source folders (project and external) can be set
* based on those variables.
*
* E.g.: If a variable PLATFORM maps to win32, setting a source folder as /libs/${PLATFORM}/dlls, it will be
* resolved in the project as /libs/win32/dlls.
*
* Another example would be creating a varible MY_APP that maps to d:\bin\my_app, so, ${MY_APP}/libs would point to
* d:\bin\my_app/libs
*
* Note that this variables are set at the project level and are resolved later than at the system level, so,
* when performing the substitution, it should get the variables from the interpreter and override those with
* the project variables before actually resolving anything.
*/
public void setVariableSubstitution(Map<String, String> variableSubstitution) throws CoreException;
/**
* Same as getVariableSubstitution(true);
*/
public Map<String, String> getVariableSubstitution() throws CoreException, MisconfigurationException,
PythonNatureWithoutProjectException;
/**
* @param addInterpreterInfoSubstitutions if true the substitutions in the interpreter will also be added.
* Otherwise, only the substitutions from this nature will be returned.
*/
public Map<String, String> getVariableSubstitution(boolean addInterpreterInfoSubstitutions) throws CoreException,
MisconfigurationException, PythonNatureWithoutProjectException;
/**
* The nature that contains this pythonpath nature.
* @return
*/
public IPythonNature getNature();
}