/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.deploy.preferences; import java.text.MessageFormat; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.osgi.service.prefs.BackingStoreException; import com.aptana.core.logging.IdeLog; import com.aptana.core.util.EclipseUtil; import com.aptana.deploy.DeployPlugin; import com.aptana.deploy.preferences.IPreferenceConstants.DeployType; public class DeployPreferenceUtil { // Note: extracting these constants made a huge difference when just switching editors. // (around 98% of the time it was in com.aptana.deploy.preferences.DeployPreferenceUtil.getDeployProviderId // as it's called a bazzilion times from com.aptana.deploy.internal.ProjectPropertyTester.test) private static final String DEPLOY_PLUGIN_IDENTIFIER = DeployPlugin.getPluginIdentifier(); private static final QualifiedName DEPLOY_TYPE_QUALIFIED_KEY = new QualifiedName(DEPLOY_PLUGIN_IDENTIFIER, "provider"); //$NON-NLS-1$ private static final String RED_HAT_STRING = DeployType.RED_HAT.toString(); private static final String ENGINEYARD_STRING = DeployType.ENGINEYARD.toString(); private static final String CAPISTRANO_STRING = DeployType.CAPISTRANO.toString(); private static final String FTP_STRING = DeployType.FTP.toString(); private static final String HEROKU_STRING = DeployType.HEROKU.toString(); private static IPreferencesService preferencesService = Platform.getPreferencesService(); /** * Should only use for compatibility. * * @param project * @return */ private static DeployType getDeployType(IProject project) { if (project == null) { return DeployType.NONE; } String projectName = project.getName(); String key = new StringBuilder(IPreferenceConstants.PROJECT_DEPLOY_TYPE.length() + projectName.length() + 2) .append(IPreferenceConstants.PROJECT_DEPLOY_TYPE).append(':').append(projectName).toString(); String type = preferencesService.getString(DEPLOY_PLUGIN_IDENTIFIER, key, null, null); if (type != null) { if (type.equals(HEROKU_STRING)) { return DeployType.HEROKU; } if (type.equals(FTP_STRING)) { return DeployType.FTP; } if (type.equals(CAPISTRANO_STRING)) { return DeployType.CAPISTRANO; } if (type.equals(ENGINEYARD_STRING)) { return DeployType.ENGINEYARD; } if (type.equals(RED_HAT_STRING)) { return DeployType.RED_HAT; } } return DeployType.NONE; } public static String getDeployEndpoint(IContainer container) { if (container == null) { return null; } return Platform.getPreferencesService().getString(DEPLOY_PLUGIN_IDENTIFIER, MessageFormat.format("{0}:{1}", //$NON-NLS-1$ com.aptana.deploy.preferences.IPreferenceConstants.PROJECT_DEPLOY_ENDPOINT, container.getFullPath()), null, null); } /** * Note: this method MUST be fast (it's called over and over again when switching an editor). */ public static String getDeployProviderId(IContainer container) { if (container == null) { return null; } String id = null; try { id = container.getPersistentProperty(DEPLOY_TYPE_QUALIFIED_KEY); if (id == null) { // Add a compatibility layer with old stuff here id = mapTypeToId(getDeployType(container.getProject())); } } catch (Exception e) { IdeLog.logWarning(DeployPlugin.getDefault(), e); } return id; } /** * Compatibility layer to help migrate projects set up old way. * * @param type * @return */ private static String mapTypeToId(DeployType type) { if (type == null) { return null; } switch (type) { case RED_HAT: return "com.aptana.deploy.redhat.provider"; //$NON-NLS-1$ case HEROKU: return "com.aptana.deploy.heroku.provider"; //$NON-NLS-1$ case ENGINEYARD: return "com.aptana.deploy.engineyard.provider"; //$NON-NLS-1$ case FTP: return "com.aptana.deploy.ftp.provider"; //$NON-NLS-1$ case CAPISTRANO: return "com.aptana.deploy.capistrano.provider"; //$NON-NLS-1$ default: break; } return null; } public static void setDeployType(IContainer container, String providerId) { try { container.setPersistentProperty(DEPLOY_TYPE_QUALIFIED_KEY, providerId); } catch (CoreException e) { IdeLog.logError(DeployPlugin.getDefault(), e); } } public static void setDeployEndpoint(IContainer container, String endpoint) { IEclipsePreferences prefs = (EclipseUtil.instanceScope()).getNode(DEPLOY_PLUGIN_IDENTIFIER); prefs.put( MessageFormat.format("{0}:{1}", IPreferenceConstants.PROJECT_DEPLOY_ENDPOINT, container.getFullPath()), //$NON-NLS-1$ endpoint); try { prefs.flush(); } catch (BackingStoreException e) { IdeLog.logError(DeployPlugin.getDefault(), e); } } }