| /******************************************************************************* |
| * Copyright (c) 2000, 2003 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.repo; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.dialogs.ProgressMonitorDialog; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.jface.wizard.Wizard; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.team.core.TeamException; |
| import org.eclipse.team.internal.ccvs.core.CVSException; |
| import org.eclipse.team.internal.ccvs.core.CVSTag; |
| import org.eclipse.team.internal.ccvs.core.ICVSFolder; |
| import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource; |
| import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; |
| import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; |
| import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; |
| import org.eclipse.team.internal.ccvs.ui.Policy; |
| |
| /** |
| * Wizard for refreshing the tags for a CVS repository location |
| */ |
| public class RefreshRemoteProjectWizard extends Wizard { |
| |
| private Dialog parentDialog; |
| private ICVSRepositoryLocation root; |
| private ICVSRemoteResource[] rootFolders; |
| private RefreshRemoteProjectSelectionPage projectSelectionPage; |
| private IDialogSettings settings; |
| |
| public static boolean execute(Shell shell, final ICVSRepositoryLocation root) { |
| final ICVSRemoteResource[][] rootFolders = new ICVSRemoteResource[1][0]; |
| rootFolders[0] = null; |
| try { |
| new ProgressMonitorDialog(shell).run(true, true, new IRunnableWithProgress() { |
| public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { |
| try { |
| rootFolders[0] = CVSUIPlugin.getPlugin().getRepositoryManager().getFoldersForTag(root, CVSTag.DEFAULT, monitor); |
| } catch (CVSException e) { |
| throw new InvocationTargetException(e); |
| } |
| } |
| }); |
| } catch (InvocationTargetException e) { |
| CVSUIPlugin.openError(shell, null, null, e); |
| return false; |
| } catch (InterruptedException e) { |
| return false; |
| } |
| RefreshRemoteProjectWizard wizard = new RefreshRemoteProjectWizard(root, rootFolders[0]); |
| WizardDialog dialog = new WizardDialog(shell, wizard); |
| wizard.setParentDialog(dialog); |
| return (dialog.open() == Window.OK); |
| } |
| |
| public RefreshRemoteProjectWizard(ICVSRepositoryLocation root, ICVSRemoteResource[] rootFolders) { |
| this.root = root; |
| this.rootFolders = rootFolders; |
| IDialogSettings workbenchSettings = CVSUIPlugin.getPlugin().getDialogSettings(); |
| this.settings = workbenchSettings.getSection("RefreshRemoteProjectWizard");//$NON-NLS-1$ |
| if (settings == null) { |
| this.settings = workbenchSettings.addNewSection("RefreshRemoteProjectWizard");//$NON-NLS-1$ |
| } |
| setWindowTitle(Policy.bind("RefreshRemoteProjectWizard.title")); //$NON-NLS-1$ |
| } |
| |
| /** |
| * @see org.eclipse.jface.wizard.IWizard#addPages() |
| */ |
| public void addPages() { |
| setNeedsProgressMonitor(true); |
| ImageDescriptor substImage = CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_WIZBAN_NEW_LOCATION); |
| projectSelectionPage = new RefreshRemoteProjectSelectionPage( |
| "ProjectSelectionPage", //$NON-NLS-1$ |
| Policy.bind("RefreshRemoteProjectSelectionPage.pageTitle"), //$NON-NLS-1$ |
| substImage, |
| Policy.bind("RefreshRemoteProjectSelectionPage.pageDescription"), //$NON-NLS-1$ |
| parentDialog, settings, root, rootFolders); |
| addPage(projectSelectionPage); |
| } |
| |
| /** |
| * @see org.eclipse.jface.wizard.Wizard#performFinish() |
| */ |
| public boolean performFinish() { |
| final ICVSRemoteResource[] selectedFolders = projectSelectionPage.getSelectedRemoteProject(); |
| try { |
| getContainer().run(true, true, new IRunnableWithProgress() { |
| public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { |
| monitor.beginTask(null, 100 * selectedFolders.length); |
| try { |
| RepositoryManager manager = CVSUIPlugin.getPlugin().getRepositoryManager(); |
| for (int i = 0; i < selectedFolders.length; i++) { |
| ICVSRemoteResource resource = selectedFolders[i]; |
| if (resource instanceof ICVSFolder) { |
| manager.refreshDefinedTags((ICVSFolder)resource, true /* replace */, true, Policy.subMonitorFor(monitor, 100)); |
| } |
| } |
| } catch (TeamException e) { |
| throw new InvocationTargetException(e); |
| } finally { |
| monitor.done(); |
| } |
| } |
| }); |
| return true; |
| } catch (InvocationTargetException e) { |
| CVSUIPlugin.openError(getShell(), null, null ,e); |
| } catch (InterruptedException e) { |
| } |
| return false; |
| } |
| |
| /** |
| * Sets the parentDialog. |
| * @param parentDialog The parentDialog to set |
| */ |
| public void setParentDialog(Dialog parentDialog) { |
| this.parentDialog = parentDialog; |
| } |
| } |