Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2006-02-23 21:54:44 +0000
committerMichael Valenta2006-02-23 21:54:44 +0000
commit4eb505447d3075cb779a49ba0ee8744b117a26a7 (patch)
tree6d6459e5157e20cb0697c493709ebd576fbb4f84
parentd6429caf6f8dfe8f5a6d4bfced686f610fc1c415 (diff)
downloadeclipse.platform.team-4eb505447d3075cb779a49ba0ee8744b117a26a7.tar.gz
eclipse.platform.team-4eb505447d3075cb779a49ba0ee8744b117a26a7.tar.xz
eclipse.platform.team-4eb505447d3075cb779a49ba0ee8744b117a26a7.zip
Bug 120191 [Model Sync] Add ability to turn on/off model content
-rw-r--r--bundles/org.eclipse.team.ui/plugin.properties3
-rw-r--r--bundles/org.eclipse.team.ui/plugin.xml5
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java7
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java25
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java168
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java61
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java74
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java28
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java2
9 files changed, 347 insertions, 26 deletions
diff --git a/bundles/org.eclipse.team.ui/plugin.properties b/bundles/org.eclipse.team.ui/plugin.properties
index f92074868..6e39d88e7 100644
--- a/bundles/org.eclipse.team.ui/plugin.properties
+++ b/bundles/org.eclipse.team.ui/plugin.properties
@@ -63,4 +63,5 @@ TeamContentProvider = Team Content Providers
TeamDecorators = Team Decorators
HistoryView = History
ModelSyncParticipant = Synchronization
-ResourcesContentExtension = Resources \ No newline at end of file
+ResourcesContentExtension = Resources
+EnabledModels = Models \ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/plugin.xml b/bundles/org.eclipse.team.ui/plugin.xml
index 2c1928f27..e9643bfe2 100644
--- a/bundles/org.eclipse.team.ui/plugin.xml
+++ b/bundles/org.eclipse.team.ui/plugin.xml
@@ -40,6 +40,11 @@
id="org.eclipse.team.ui.IgnorePreferences">
<keywordReference id="org.eclipse.team.ui.team"/>
</page>
+ <page
+ category="org.eclipse.team.ui.TeamPreferences"
+ class="org.eclipse.team.internal.ui.mapping.ModelEnablementPreferencePage"
+ id="org.eclipse.team.ui.enabledModels"
+ name="%EnabledModels"/>
</extension>
<!-- ****************** POPUP ACTIONS *************** -->
<extension
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
index 4ecc9d7d6..6c60b83ba 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
@@ -17,6 +17,7 @@ import java.util.*;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.preference.IPreferenceStore;
@@ -379,5 +380,9 @@ public class TeamUIPlugin extends AbstractUIPlugin {
} catch (InterruptedException e2) {
// Nothing to be done
}
- }
+ }
+
+ public org.osgi.service.prefs.Preferences getInstancePreferences() {
+ return new InstanceScope().getNode(getBundle().getSymbolicName());
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
index e888f3c73..a1e213b93 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
@@ -16,6 +16,8 @@ import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceTraversal;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
@@ -37,7 +39,7 @@ import org.eclipse.ui.part.IPageSite;
/**
* Provides a Common Navigator based viewer for use by a {@link ModelSynchronizePage}.
*/
-public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements INavigatorContentServiceListener, IEmptyTreeListener {
+public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements INavigatorContentServiceListener, IEmptyTreeListener, IPropertyChangeListener {
public static final class NavigableCommonViewer extends CommonViewer implements ITreeViewerAccessor {
private final IEmptyTreeListener listener;
@@ -121,6 +123,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
final CommonViewer v = new NavigableCommonViewer(configuration.getViewerId(), parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, listener);
v.setSorter(new TeamViewerSorter(new CommonViewerSorter()));
ISynchronizationScope scope = getScope(configuration);
+ bindTeamContentProviders(v);
scope.addScopeChangeListener(new ISynchronizationScopeChangeListener() {
public void scopeChanged(final ISynchronizationScope scope,
ResourceMapping[] newMappings, ResourceTraversal[] newTraversals) {
@@ -139,9 +142,19 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
}
private static void enableContentProviders(CommonViewer v, ISynchronizationScope scope) {
- v.getNavigatorContentService().bindExtensions(TeamUI.getTeamContentProviderManager().getContentProviderIds(scope), true);
v.getNavigatorContentService().getActivationService().activateExtensions(TeamUI.getTeamContentProviderManager().getContentProviderIds(scope), true);
}
+
+ private static void bindTeamContentProviders(CommonViewer v) {
+ ITeamContentProviderManager teamContentProviderManager = TeamUI.getTeamContentProviderManager();
+ ITeamContentProviderDescriptor[] descriptors = teamContentProviderManager.getDescriptors();
+ Set toBind = new HashSet();
+ for (int i = 0; i < descriptors.length; i++) {
+ ITeamContentProviderDescriptor descriptor = descriptors[i];
+ toBind.add(descriptor.getContentExtensionId());
+ }
+ v.getNavigatorContentService().bindExtensions((String[]) toBind.toArray(new String[toBind.size()]), true);
+ }
private static ISynchronizationScope getScope(ISynchronizePageConfiguration configuration) {
return (ISynchronizationScope)configuration.getProperty(ITeamContentProviderManager.P_SYNCHRONIZATION_SCOPE);
@@ -155,6 +168,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
public CommonViewerAdvisor(Composite parent, ISynchronizePageConfiguration configuration) {
super(configuration);
final CommonViewer viewer = CommonViewerAdvisor.createViewer(parent, configuration, this);
+ TeamUI.getTeamContentProviderManager().addPropertyChangeListener(this);
GridData data = new GridData(GridData.FILL_BOTH);
viewer.getControl().setLayoutData(data);
viewer.getNavigatorContentService().addListener(this);
@@ -261,6 +275,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
* @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#dispose()
*/
public void dispose() {
+ TeamUI.getTeamContentProviderManager().removePropertyChangeListener(this);
actionService.dispose();
super.dispose();
}
@@ -305,4 +320,10 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
emptyTreeListener.notEmpty(viewer);
}
+ public void propertyChange(PropertyChangeEvent event) {
+ if (event.getProperty().equals(ITeamContentProviderManager.PROP_ENABLED_MODEL_PROVIDERS)) {
+ enableContentProviders((CommonViewer)getViewer(), getScope(getConfiguration()));
+ }
+ }
+
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java
new file mode 100644
index 000000000..cdb9f1f67
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.team.internal.ui.mapping;
+
+import java.util.*;
+
+import org.eclipse.core.resources.mapping.IModelProviderDescriptor;
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.team.internal.ui.SWTUtils;
+import org.eclipse.team.internal.ui.TeamUIPlugin;
+import org.eclipse.team.internal.ui.registry.TeamContentProviderDescriptor;
+import org.eclipse.team.internal.ui.registry.TeamContentProviderManager;
+import org.eclipse.team.ui.TeamUI;
+import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor;
+import org.eclipse.team.ui.mapping.ITeamContentProviderManager;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class ModelEnablementPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+ private Set previosulyEnabled = new HashSet();
+
+ public ModelEnablementPreferencePage() {
+ setTitle("Models");
+ setPreferenceStore(TeamUIPlugin.getPlugin().getPreferenceStore());
+ }
+
+ private CheckboxTableViewer tableViewer;
+
+ protected Control createContents(Composite parent) {
+
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ Label l = SWTUtils.createLabel(composite, "&Select the model types that should be available when synchronizing");
+ l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ tableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);
+ tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
+ tableViewer.setContentProvider(new IStructuredContentProvider() {
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // noting to do
+ }
+ public void dispose() {
+ // nothing to do
+ }
+ public Object[] getElements(Object element) {
+ if (element instanceof ITeamContentProviderManager) {
+ ITeamContentProviderManager manager = (ITeamContentProviderManager) element;
+ return manager.getDescriptors();
+ }
+ return new Object[0];
+ }
+ });
+ tableViewer.setLabelProvider(new LabelProvider() {
+ Map images = new HashMap();
+ public String getText(Object element) {
+ if (element instanceof ITeamContentProviderDescriptor) {
+ ITeamContentProviderDescriptor desc = (ITeamContentProviderDescriptor) element;
+ return getTextFor(desc.getModelProviderId());
+ }
+ return super.getText(element);
+ }
+ private String getTextFor(String modelProviderId) {
+ IModelProviderDescriptor desc = ModelProvider.getModelProviderDescriptor(modelProviderId);
+ if (desc != null) {
+ return desc.getLabel();
+ }
+ return modelProviderId;
+ }
+ public Image getImage(Object element) {
+ if (element instanceof ITeamContentProviderDescriptor) {
+ ITeamContentProviderDescriptor desc = (ITeamContentProviderDescriptor) element;
+ Image image = (Image)images.get(desc);
+ if (image == null) {
+ ImageDescriptor idesc = desc.getImageDescriptor();
+ if (idesc != null) {
+ image = idesc.createImage();
+ if (image != null) {
+ images.put(desc, image);
+ }
+ }
+ }
+ return image;
+ }
+ return super.getImage(element);
+ }
+ public void dispose() {
+ for (Iterator iter = images.values().iterator(); iter.hasNext();) {
+ Image image = (Image) iter.next();
+ image.dispose();
+ }
+ super.dispose();
+ }
+ });
+ tableViewer.setInput(TeamUI.getTeamContentProviderManager());
+ updateChecks();
+ applyDialogFont(composite);
+ return composite;
+ }
+
+ private void updateChecks() {
+ ITeamContentProviderDescriptor[] descriptors = TeamUI.getTeamContentProviderManager().getDescriptors();
+ for (int i = 0; i < descriptors.length; i++) {
+ ITeamContentProviderDescriptor descriptor = descriptors[i];
+ if (descriptor.isEnabled()) {
+ previosulyEnabled.add(descriptor);
+ }
+ }
+ tableViewer.setCheckedElements(previosulyEnabled.toArray());
+ }
+
+ public boolean performOk() {
+ boolean changed = false;
+ Object[] checked = tableViewer.getCheckedElements();
+ Set nowEnabled = new HashSet();
+ nowEnabled.addAll(Arrays.asList(checked));
+ ITeamContentProviderDescriptor[] descriptors = TeamUI.getTeamContentProviderManager().getDescriptors();
+ for (int i = 0; i < descriptors.length; i++) {
+ ITeamContentProviderDescriptor descriptor = descriptors[i];
+ boolean enable = false;
+ for (int j = 0; j < checked.length; j++) {
+ ITeamContentProviderDescriptor checkedDesc = (ITeamContentProviderDescriptor)checked[j];
+ if (checkedDesc.getModelProviderId().equals(descriptor.getModelProviderId())) {
+ enable = true;
+ break;
+ }
+ }
+ if (descriptor.isEnabled() != enable) {
+ ((TeamContentProviderDescriptor)descriptor).setEnabled(enable);
+ changed = true;
+ }
+ }
+ if (changed) {
+ ((TeamContentProviderManager)TeamUI.getTeamContentProviderManager()).enablementChanged(
+ (ITeamContentProviderDescriptor[]) previosulyEnabled.toArray(new ITeamContentProviderDescriptor[previosulyEnabled.size()]),
+ (ITeamContentProviderDescriptor[]) nowEnabled.toArray(new ITeamContentProviderDescriptor[nowEnabled.size()]));
+ previosulyEnabled = nowEnabled;
+ }
+ return true;
+ }
+
+ protected void performDefaults() {
+ tableViewer.setCheckedElements(TeamUI.getTeamContentProviderManager().getDescriptors());
+ }
+
+ public void init(IWorkbench workbench) {
+ // ignore
+ }
+
+}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java
index 4ceb59cdf..196f2b7b4 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java
@@ -10,6 +10,9 @@
*******************************************************************************/
package org.eclipse.team.internal.ui.mapping;
+import java.util.HashSet;
+import java.util.Set;
+
import org.eclipse.core.resources.mapping.*;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.Viewer;
@@ -17,6 +20,8 @@ import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.core.mapping.*;
import org.eclipse.team.internal.ui.*;
+import org.eclipse.team.ui.TeamUI;
+import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor;
import org.eclipse.team.ui.mapping.ITeamContentProviderManager;
import org.eclipse.team.ui.synchronize.*;
@@ -31,13 +36,17 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
Utils.initAction(this, "action.pickModels."); //$NON-NLS-1$
this.configuration = configuration;
listener = new org.eclipse.jface.util.IPropertyChangeListener() {
- public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
- if (event.getProperty() == ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER) {
- update();
- }
- }
- };
+ public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
+ if (event.getProperty() == ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER) {
+ update();
+ }
+ if (event.getProperty().equals(ITeamContentProviderManager.PROP_ENABLED_MODEL_PROVIDERS)) {
+ rebuildMenu();
+ }
+ }
+ };
this.configuration.addPropertyChangeListener(listener);
+ TeamUI.getTeamContentProviderManager().addPropertyChangeListener(listener);
getSynchronizationContext().getScope().addScopeChangeListener(this);
showAllAction = new Action(TeamUIMessages.ModelSelectionDropDownAction_0) {
public void run() {
@@ -68,6 +77,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
}
getSynchronizationContext().getScope().removeScopeChangeListener(this);
configuration.removePropertyChangeListener(listener);
+ TeamUI.getTeamContentProviderManager().removePropertyChangeListener(listener);
}
public Menu getMenu(Control parent) {
@@ -76,7 +86,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
menuManager = new MenuManager();
fMenu = menuManager.createContextMenu(parent);
menuManager.add(showAllAction);
- ModelProvider[] modelProviders = ((ModelSynchronizeParticipant)configuration.getParticipant()).getEnabledModelProviders();
+ ModelProvider[] modelProviders = getEnabledModelProviders();
if (modelProviders.length > 0)
menuManager.add(new Separator());
addModelsToMenu(modelProviders);
@@ -88,6 +98,19 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
return fMenu;
}
+ private ModelProvider[] getEnabledModelProviders() {
+ Set result = new HashSet();
+ ModelProvider[] providers = ((ModelSynchronizeParticipant)configuration.getParticipant()).getEnabledModelProviders();
+ for (int i = 0; i < providers.length; i++) {
+ ModelProvider provider = providers[i];
+ ITeamContentProviderDescriptor desc = TeamUI.getTeamContentProviderManager().getDescriptor(provider.getId());
+ if (desc != null && desc.isEnabled()) {
+ result.add(provider);
+ }
+ }
+ return (ModelProvider[]) result.toArray(new ModelProvider[result.size()]);
+ }
+
private void addModelsToMenu(ModelProvider[] modelProviders) {
String id = getActiveProviderId();
for (int i = 0; i < modelProviders.length; i++) {
@@ -164,16 +187,20 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
*/
public void scopeChanged(ISynchronizationScope scope, ResourceMapping[] newMappings, ResourceTraversal[] newTraversals) {
if (newMappings.length > 0) {
- Display display = TeamUIPlugin.getStandardDisplay();
- display.asyncExec(new Runnable() {
- public void run() {
- if(menuManager != null) {
- menuManager.dispose();
- menuManager = null;
- }
- update();
- }
- });
+ rebuildMenu();
}
}
+
+ private void rebuildMenu() {
+ Display display = TeamUIPlugin.getStandardDisplay();
+ display.asyncExec(new Runnable() {
+ public void run() {
+ if(menuManager != null) {
+ menuManager.dispose();
+ menuManager = null;
+ }
+ update();
+ }
+ });
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java
index ec311ef71..fe12d9fde 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java
@@ -17,6 +17,8 @@ import org.eclipse.osgi.util.NLS;
import org.eclipse.team.internal.ui.TeamUIMessages;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
/**
* A team content provider descriptor associates a model provider
@@ -30,6 +32,9 @@ public class TeamContentProviderDescriptor implements ITeamContentProviderDescri
private static final String ATT_CONTENT_EXTENSION_ID = "contentExtensionId"; //$NON-NLS-1$
private static final String ATT_ICON = "icon"; //$NON-NLS-1$
private static final String ATT_PREFERENCE_PAGE = "preferencePage"; //$NON-NLS-1$
+
+ private static final String PREF_TEAM_CONTENT_DESCRIPTORS = "teamContentDescriptors"; //$NON-NLS-1$
+ private static final String PREF_ENABLED = "enabled"; //$NON-NLS-1$
private String modelProviderId;
private String contentExtensionId;
@@ -111,6 +116,73 @@ public class TeamContentProviderDescriptor implements ITeamContentProviderDescri
* @see org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor#isEnabled()
*/
public boolean isEnabled() {
- return true;
+ if (!hasPreferences()) {
+ return true;
+ }
+ return getPreferences().getBoolean(PREF_ENABLED, true);
+ }
+
+ public void setEnabled(boolean enable) {
+ if (isEnabled() != enable) {
+ getPreferences().putBoolean(PREF_ENABLED, enable);
+ flushPreferences();
+ }
+ }
+
+ public Preferences getParentPreferences() {
+ return TeamUIPlugin.getPlugin().getInstancePreferences().node(PREF_TEAM_CONTENT_DESCRIPTORS);
+ }
+ /*
+ * Return the preferences node for this repository
+ */
+ public Preferences getPreferences() {
+ if (!hasPreferences()) {
+ ensurePreferencesStored();
+ }
+ return internalGetPreferences();
+ }
+
+ private Preferences internalGetPreferences() {
+ return getParentPreferences().node(getPreferenceName());
+ }
+
+ private boolean hasPreferences() {
+ try {
+ return getParentPreferences().nodeExists(getPreferenceName());
+ } catch (BackingStoreException e) {
+ TeamUIPlugin.log(IStatus.ERROR, NLS.bind("Error accessing team content preference store for {0}", new String[] { getModelProviderId() }), e); //$NON-NLS-1$
+ return false;
+ }
+ }
+
+ /**
+ * Return a unique name that identifies this location but
+ * does not contain any slashes (/). Also, do not use ':'.
+ * Although a valid path character, the initial core implementation
+ * didn't handle it well.
+ */
+ private String getPreferenceName() {
+ return getModelProviderId();
+ }
+
+ public void storePreferences() {
+ Preferences prefs = internalGetPreferences();
+ // Must store at least one preference in the node
+ prefs.putBoolean(PREF_ENABLED, true);
+ flushPreferences();
+ }
+
+ private void flushPreferences() {
+ try {
+ internalGetPreferences().flush();
+ } catch (BackingStoreException e) {
+ TeamUIPlugin.log(IStatus.ERROR, NLS.bind("Error flushing team content preference store for {0}", new String[] { getModelProviderId() }), e); //$NON-NLS-1$
+ }
+ }
+
+ private void ensurePreferencesStored() {
+ if (!hasPreferences()) {
+ storePreferences();
+ }
}
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java
index b6c485a0c..b56094696 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java
@@ -14,6 +14,7 @@ import java.util.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.team.core.mapping.ISynchronizationScope;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor;
@@ -30,6 +31,8 @@ public class TeamContentProviderManager implements ITeamContentProviderManager {
Map descriptors;
+ private ListenerList listeners = new ListenerList(ListenerList.IDENTITY);
+
public static ITeamContentProviderManager getInstance() {
if (instance == null)
instance = new TeamContentProviderManager();
@@ -85,12 +88,29 @@ public class TeamContentProviderManager implements ITeamContentProviderManager {
}
public void addPropertyChangeListener(IPropertyChangeListener listener) {
- // TODO Auto-generated method stub
-
+ listeners.add(listener);
}
public void removePropertyChangeListener(IPropertyChangeListener listener) {
- // TODO Auto-generated method stub
-
+ listeners.remove(listener);
+ }
+
+ private void firePropertyChange(final PropertyChangeEvent event) {
+ Object[] allListeners = listeners.getListeners();
+ for (int i = 0; i < allListeners.length; i++) {
+ final IPropertyChangeListener listener = (IPropertyChangeListener)allListeners[i];
+ SafeRunner.run(new ISafeRunnable() {
+ public void run() throws Exception {
+ listener.propertyChange(event);
+ }
+ public void handleException(Throwable exception) {
+ // handler by runner
+ }
+ });
+ }
+ }
+
+ public void enablementChanged(ITeamContentProviderDescriptor[] oldEnabled, ITeamContentProviderDescriptor[] newEnabled) {
+ firePropertyChange(new PropertyChangeEvent(this, PROP_ENABLED_MODEL_PROVIDERS, oldEnabled, newEnabled));
}
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java
index ef0eabee1..15ea2ec24 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java
@@ -22,6 +22,7 @@ import org.eclipse.swt.widgets.Shell;
import org.eclipse.team.core.mapping.*;
import org.eclipse.team.core.mapping.provider.*;
import org.eclipse.team.internal.ui.*;
+import org.eclipse.team.internal.ui.mapping.ModelEnablementPreferencePage;
import org.eclipse.team.internal.ui.mapping.ModelSynchronizePage;
import org.eclipse.team.internal.ui.synchronize.*;
import org.eclipse.team.ui.TeamUI;
@@ -604,6 +605,7 @@ public class ModelSynchronizeParticipant extends
PreferencePage page = preferencePages[i];
pages.add(page);
}
+ pages.add(new ModelEnablementPreferencePage());
ITeamContentProviderDescriptor[] descriptors = TeamUI.getTeamContentProviderManager().getDescriptors();
for (int i = 0; i < descriptors.length; i++) {
ITeamContentProviderDescriptor descriptor = descriptors[i];

Back to the top