/******************************************************************************* * Copyright (c) 2007, 2011 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 *******************************************************************************/ package org.eclipse.cdt.internal.ui.language; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePreferenceConstants; import org.eclipse.cdt.core.language.WorkspaceLanguageConfiguration; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.LanguageManager; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.internal.core.language.LanguageMappingStore; import org.eclipse.cdt.internal.ui.ICHelpContextIds; import org.eclipse.cdt.internal.ui.preferences.PreferencesMessages; import org.eclipse.cdt.internal.ui.util.Messages; public class WorkspaceLanguageMappingPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { WorkspaceLanguageConfiguration fMappings; WorkspaceLanguageMappingWidget fMappingWidget; public WorkspaceLanguageMappingPreferencePage() { fMappingWidget = new WorkspaceLanguageMappingWidget(); } @Override public void createControl(Composite parent) { super.createControl(parent); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), ICHelpContextIds.LANGUAGE_MAPPING_PREFERENCE_PAGE); } @Override protected Control createContents(Composite parent) { try { fetchMappings(); } catch (CoreException e) { CUIPlugin.log(e); } return fMappingWidget.createContents(parent, PreferencesMessages.WorkspaceLanguagesPreferencePage_description); } private void fetchMappings() throws CoreException { fMappings = LanguageManager.getInstance().getWorkspaceLanguageConfiguration(); Map<String, ILanguage> availableLanguages = LanguageVerifier.computeAvailableLanguages(); Set<String> missingLanguages = LanguageVerifier.removeMissingLanguages(fMappings, availableLanguages); if (missingLanguages.size() > 0) { MessageBox messageBox = new MessageBox(getShell(), SWT.ICON_WARNING | SWT.OK); messageBox.setText(PreferencesMessages.LanguageMappings_missingLanguageTitle); String affectedLanguages = LanguageVerifier.computeAffectedLanguages(missingLanguages); messageBox.setMessage(Messages.format(PreferencesMessages.WorkspaceLanguagesPreferencePage_missingLanguage, affectedLanguages)); messageBox.open(); } fMappingWidget.setMappings(fMappings.getWorkspaceMappings()); } public void init(IWorkbench workbench) { } @Override public boolean performOk() { try { if (!fMappingWidget.isChanged()) { return true; } IContentType[] affectedContentTypes = fMappingWidget.getAffectedContentTypes(); LanguageManager manager = LanguageManager.getInstance(); WorkspaceLanguageConfiguration config = manager.getWorkspaceLanguageConfiguration(); config.setWorkspaceMappings(fMappingWidget.getContentTypeMappings()); manager.storeWorkspaceLanguageConfiguration(affectedContentTypes); fMappingWidget.setChanged(false); return true; } catch (CoreException e) { CUIPlugin.log(e); return false; } } @Override protected void performDefaults() { super.performDefaults(); // set to default IEclipsePreferences node = InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID); node.remove(CCorePreferenceConstants.WORKSPACE_LANGUAGE_MAPPINGS); try { // remove workspace mappings Map<String,String> currentMappings= fMappings.getWorkspaceMappings(); Set<String> keys = currentMappings.keySet(); String[] contentTypeIds = keys.toArray(new String[keys.size()]); for (String contentTypeId : contentTypeIds) { fMappings.removeWorkspaceMapping(contentTypeId); } // add default mappings LanguageMappingStore store = new LanguageMappingStore(); WorkspaceLanguageConfiguration defaultConfig = store.decodeWorkspaceMappings(); Map<String,String> defaultMappings= defaultConfig.getWorkspaceMappings(); for (String contentTypeId : defaultMappings.keySet()) { String language= defaultMappings.get(contentTypeId); fMappings.addWorkspaceMapping(contentTypeId, language); } fetchMappings(); fMappingWidget.refreshMappings(); fMappingWidget.setChanged(false); } catch (CoreException e) { CUIPlugin.log(e); } } }