blob: dd7158df7466dc70ffbd87cb048f89add2b107bc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 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.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
public class NonContentBasedEncodingRules {
private static final String getJavaPlatformDefaultEncoding() {
String enc = System.getProperty("file.encoding"); //$NON-NLS-1$
// return blank as null
if (enc != null && enc.trim().length() == 0) {
enc = null;
}
return enc;
}
public static String getUserSpecifiedDefaultForContentType(IFile iFile) {
String enc = null;
IContentType contentType = null;
try {
contentType = iFile.getContentDescription().getContentType();
// first try to get base's default encoding for content type
if (contentType != null) {
enc = contentType.getDefaultCharset();
}
// next try to get sse's default encoding for content type
if (enc == null || enc.trim().length() == 0) {
enc = ContentBasedPreferenceGateway.getPreferencesString(contentType, CommonEncodingPreferenceNames.INPUT_CODESET);
}
// return blank as null
if (enc != null && enc.trim().length() == 0) {
enc = null;
}
} catch (CoreException e) {
// if core exception occurs, assume no preference!
enc = null;
}
return enc;
}
public static String getUserSpecifiedDefaultForContentType(String contentTypeId) {
String enc = null;
// first try to get base's default encoding for content type
IContentType contentType = Platform.getContentTypeManager().getContentType(contentTypeId);
if (contentType != null) {
enc = contentType.getDefaultCharset();
}
// next try to get sse's default encoding for content type
if (enc == null || enc.trim().length() == 0) {
enc = ContentBasedPreferenceGateway.getPreferencesString(contentTypeId, CommonEncodingPreferenceNames.INPUT_CODESET);
}
// return blank as null
if (enc != null && enc.trim().length() == 0) {
enc = null;
}
return enc;
}
private static final String getWorkbenchSpecifiedDefaultEncoding() {
ResourcesPlugin resourcePlugin = ResourcesPlugin.getPlugin();
String enc = resourcePlugin.getPluginPreferences().getString(ResourcesPlugin.PREF_ENCODING);
// return blank as null
if (enc != null && enc.trim().length() == 0) {
enc = null;
}
return enc;
}
/**
* @param specDefault
* This is the default charset name that would ordinarily be
* used for a particular type of content. Null may be
* specififed for those types with no spec default. If the spec
* default is known (and passed in), then it will be returned
* after being checked to see if there's be any user specified
* "override" for that charset (which would be rare). In other
* words, if the spec is known, there's little reason to use
* this method.
* @return the charset that should be used according to the rules
* established by this class.
*/
public static final String useDefaultNameRules(String specDefault) {
String enc = null;
String result = null;
enc = specDefault;
if (enc != null) {
result = enc;
} else {
enc = ContentTypeEncodingPreferences.getUserSpecifiedDefaultEncodingPreference();
if (enc != null && enc.trim().length() > 0) {
result = enc.trim();
} else {
if (enc == null || enc.trim().length() == 0) {
enc = getWorkbenchSpecifiedDefaultEncoding();
if (enc != null) {
result = enc.trim();
}
}
if (enc == null || enc.trim().length() == 0) {
enc = getJavaPlatformDefaultEncoding();
// enc should never be null (but we'll
// check anyway)
if (enc != null) {
result = enc;
}
}
}
}
result = CodedIO.checkMappingOverrides(result);
return result;
}
private NonContentBasedEncodingRules() {
super();
}
}