diff options
8 files changed, 173 insertions, 56 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetActionGroup.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetActionGroup.java new file mode 100644 index 000000000..9203f79b8 --- /dev/null +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetActionGroup.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 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.ccvs.ui.subscriber; + +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; + +/** + * Action group that is used by CVS Change Set Capabilities + */ +public class CVSChangeSetActionGroup extends SynchronizePageActionGroup { + + private OpenChangeSetAction openCommitSet; + + public void initialize(ISynchronizePageConfiguration configuration) { + super.initialize(configuration); + openCommitSet = new OpenChangeSetAction(configuration); + } + + /* (non-Javadoc) + * @see org.eclipse.team.ui.synchronize.SynchronizePageActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager) + */ + public void fillContextMenu(IMenuManager menu) { + if (getConfiguration().getMode() == ISynchronizePageConfiguration.OUTGOING_MODE) { + appendToGroup( + menu, + ISynchronizePageConfiguration.FILE_GROUP, + openCommitSet); + } + } +} diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogModelProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogModelProvider.java index 840a6239b..d063b7d16 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogModelProvider.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogModelProvider.java @@ -45,6 +45,7 @@ import org.eclipse.team.internal.core.Assert; import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.internal.ui.Utils; import org.eclipse.team.internal.ui.synchronize.*; +import org.eclipse.team.internal.ui.synchronize.actions.ChangeSetActionGroup; import org.eclipse.team.ui.synchronize.*; import org.eclipse.ui.progress.UIJob; diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java index 31b84f3fe..34dded90b 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OpenChangeSetAction.java @@ -11,12 +11,16 @@ package org.eclipse.team.internal.ccvs.ui.subscriber; import java.lang.reflect.InvocationTargetException; +import java.text.DateFormat; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.TeamException; +import org.eclipse.team.core.subscribers.ChangeSet; +import org.eclipse.team.core.subscribers.CheckedInChangeSet; import org.eclipse.team.core.synchronize.*; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.*; import org.eclipse.team.core.variants.IResourceVariant; @@ -28,11 +32,8 @@ import org.eclipse.team.ui.synchronize.*; class OpenChangeSetAction extends SynchronizeModelAction { - private final ChangeLogModelProvider provider; - - protected OpenChangeSetAction(ChangeLogModelProvider provider, ISynchronizePageConfiguration configuration) { + protected OpenChangeSetAction(ISynchronizePageConfiguration configuration) { super(Policy.bind("OpenCommitSetAction.20"), configuration); //$NON-NLS-1$ - this.provider = provider; } /* (non-Javadoc) @@ -55,25 +56,36 @@ class OpenChangeSetAction extends SynchronizeModelAction { }) }); } - + + private ChangeSet getChangeSet(IStructuredSelection selection) { + // First, check to see if a change set is selected directly + if (selection.size() == 1) { + Object o = selection.getFirstElement(); + if (o instanceof IAdaptable) { + ChangeSet set = (ChangeSet)((IAdaptable)o).getAdapter(ChangeSet.class); + if (set != null) + return set; + } + } + // Failing that, check to see if all the selected elements and their childen are in the same change set + return getChangeSet(selection.toArray()); + } + + private ChangeSet getChangeSet(Object[] elements) { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#updateSelection(org.eclipse.jface.viewers.IStructuredSelection) */ protected boolean updateSelection(IStructuredSelection selection) { boolean enabled = super.updateSelection(selection); if (enabled) { - // The selection only contains appropriate files - // only enable if there is only one item selected and - // it is a file or a commit set - if (selection.size() == 1) { - Object o = selection.getFirstElement(); - if (o instanceof ChangeSetDiffNode) return true; - if (o instanceof ISynchronizeModelElement) { - ISynchronizeModelElement element = (ISynchronizeModelElement)o; - IResource resource = element.getResource(); - return (resource != null && resource.getType() == IResource.FILE); - } - } + // The selection only contains appropriate files so + // only enable if the selection is contained within a single change set + ChangeSet set = getChangeSet(selection); + return set != null; } return false; } @@ -121,16 +133,13 @@ class OpenChangeSetAction extends SynchronizeModelAction { private String getCompareTitle() { IDiffElement[] elements = getSelectedDiffElements(); - for (int i = 0; i < elements.length; i++) { - IDiffElement element = elements[i]; - while (element != null) { - if (element instanceof ChangeSetDiffNode) { - return ((ChangeSetDiffNode)element).getShortName(); - } - element = element.getParent(); - } + ChangeSet set = getChangeSet(elements); + if (set instanceof CheckedInChangeSet) { + CheckedInChangeSet cics = (CheckedInChangeSet)set; + String date = DateFormat.getDateTimeInstance().format(cics.getDate()); + return "[" + cics.getAuthor() + "] (" + date + ")"; } - return null; + return "CVS Change"; } private ICVSRepositoryLocation getLocation(SyncInfo info) { diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java index 64ae79696..8c0012981 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java @@ -186,7 +186,13 @@ public class WorkspaceSynchronizeParticipant extends ScopableSubscriberParticipa public SubscriberChangeSetCollector getActiveChangeSetManager() { return CVSUIPlugin.getPlugin().getChangeSetManager(); } - + + /* (non-Javadoc) + * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#getActionGroup() + */ + public SynchronizePageActionGroup getActionGroup() { + return new CVSChangeSetActionGroup(); + } } /** diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetDiffNode.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetDiffNode.java index 8c39fb40e..f1774965e 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetDiffNode.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetDiffNode.java @@ -77,4 +77,14 @@ public class ChangeSetDiffNode extends SynchronizeModelElement { } return super.equals(object); } + + /* (non-Javadoc) + * @see org.eclipse.team.internal.ui.synchronize.SynchronizeModelElement#getAdapter(java.lang.Class) + */ + public Object getAdapter(Class adapter) { + if (adapter.equals(ChangeSet.class)) { + return set; + } + return super.getAdapter(adapter); + } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelProvider.java index b05c1958d..bfea748c1 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelProvider.java @@ -25,6 +25,7 @@ import org.eclipse.team.core.subscribers.ChangeSet; import org.eclipse.team.core.subscribers.IChangeSetChangeListener; import org.eclipse.team.core.synchronize.*; import org.eclipse.team.internal.ui.*; +import org.eclipse.team.internal.ui.synchronize.actions.ChangeSetActionGroup; import org.eclipse.team.ui.synchronize.*; /** diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetActionGroup.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/ChangeSetActionGroup.java index 1966ccff4..ed6c2242f 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetActionGroup.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/ChangeSetActionGroup.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.team.internal.ui.synchronize; +package org.eclipse.team.internal.ui.synchronize.actions; import java.lang.reflect.InvocationTargetException; @@ -25,6 +25,8 @@ import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFil import org.eclipse.team.internal.ui.Policy; import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.internal.ui.actions.TeamAction; +import org.eclipse.team.internal.ui.synchronize.ChangeSetModelProvider; +import org.eclipse.team.internal.ui.synchronize.ChangeSetModelSorter; import org.eclipse.team.ui.synchronize.*; import org.eclipse.ui.actions.BaseSelectionListenerAction; @@ -227,13 +229,8 @@ public final class ChangeSetActionGroup extends SynchronizePageActionGroup { super.initialize(configuration); if (getChangeSetCapability().supportsCheckedInChangeSets()) { - sortByComment = new MenuManager(Policy.bind("ChangeLogModelProvider.0a")); //$NON-NLS-1$ - appendToGroup( - ISynchronizePageConfiguration.P_CONTEXT_MENU, - ISynchronizePageConfiguration.SORT_GROUP, - sortByComment); initializeSortCriteria(configuration); - + sortByComment = new MenuManager(Policy.bind("ChangeLogModelProvider.0a")); //$NON-NLS-1$ sortByComment.add(new ToggleSortOrderAction(Policy.bind("ChangeLogModelProvider.1a"), ChangeSetModelSorter.COMMENT)); //$NON-NLS-1$ sortByComment.add(new ToggleSortOrderAction(Policy.bind("ChangeLogModelProvider.2a"), ChangeSetModelSorter.DATE)); //$NON-NLS-1$ sortByComment.add(new ToggleSortOrderAction(Policy.bind("ChangeLogModelProvider.3a"), ChangeSetModelSorter.USER)); //$NON-NLS-1$ @@ -252,22 +249,32 @@ public final class ChangeSetActionGroup extends SynchronizePageActionGroup { addToChangeSet.add(new Separator()); editChangeSet = new EditChangeSetAction(configuration); makeDefault = new MakeDefaultChangeSetAction(configuration); - + } + } + + /* (non-Javadoc) + * @see org.eclipse.team.ui.synchronize.SynchronizePageActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager) + */ + public void fillContextMenu(IMenuManager menu) { + if (getChangeSetCapability().supportsCheckedInChangeSets() && getConfiguration().getMode() == ISynchronizePageConfiguration.INCOMING_MODE) { + appendToGroup(menu, ISynchronizePageConfiguration.SORT_GROUP, sortByComment); + } + if (getChangeSetCapability().supportsActiveChangeSets() && getConfiguration().getMode() == ISynchronizePageConfiguration.OUTGOING_MODE) { appendToGroup( - ISynchronizePageConfiguration.P_CONTEXT_MENU, + menu, CHANGE_SET_GROUP, addToChangeSet); appendToGroup( - ISynchronizePageConfiguration.P_CONTEXT_MENU, + menu, CHANGE_SET_GROUP, editChangeSet); appendToGroup( - ISynchronizePageConfiguration.P_CONTEXT_MENU, + menu, CHANGE_SET_GROUP, makeDefault); - } - } - + } + } + private void initializeSortCriteria(ISynchronizePageConfiguration configuration) { try { IDialogSettings pageSettings = getConfiguration().getSite().getPageSettings(); diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ChangeSetCapability.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ChangeSetCapability.java index 62cdf1901..29ad078fb 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ChangeSetCapability.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ChangeSetCapability.java @@ -24,52 +24,95 @@ public abstract class ChangeSetCapability { /** * Return whether the associated participant supports - * the display of checked-in change sets. + * the display of checked-in change sets. The default is + * unsupported (<code>false</code>). If subclasses support + * checked-in change sets, they must override the + * <code>createCheckedInChangeSetCollector</code> + * method to return an appropriate values. * @return whether the associated participant supports * the display of checked-in change sets */ - public abstract boolean supportsCheckedInChangeSets(); + public boolean supportsCheckedInChangeSets() { + return false; + } /** * Return whether the associated participant supports - * the use of active change sets. + * the use of active change sets. The default is unsupported + * (<code>false</code>). If a subclass overrides this method in + * order to support active change sets, they must also override the methods + * <code>getActiveChangeSetManager</code>, + * <code>createChangeSet</code> and <code>editChangeSet</code>. * @return whether the associated participant supports * the use of active change sets */ - public abstract boolean supportsActiveChangeSets(); + public boolean supportsActiveChangeSets() { + return false; + } /** * Return the change set collector that manages the active change - * set for the particpant associated with this capability. + * set for the particpant associated with this capability. A <code>null</code> + * is returned if active change sets are not supported. The default is to + * return <code>null</code>. This method must be + * overridden by subclasses that support active change sets. * @return the change set collector that manages the active change - * set for the particpant associated with this capability + * set for the particpant associated with this capability or + * <code>null</code> if active change sets are not supported. */ - public abstract SubscriberChangeSetCollector getActiveChangeSetManager(); + public SubscriberChangeSetCollector getActiveChangeSetManager() { + return null; + } /** * Create a change set from the given manager that contains the given sync info. - * This method is invoked from the UI thread. - * @param configuration TODO + * This method is invoked from the UI thread. A <code>null</code> + * is returned if active change sets are not supported. The default is to + * return <code>null</code>. This method must be + * overridden by subclasses that support active change sets. + * @param configuration the configuration of the page displaying the change sets * @param infos the sync info to be added to the change set * @param manager a change set manager * @return the created set. */ - public abstract ActiveChangeSet createChangeSet(ISynchronizePageConfiguration configuration, SyncInfo[] infos); + public ActiveChangeSet createChangeSet(ISynchronizePageConfiguration configuration, SyncInfo[] infos) { + return null; + } /** - * Edit the title and comment of the given change set. + * Edit the title and comment of the given change set. This method must be + * overridden by subclasses that support active change sets. * This method is invoked from the UI thread. - * @param configuration TODO + * @param configuration the configuration of the page displaying the change sets * @param set the set to be edited */ - public abstract void editChangeSet(ISynchronizePageConfiguration configuration, ActiveChangeSet set); + public void editChangeSet(ISynchronizePageConfiguration configuration, ActiveChangeSet set) { + // Default is to do nothing + } /** * Return a collector that can be used to group a set of checked-in changes - * into a set of checked-in change sets. + * into a set of checked-in change sets. This method must be + * overridden by subclasses that support checked-in change sets. * @param configuration the configuration for the page that will be displaying the change sets * @return a change set collector */ - public abstract SyncInfoSetChangeSetCollector createCheckedInChangeSetCollector(ISynchronizePageConfiguration configuration); + public SyncInfoSetChangeSetCollector createCheckedInChangeSetCollector(ISynchronizePageConfiguration configuration) { + return null; + } + + /** + * Return an action group for contributing context menu items + * to the synchronize page while change sets are enabled. + * Return <code>null</code> if no custom actions are required. + * Note that only context menus can be contributed since the view menu + * and toolbar menu are fixed. This method can be overridden by subclasses + * who wish to support custom change set actions. + * @return an action group for contributing context menu items + * to the synchronize page while change sets are enabled or <code>null</code> + */ + public SynchronizePageActionGroup getActionGroup() { + return null; + } } |