/**
* Copyright (C) 2012 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.adt;
import java.io.File;
import org.eclim.Services;
import org.eclim.logging.Logger;
import org.eclim.plugin.AbstractPluginResources;
import org.eclim.plugin.adt.preference.OptionHandler;
import org.eclim.plugin.adt.project.AndroidProjectManager;
import org.eclim.plugin.core.preference.Option;
import org.eclim.plugin.core.preference.Preferences;
import org.eclim.plugin.core.preference.Validator;
import org.eclim.plugin.core.project.ProjectManagement;
import org.eclim.plugin.core.project.ProjectNatureFactory;
import com.android.ide.eclipse.adt.AdtConstants;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
/**
* Implementation of AbstractPluginResources.
*
* @author Eric Van Dewoestine
*/
public class PluginResources
extends AbstractPluginResources
{
private static final Logger logger = Logger.getLogger(PluginResources.class);
/**
* Name that can be used to lookup this PluginResources from
* {@link Services#getPluginResources(String)}.
*/
public static final String NAME = "org.eclim.adt";
public static final String NATURE = AdtConstants.NATURE_DEFAULT;
@Override
public void initialize(String name)
{
super.initialize(name);
// force loading of the Sdk
Sdk.getCurrent();
Preferences.addOptionHandler("com.android.ide.eclipse.adt", new OptionHandler());
ProjectNatureFactory.addNature("android", NATURE);
ProjectManagement.addProjectManager(NATURE, new AndroidProjectManager());
Preferences preferences = Preferences.getInstance();
Option option = new Option();
option.setNature(NATURE);
option.setPath("Android");
option.setName(AdtPrefs.PREFS_SDK_DIR);
option.setValidator(new SdkValidator());
preferences.addOption(option);
String sdkLocation = AdtPrefs.getPrefs().getOsSdkFolder();
if (sdkLocation == null || sdkLocation.length() == 0){
logger.warn("Android SDK Location not set.");
}else if (!new File(sdkLocation).exists()){
logger.warn("Android SDK Location not found: " + sdkLocation);
}
}
@Override
protected String getBundleBaseName()
{
return "org/eclim/plugin/adt/messages";
}
private class SdkValidator
extends AdtPlugin.CheckSdkErrorHandler
implements Validator
{
private String message;
@Override
public boolean isValid(Object value)
{
message = null;
return AdtPlugin.getDefault().checkSdkLocationAndId((String)value, this);
}
@Override
public String getMessage(String name, Object value)
{
return message;
}
@Override
public boolean handleError(
AdtPlugin.CheckSdkErrorHandler.Solution solution, String message)
{
this.message = message;
return false;
}
@Override
public boolean handleWarning(
AdtPlugin.CheckSdkErrorHandler.Solution solution, String message)
{
logger.warn(message);
return true;
}
}
}