package org.python.pydev.shared_core.preferences; import java.io.File; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.preference.IPreferenceStore; import org.python.pydev.shared_core.structure.Tuple; /** * This is an API which takes care of getting preferences we want from a proper place. * * Some use-cases: * * - Get whether we should do code-formatting based on a configuration which is saved: * 1. In the project (i.e.: .settings/org.python.pydev.yaml) * 2. In the user-configuration (i.e.: user.home/.eclipse/org.python.pydev.yaml) * 3. In the workspace (which is the Eclipse standard) * * - Get additional templates (templates should be a collection of templates in project, user configuration, workspace). * * - Automatically apply defaults from the user-configuration into the workspace settings * (i.e.: %APPDATA%/EclipseSettings/override.workspacesettings) */ public interface IScopedPreferences { // Note: these settings are not on each call and should usually be passed in a constructor... // String pluginName: // pluginName the name of the plugin (from which the name of the file in the preferences is derived // -- i.e.: org.python.pydev will get a %APPDATA%/EclipseSettings/org.python.pydev.yaml file) /** * @param pluginPreferenceStore the preferences store of the plugin (workspace setting) * @param keyInPreferenceStore the key to get from the workspace (if needed) * @param adaptable an adaptable which can adapt to IProject. */ public boolean getBoolean(IPreferenceStore pluginPreferenceStore, String keyInPreferenceStore, IAdaptable adaptable); /** * @param pluginPreferenceStore the preferences store of the plugin (workspace setting) * @param keyInPreferenceStore the key to get from the workspace (if needed) * @param adaptable an adaptable which can adapt to IProject. */ public int getInt(IPreferenceStore pluginPreferenceStore, String keyInPreferenceStore, IAdaptable adaptable); /** * @param pluginPreferenceStore the preferences store of the plugin (workspace setting) * @param keyInPreferenceStore the key to get from the workspace (if needed) * @param adaptable an adaptable which can adapt to IProject. */ public String getString(IPreferenceStore pluginPreferenceStore, String keyInPreferenceStore, IAdaptable adaptable); /** * May throw an exception if it's not possible to save the passed data. * * Common reasons include not being able to write the file, abort overriding an existing (non-valid) yaml file... * * Returns a message which may be shown to the user with the confirmation of the save. */ public String saveToUserSettings(Map<String, Object> saveData) throws Exception; /** * May throw an exception if it's not possible to load the passed data. * * Returns a tuple with the loaded values and a set with the values which weren't found in the user settings. * @throws Exception */ public Tuple<Map<String, Object>, Set<String>> loadFromUserSettings(Map<String, Object> saveData) throws Exception; public String saveToProjectSettings(Map<String, Object> saveData, IProject... projects); public Tuple<Map<String, Object>, Set<String>> loadFromProjectSettings(Map<String, Object> saveData, IProject project) throws Exception; /** * Returns the .yaml file to be used for writing in the user settings. */ public File getUserSettingsLocation(); /** * Returns the .yaml file to be used for writing in the workspace settings. */ public File getWorkspaceSettingsLocation(); /** * Returns the .yaml file to be used for writing in the project settings. */ public IFile getProjectSettingsLocation(IProject p); /** * Given a YAML file, returns its contents (always considers its contents to be a Map) * * Note: return null if the file does not exist! */ public Map<String, Object> getYamlFileContents(final File yamlFile) throws Exception; }