/******************************************************************************* * Copyright (C) 2011, 2015 Mathias Kinzler <mathias.kinzler@sap.com> 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 *******************************************************************************/ package org.eclipse.egit.ui.internal.preferences; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.egit.core.Activator.MergeStrategyDescriptor; import org.eclipse.egit.core.GitCorePreferences; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.UIPreferences; import org.eclipse.egit.ui.internal.UIText; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.RadioGroupFieldEditor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.Policy; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.preferences.ScopedPreferenceStore; /** Preference page for views preferences */ public class SynchronizePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { private RadioGroupFieldEditor preferredMergeStrategyEditor; private ScopedPreferenceStore corePreferenceStore; /** * The default constructor */ public SynchronizePreferencePage() { super(FLAT); } @Override protected IPreferenceStore doGetPreferenceStore() { return Activator.getDefault().getPreferenceStore(); } @Override public void init(final IWorkbench workbench) { // Do nothing. } @Override protected void createFieldEditors() { addField(new BooleanFieldEditor( UIPreferences.SYNC_VIEW_FETCH_BEFORE_LAUNCH, UIText.GitPreferenceRoot_fetchBeforeSynchronization, getFieldEditorParent())); addField(new BooleanFieldEditor( UIPreferences.SYNC_VIEW_ALWAYS_SHOW_CHANGESET_MODEL, UIText.GitPreferenceRoot_automaticallyEnableChangesetModel, getFieldEditorParent())); addField(new BooleanFieldEditor(UIPreferences.USE_LOGICAL_MODEL, UIText.GitPreferenceRoot_useLogicalModel, getFieldEditorParent())); Label spacer = new Label(getFieldEditorParent(), SWT.NONE); spacer.setSize(0, 12); Composite modelStrategyParent = getFieldEditorParent(); preferredMergeStrategyEditor = new RadioGroupFieldEditor( GitCorePreferences.core_preferredMergeStrategy, UIText.GitPreferenceRoot_preferreMergeStrategy_group, 1, getAvailableMergeStrategies(), modelStrategyParent, false); preferredMergeStrategyEditor.getLabelControl(modelStrategyParent) .setToolTipText( UIText.GitPreferenceRoot_preferreMergeStrategy_label); addField(preferredMergeStrategyEditor); } @Override protected void initialize() { super.initialize(); // The default initialize sets the same preference store for every field // We want the preferred strategy to use the core store preferredMergeStrategyEditor .setPreferenceStore(getCorePreferenceStore()); preferredMergeStrategyEditor.load(); } private String[][] getAvailableMergeStrategies() { org.eclipse.egit.core.Activator coreActivator = org.eclipse.egit.core.Activator .getDefault(); List<String[]> strategies = new ArrayList<>(); // We need to add a default name for EGit default strategy in order to // be able to distinguish a state where users haven't chosen any // preference (in this case, values defined in eclipse configuration // files may apply) or if they have chosen the default merge strategy. strategies.add(new String[] { UIText.GitPreferenceRoot_defaultMergeStrategyLabel, GitCorePreferences.core_preferredMergeStrategy_Default }); for (MergeStrategyDescriptor strategy : coreActivator .getRegisteredMergeStrategies()) { strategies.add(new String[] { strategy.getLabel(), strategy.getName() }); } return strategies.toArray(new String[strategies.size()][2]); } private ScopedPreferenceStore getCorePreferenceStore() { if (corePreferenceStore == null) { corePreferenceStore = new ScopedPreferenceStore( InstanceScope.INSTANCE, org.eclipse.egit.core.Activator.getPluginId()); } return corePreferenceStore; } @Override public boolean performOk() { if (super.performOk()) { // Need to save the core preference store because the // PreferenceDialog will only save the store provided // by doGetPreferenceStore() if (getCorePreferenceStore().needsSaving()) { try { getCorePreferenceStore().save(); } catch (IOException e) { String message = JFaceResources .format("PreferenceDialog.saveErrorMessage", new Object[] { //$NON-NLS-1$ getTitle(), e.getMessage() }); Policy.getStatusHandler() .show(new Status(IStatus.ERROR, Policy.JFACE, message, e), JFaceResources .getString("PreferenceDialog.saveErrorTitle")); //$NON-NLS-1$ } } } return true; } }