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/IDEEditorsPreferencePage.java
String setting = null;
        if (!defaultEncodingButton.getSelection()) 
        	setting = encodingCombo.getText();
        
        if(clearUserSettings)
        	IDEEncoding.clearUserEncodings();
            
        if(hasNewEncoding(setting))
        	IDEEncoding.setResourceEncoding(setting);
        return super.performOk();
    }
    
    /**
	 * Return whether or not the encoding setting changed.
	 * @param encodingSetting the setting from the page.
	 * @return boolean <code>true</code> if the resource encoding
	 * needs to be set.
	 */
	private boolean hasNewEncoding(String encodingSetting) {
		
		String resourceEncoding = IDEEncoding.getResourceEncoding();		
		
		if(encodingSetting == null){
			
			return resourceEncoding != null && resourceEncoding.length() > 0;
		}
		return !(encodingSetting.equals(resourceEncoding));
	}
}