Bug 56957 [Encoding] Reusable EncodingFieldEditor
I have added the ability to set an encoding for a repository so that commit messages and file names can be properly translated between a client and server whose encodings differ. I have extracted much of the code from IDEEditorsPreferencePage into an EncodingFieldEditor class so I could us it. I was planning on providing a patch to the UI with the hope that this class could be API but there is a roadblock that prevents this. Basically, the encoding preference is in a org.eclipse.core.Preferences node but a field editor requires an IPreferenceStore. There are already two adapters for this is the platform but one is a private inner class of AbstractUIPlugin and the other lives in the text plugin. Instead of creating a patch, I'm just attaching the EncodingFieldEditor class for future consideration.
bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
data.widthHint = convertWidthInCharsToPixels(15);
		encodingCombo.setFont(font);
		encodingCombo.setLayoutData(data);
		encodingCombo.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				updateValidState();
			}
		});
		List encodings = IDEEncoding.getIDEEncodings();
		
		for (int i = 0; i < encodings.size(); ++i)
			encodingCombo.add((String) encodings.get(i));
		encodingCombo.setText(encoding);
		updateEncodingState(usesDefaultEncoding(resource));
	}
	private String getEncoding(IResource resource) {
		try {
			if (resource instanceof IContainer)
				return ((IContainer) resource).getDefaultCharset();
			else if (resource instanceof IFile)
				return ((IFile) resource).getCharset();
		} catch (CoreException e) {
		}
		IContainer parent = resource.getParent();
		return getEncoding(parent);
	}
	private String getEncodingFromContent(IFile file) {
		return IDEEncoding.getByteOrderMarkLabel(getContentDescription(file));
	}
	private String getContentTypeString(IFile file) {