blob: cd28db37459320cdf538b2d63ba942e655ad6125 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.sse.core.internal.encoding;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.osgi.framework.Bundle;
import org.osgi.service.prefs.Preferences;
public class ContentBasedPreferenceGateway {
private static String DEFAULT_LOCATION = "org.eclipse.wst.sse.core"; //$NON-NLS-1$
private static String RUNTIME_XML_ID = "org.eclipse.core.runtime.xml"; //$NON-NLS-1$
private static String SSE_XML_ID = "org.eclipse.wst.xml.core.xmlsource"; //$NON-NLS-1$
/**
* @param pluginId
* @return
*/
private static boolean bundleExists(String pluginId) {
// this just verifies there's really a plugin with this ID in "stack"
Bundle bundle = Platform.getBundle(pluginId);
return (!(bundle == null));
}
/**
* @param contentType
* @return
*/
private static String getContributorPluginId(IContentType contentType) {
// TODO: need to have registration info here, but for now, we'll use
// simple heuristic to cover the cases we know about.
String fullId = null;
if (contentType == null) {
fullId = DEFAULT_LOCATION;
} else {
fullId = contentType.getId();
}
// only one known case, so far, of hard coded re-direction
// (not sure this is even needed, but just in case).
// We don't want to store/change runtime.xml preferences
if (RUNTIME_XML_ID.equals(fullId)) {
fullId = SSE_XML_ID;
}
String pluginId = inferPluginId(fullId);
return pluginId;
}
private static Preferences getDefaultPreferences(IContentType contentType) {
IEclipsePreferences eclipsePreferences = Platform.getPreferencesService().getRootNode();
// TODO: eventaully need extension mechanism to avoid these hard coded
// mechanism.
// The idea is to load/store based on plugin's preferences, where the
// content type was contributed
// Eventually, too, we could do more "dynamic lookup" to get parent
// types for defaults, etc.
// Get default plugin preferences
String pluginPreferenceLocation = DefaultScope.SCOPE + IPath.SEPARATOR + getContributorPluginId(contentType);
Preferences pluginPreferences = eclipsePreferences.node(pluginPreferenceLocation);
// the below code does not work at this time because content type
// preferences are stored in the place as plugin preferences
// Preferences contentPreferences = null;
// if (contentType != null) {
// contentPreferences = pluginPreferences.node(contentType.getId());
// }
// else {
// contentPreferences = pluginPreferences.node(DEFAULT_LOCATION );
// }
//
// return contentPreferences;
return pluginPreferences;
}
private static Preferences getDefaultPreferences(String contentTypeId) {
IContentType contentType = Platform.getContentTypeManager().getContentType(contentTypeId);
return getDefaultPreferences(contentType);
}
public static Preferences getPreferences(IContentType contentType) {
IEclipsePreferences eclipsePreferences = Platform.getPreferencesService().getRootNode();
// TODO: eventaully need extension mechanism to avoid these hard coded
// mechanism.
// The idea is to load/store based on plugin's preferences, where the
// content type was contributed
// Eventually, too, we could do more "dynamic lookup" to get parent
// types for defaults, etc.
// Get instance plugin preferences
String pluginPreferenceLocation = Plugin.PLUGIN_PREFERENCE_SCOPE + IPath.SEPARATOR + getContributorPluginId(contentType);
Preferences pluginPreferences = eclipsePreferences.node(pluginPreferenceLocation);
// the below code does not work at this time because content type
// preferences are stored in the place as plugin preferences
// Preferences contentPreferences = null;
// if (contentType != null) {
// contentPreferences = pluginPreferences.node(contentType.getId());
// }
// else {
// contentPreferences = pluginPreferences.node(DEFAULT_LOCATION );
// }
//
// return contentPreferences;
return pluginPreferences;
}
public static Preferences getPreferences(String contentTypeId) {
IContentType contentType = Platform.getContentTypeManager().getContentType(contentTypeId);
return getPreferences(contentType);
}
public static String getPreferencesString(IContentType contentType, String key) {
Preferences preferences = getPreferences(contentType);
String value = preferences.get(key, getDefaultPreferences(contentType).get(key, null));
return value;
}
public static String getPreferencesString(String contentTypeId, String key) {
Preferences preferences = getPreferences(contentTypeId);
String value = preferences.get(key, getDefaultPreferences(contentTypeId).get(key, null));
return value;
}
/**
* @param fullId
* @return
*/
private static String inferPluginId(String fullId) {
// simply trim off last "segment" from full ID.
int lastSegmentPos = fullId.lastIndexOf('.');
String pluginId = null;
if (lastSegmentPos != -1) {
pluginId = fullId.substring(0, lastSegmentPos);
} else {
// weird case? We'll at least put/get them somewhere
pluginId = DEFAULT_LOCATION;
}
if (!bundleExists(pluginId)) {
// use default location
pluginId = DEFAULT_LOCATION;
}
return pluginId;
}
}