/**
* Copyright (C) 2005 - 2009 Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.plugin.pdt.preference;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.php.internal.core.PHPCoreConstants;
import org.eclipse.php.internal.ui.PHPUiPlugin;
/**
* Option handler for pdt/php options.
*
* @author Eric Van Dewoestine
*/
public class OptionHandler
implements org.eclim.plugin.core.preference.OptionHandler
{
private static final String NATURE = "org.eclipse.php.core.PHPNature";
private static final String PREFIX = "org.eclipse.php.core.";
private static final String VERSION =
PREFIX + PHPCoreConstants.PHP_OPTIONS_PHP_VERSION;
private IPersistentPreferenceStore store;
private Map<String, String> options;
/**
* {@inheritDoc}
* @see org.eclim.plugin.core.preference.OptionHandler#getNature()
*/
public String getNature()
{
return NATURE;
}
/**
* {@inheritDoc}
*/
public Map<String, String> getValues()
throws Exception
{
if(options == null){
options = new HashMap<String, String>();
options.put(VERSION,
getPreferences().getString(
PHPCoreConstants.PHP_OPTIONS_PHP_VERSION)
);
}
return options;
//return DLTKCore.getOptions();
}
/**
* {@inheritDoc}
*/
public Map<String, String> getValues(IProject project)
throws Exception
{
/*IScriptProject scriptProject = DLTKCore.create(project);
if(!scriptProject.exists()){
throw new IllegalArgumentException(Services.getMessage(
"project.not.found", project.getName()));
}
return scriptProject.getOptions(true);*/
IEclipsePreferences preferences = getPreferences(project);
Map<String, String> map = getValues();
for(String key : preferences.keys()){
map.put(PREFIX + key, preferences.get(key, null));
}
return map;
}
/**
* {@inheritDoc}
*/
public void setOption(String name, String value)
throws Exception
{
/*Map<String,String> options = DLTKCore.getOptions();
if(name.equals(PHPCoreConstants.PHP_OPTIONS_PHP_VERSION)){
// not supported accross projects?
}else{
options.put(name, value);
DLTKCore.setOptions((Hashtable)options);
}*/
if(VERSION.equals(name)){
getValues().put(VERSION, value);
IPersistentPreferenceStore store = getPreferences();
store.setValue(name.substring(PREFIX.length()), value);
store.save();
}
}
/**
* {@inheritDoc}
*/
public void setOption(IProject project, String name, String value)
throws Exception
{
IEclipsePreferences preferences = getPreferences(project);
if(name.startsWith(PREFIX)){
name = name.substring(PREFIX.length());
}
preferences.put(name, value);
preferences.flush();
}
private IPersistentPreferenceStore getPreferences()
{
if (store == null){
store = (IPersistentPreferenceStore)
PHPUiPlugin.getDefault().getPreferenceStore();
}
return store;
}
private IEclipsePreferences getPreferences(IProject project)
{
IScopeContext context = new ProjectScope(project);
IEclipsePreferences preferences = context.getNode("org.eclipse.php.core");
return preferences;
}
}