diff options
author | Michael Valenta | 2005-11-17 16:49:24 +0000 |
---|---|---|
committer | Michael Valenta | 2005-11-17 16:49:24 +0000 |
commit | a18e979b6498195f14c6a010bc41dea566e50c65 (patch) | |
tree | 3530bb7866dd2aab01004b48beff9de1d2f9271f | |
parent | 390723eb1d9a33ac8d7f9665ac3063fad4988b18 (diff) | |
download | eclipse.platform.team-a18e979b6498195f14c6a010bc41dea566e50c65.tar.gz eclipse.platform.team-a18e979b6498195f14c6a010bc41dea566e50c65.tar.xz eclipse.platform.team-a18e979b6498195f14c6a010bc41dea566e50c65.zip |
Got java content provider working
6 files changed, 202 insertions, 12 deletions
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/AbstractTeamAwareContentProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/AbstractTeamAwareContentProvider.java new file mode 100644 index 000000000..51cfe0472 --- /dev/null +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/AbstractTeamAwareContentProvider.java @@ -0,0 +1,155 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.team.internal.ui.mapping; + +import org.eclipse.core.resources.mapping.ModelProvider; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.team.ui.TeamUI; +import org.eclipse.team.ui.mapping.IResourceMappingScope; +import org.eclipse.team.ui.mapping.ISynchronizationContext; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.navigator.IExtensionStateModel; +import org.eclipse.ui.navigator.internal.extensions.ICommonContentProvider; + +/** + * Abstract team aware content provider that delegates to anotehr content provider + */ +public abstract class AbstractTeamAwareContentProvider implements ICommonContentProvider { + + private ModelProvider modelProvider; + private IResourceMappingScope scope; + private ISynchronizationContext context; + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object parentElement) { + if (parentElement == getModelProvider()) { + return filter(parentElement, getDelegateContentProvider().getChildren(getModelRoot())); + } + return filter(parentElement, getDelegateContentProvider().getChildren(parentElement)); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) + */ + public Object getParent(Object element) { + if (element instanceof ModelProvider) + return null; + if (element == getModelRoot()) + return null; + Object parent = getDelegateContentProvider().getParent(element); + if (parent == getModelRoot()) + return getModelProvider(); + return parent; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) + */ + public boolean hasChildren(Object element) { + return getDelegateContentProvider().hasChildren(element) && filter(element, getChildren(element)).length > 0; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + if (inputElement == getModelProvider()) { + return filter(inputElement, getDelegateContentProvider().getChildren(getModelRoot())); + } + return filter(inputElement, getDelegateContentProvider().getElements(inputElement)); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + // Nothing to do + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + getDelegateContentProvider().inputChanged(viewer, oldInput, newInput); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.navigator.internal.extensions.ICommonContentProvider#init(org.eclipse.ui.navigator.IExtensionStateModel, org.eclipse.ui.IMemento) + */ + public void init(IExtensionStateModel aStateModel, IMemento aMemento) { + scope = (IResourceMappingScope)aStateModel.getProperty(TeamUI.RESOURCE_MAPPING_SCOPE); + context = (ISynchronizationContext)aStateModel.getProperty(TeamUI.SYNCHRONIZATION_CONTEXT); + ITreeContentProvider provider = getDelegateContentProvider(); + if (provider instanceof ICommonContentProvider) { + ((ICommonContentProvider) provider).init(aStateModel, aMemento); + } + } + + protected ISynchronizationContext getContext() { + return context; + } + + protected IResourceMappingScope getScope() { + return scope; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento) + */ + public void restoreState(IMemento aMemento) { + ITreeContentProvider provider = getDelegateContentProvider(); + if (provider instanceof ICommonContentProvider) { + ((ICommonContentProvider) provider).restoreState(aMemento); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento) + */ + public void saveState(IMemento aMemento) { + ITreeContentProvider provider = getDelegateContentProvider(); + if (provider instanceof ICommonContentProvider) { + ((ICommonContentProvider) provider).saveState(aMemento); + } + } + + /** + * Return the model content provider that the team aware content + * provider delegates to. + * @return the model content provider + */ + protected abstract ITreeContentProvider getDelegateContentProvider(); + + /** + * Filter the obtained children of the given parent so that only the + * desired elements are shown. + * @param parentElement the parent element + * @param children the children + * @return the filtered children + */ + protected abstract Object[] filter(Object parentElement, Object[] children); + + /** + * Return the model provider for this content provider. + * @return the model provider for this content provider + */ + protected abstract ModelProvider getModelProvider(); + + /** + * Return the object that acts as the model root. It is used when getting the children + * for a model provider. + * @return the object that acts as the model root + */ + protected abstract Object getModelRoot(); +} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSynchronizePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSynchronizePage.java index 32339d12e..45890572d 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSynchronizePage.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSynchronizePage.java @@ -20,6 +20,8 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.team.internal.ui.synchronize.*; import org.eclipse.team.ui.mapping.ISynchronizationContext; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.ui.IContributorResourceAdapter; +import org.eclipse.ui.ide.IContributorResourceAdapter2; /** * A synchronize page that uses @@ -113,6 +115,11 @@ public class ModelSynchronizePage extends AbstractSynchronizePage { if (adapted instanceof ResourceMapping) { return(ResourceMapping) adapted; } + adapted = adaptable.getAdapter(IContributorResourceAdapter.class); + if (adapted instanceof IContributorResourceAdapter2) { + IContributorResourceAdapter2 cra = (IContributorResourceAdapter2) adapted; + return cra.getAdaptedResourceMapping(adaptable); + } } else { Object adapted = Platform.getAdapterManager().getAdapter(o, ResourceMapping.class); if (adapted instanceof ResourceMapping) { diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java index 4e8325e46..6187c0f9b 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java @@ -26,7 +26,7 @@ public class ResourceModelLabelProvider extends /* (non-Javadoc) * @see org.eclipse.team.internal.ui.mapping.SynchronizationOperationLabelProvider#getBaseLabelProvider() */ - protected ILabelProvider getBaseLabelProvider() { + protected ILabelProvider getDelegateLabelProvider() { return provider ; } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationOperationLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationOperationLabelProvider.java index 8db63e627..0fba40774 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationOperationLabelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationOperationLabelProvider.java @@ -32,7 +32,19 @@ public abstract class SynchronizationOperationLabelProvider extends Synchronizat * @see org.eclipse.ui.navigator.ICommonLabelProvider#init(org.eclipse.ui.navigator.IExtensionStateModel, org.eclipse.jface.viewers.ITreeContentProvider) */ public void init(IExtensionStateModel aStateModel, ITreeContentProvider aContentProvider) { - init((IResourceMappingScope)aStateModel.getProperty(TeamUI.RESOURCE_MAPPING_SCOPE), (ISynchronizationContext)aStateModel.getProperty(TeamUI.SYNCHRONIZATION_CONTEXT)); + init((IResourceMappingScope)aStateModel.getProperty(TeamUI.RESOURCE_MAPPING_SCOPE), (ISynchronizationContext)aStateModel.getProperty(TeamUI.SYNCHRONIZATION_CONTEXT)); + ILabelProvider provider = getDelegateLabelProvider(); + if (provider instanceof ICommonLabelProvider) { + if (aContentProvider instanceof AbstractTeamAwareContentProvider) { + // Assume that there is a similary wrapped content provider and that the wrapped label provider + // only knows about that one + // TODO: This is kind of dangerous to build in. We need to consider alternatives + AbstractTeamAwareContentProvider tacp = (AbstractTeamAwareContentProvider) aContentProvider; + ((ICommonLabelProvider) provider).init(aStateModel, tacp.getDelegateContentProvider()); + } else { + ((ICommonLabelProvider) provider).init(aStateModel, aContentProvider); + } + } } /** @@ -57,14 +69,31 @@ public abstract class SynchronizationOperationLabelProvider extends Synchronizat * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento) */ public void restoreState(IMemento aMemento) { - // Do nothing by default + ILabelProvider provider = getDelegateLabelProvider(); + if (provider instanceof ICommonLabelProvider) { + ((ICommonLabelProvider) provider).restoreState(aMemento); + } } /* (non-Javadoc) * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento) */ public void saveState(IMemento aMemento) { - // Do nothing by default + ILabelProvider provider = getDelegateLabelProvider(); + if (provider instanceof ICommonLabelProvider) { + ((ICommonLabelProvider) provider).saveState(aMemento); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.navigator.IDescriptionProvider#getDescription(java.lang.Object) + */ + public String getDescription(Object anElement) { + ILabelProvider provider = getDelegateLabelProvider(); + if (provider instanceof ICommonLabelProvider) { + return ((ICommonLabelProvider) provider).getDescription(anElement); + } + return getDelegateLabelProvider().toString(); } /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationStateLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationStateLabelProvider.java index ce21a094c..f179338d1 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationStateLabelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/SynchronizationStateLabelProvider.java @@ -37,7 +37,7 @@ public abstract class SynchronizationStateLabelProvider implements ILabelProvide * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) */ public Image getImage(Object element) { - ILabelProvider modelLabelProvider = getBaseLabelProvider(); + ILabelProvider modelLabelProvider = getDelegateLabelProvider(); Image base = modelLabelProvider.getImage(element); if (isDecorationEnabled() && base != null) { int kind = getSyncKind(element); @@ -67,7 +67,7 @@ public abstract class SynchronizationStateLabelProvider implements ILabelProvide * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) */ public String getText(Object element) { - ILabelProvider modelLabelProvider = getBaseLabelProvider(); + ILabelProvider modelLabelProvider = getDelegateLabelProvider(); String base = modelLabelProvider.getText(element); if (isSyncInfoInTextEnabled()) { int kind = getSyncKind(element); @@ -83,7 +83,7 @@ public abstract class SynchronizationStateLabelProvider implements ILabelProvide * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void addListener(ILabelProviderListener listener) { - getBaseLabelProvider().addListener(listener); + getDelegateLabelProvider().addListener(listener); } /* (non-Javadoc) @@ -104,14 +104,14 @@ public abstract class SynchronizationStateLabelProvider implements ILabelProvide * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) */ public boolean isLabelProperty(Object element, String property) { - return getBaseLabelProvider().isLabelProperty(element, property); + return getDelegateLabelProvider().isLabelProperty(element, property); } /* (non-Javadoc) * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void removeListener(ILabelProviderListener listener) { - getBaseLabelProvider().removeListener(listener); + getDelegateLabelProvider().removeListener(listener); } /** @@ -132,7 +132,7 @@ public abstract class SynchronizationStateLabelProvider implements ILabelProvide * @return the label provider that will return the text and image * appropriate for the given model element */ - protected abstract ILabelProvider getBaseLabelProvider(); + protected abstract ILabelProvider getDelegateLabelProvider(); /** * Return whether the label provider shoudl decorate with the synchronization state. diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java index de7516283..3dd5c943f 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java @@ -283,8 +283,7 @@ public class ParticipantPageSaveablePart extends SaveablePartAdapter implements ((ISynchronizePage)page).getViewer().addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ICompareInput input = getCompareInput(event.getSelection()); - if (input != null) - setInput(input); + setInput(input); } }); initializeDiffViewer(((ISynchronizePage)page).getViewer()); |