Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java308
1 files changed, 308 insertions, 0 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java
new file mode 100644
index 000000000..a129c8305
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java
@@ -0,0 +1,308 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 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
+ * Philippe Ombredanne - bug 84808
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.wizards;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.team.core.TeamException;
+import org.eclipse.team.internal.ccvs.core.*;
+import org.eclipse.team.internal.ccvs.core.util.KnownRepositories;
+import org.eclipse.team.internal.ccvs.ui.*;
+import org.eclipse.team.internal.ccvs.ui.operations.CheckoutMultipleProjectsOperation;
+import org.eclipse.team.internal.ccvs.ui.operations.ProjectMetaFileOperation;
+import org.eclipse.ui.*;
+
+/**
+ * Gathers all information necessary for a checkout from a repository.
+ */
+public class CheckoutWizard extends Wizard implements ICVSWizard, INewWizard {
+
+ private RepositorySelectionPage locationPage;
+ private ConfigurationWizardMainPage createLocationPage;
+ private ModuleSelectionPage modulePage;
+ private CheckoutAsWizard wizard;
+ private ICVSRepositoryLocation location;
+ private boolean isNewLocation;
+ private CVSWizardPage dummyPage;
+
+ public CheckoutWizard() {
+ setWindowTitle(CVSUIMessages.CheckoutWizard_0);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#addPages()
+ */
+ public void addPages() {
+ setNeedsProgressMonitor(true);
+
+ ImageDescriptor substImage = getBannerImageDescriptor();
+
+ ICVSRepositoryLocation[] locations = CVSUIPlugin.getPlugin().getRepositoryManager().getKnownRepositoryLocations();
+ if (locations.length > 0) {
+ locationPage = new RepositorySelectionPage("locationSelection", CVSUIMessages.CheckoutWizard_7, substImage); //$NON-NLS-1$
+ locationPage.setDescription(CVSUIMessages.SharingWizard_importTitleDescription);
+ locationPage.setExtendedDescription(CVSUIMessages.CheckoutWizard_8);
+ addPage(locationPage);
+ }
+
+ createLocationPage = new ConfigurationWizardMainPage("createLocationPage", CVSUIMessages.SharingWizard_enterInformation, substImage); //$NON-NLS-1$
+ createLocationPage.setDescription(CVSUIMessages.SharingWizard_enterInformationDescription);
+ addPage(createLocationPage);
+ createLocationPage.setDialogSettings(NewLocationWizard.getLocationDialogSettings());
+
+ modulePage = new ModuleSelectionPage("moduleSelection", CVSUIMessages.CheckoutWizard_10, substImage); //$NON-NLS-1$
+ modulePage.setDescription(CVSUIMessages.CheckoutWizard_11);
+ modulePage.setHelpContxtId(IHelpContextIds.CHECKOUT_MODULE_SELECTION_PAGE);
+ modulePage.setSupportsMultiSelection(true);
+ addPage(modulePage);
+
+ // Dummy page to allow lazy creation of CheckoutAsWizard
+ dummyPage = new CVSWizardPage("dummyPage") { //$NON-NLS-1$
+ public void createControl(Composite parent) {
+ Composite composite = createComposite(parent, 1, false);
+ setControl(composite);
+ }
+ };
+ addPage(dummyPage);
+ }
+
+ protected ImageDescriptor getBannerImageDescriptor() {
+ return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_WIZBAN_CHECKOUT);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#canFinish()
+ */
+ public boolean canFinish() {
+ return (wizard == null && getSelectedModules().length > 0) ||
+ (wizard != null && wizard.canFinish());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.IWizard#performFinish()
+ */
+ public boolean performFinish() {
+ if (wizard != null) {
+ // The finish of the child wizard will get called directly.
+ // We only get here if it completed successfully
+ if (isNewLocation) {
+ KnownRepositories.getInstance().addRepository(location, true /* broadcast */);
+ }
+ return true;
+ } else {
+ try {
+ new CheckoutMultipleProjectsOperation(getPart(), getSelectedModules(), null)
+ .run();
+ if (isNewLocation) {
+ KnownRepositories.getInstance().addRepository(location, true /* broadcast */);
+ }
+ return true;
+ } catch (InvocationTargetException e) {
+ CVSUIPlugin.openError(getShell(), null, null, e);
+ } catch (InterruptedException e) {
+ // Canceled. fall through.
+ }
+ return false;
+ }
+ }
+
+ private IWorkbenchPart getPart() {
+ // This wizard doesn't have a part
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#performCancel()
+ */
+ public boolean performCancel() {
+ if (location != null && isNewLocation) {
+ KnownRepositories.getInstance().disposeRepository(location);
+ location = null;
+ }
+ return wizard == null || wizard.performCancel();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.IWizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)
+ */
+ public IWizardPage getNextPage(IWizardPage page) {
+ // Assume the page is about to be shown when this method is
+ // invoked
+ return getNextPage(page, true /* about to show*/);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ccvs.ui.wizards.ICVSWizard#getNextPage(org.eclipse.jface.wizard.IWizardPage, boolean)
+ */
+ public IWizardPage getNextPage(IWizardPage page, boolean aboutToShow) {
+ if (page == locationPage) {
+ if (locationPage.getLocation() == null) {
+ return createLocationPage;
+ } else {
+ if (aboutToShow) {
+ try {
+ modulePage.setLocation(getLocation());
+ } catch (TeamException e1) {
+ CVSUIPlugin.log(e1);
+ }
+ }
+ return modulePage;
+ }
+ }
+ if (page == createLocationPage) {
+ if (aboutToShow) {
+ try {
+ ICVSRepositoryLocation l = getLocation();
+ if (l != null) {
+ modulePage.setLocation(l);
+ }
+ } catch (TeamException e1) {
+ CVSUIPlugin.log(e1);
+ }
+ }
+ return modulePage;
+ }
+ if (page == modulePage) {
+ ICVSRemoteFolder[] selectedModules = getSelectedModules();
+ if (selectedModules.length == 0) return null;
+ for (int i = 0; i < selectedModules.length; i++) {
+ ICVSRemoteFolder folder = selectedModules[i];
+ if (folder.isDefinedModule()) {
+ // No further configuration is possible for defined modules
+ return null;
+ }
+ }
+ if (aboutToShow) {
+ try {
+ boolean hasMetafile = true;
+ if (selectedModules.length == 1) {
+ // Only allow configuration if one module is selected
+ final ICVSRemoteFolder[] folders = new ICVSRemoteFolder[] {selectedModules[0]};
+ final boolean withName = CVSUIPlugin.getPlugin().isUseProjectNameOnCheckout();
+
+ // attempt to retrieve the project description depending on preferences
+ // this is a bit convoluted to batch the meta-file check and retrieval in one operation
+ final ICVSRemoteFolder[] folderResult = new ICVSRemoteFolder [1];
+ final boolean[] booleanResult = new boolean[] { true };
+
+ getContainer().run(true, true, new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ ProjectMetaFileOperation op = new ProjectMetaFileOperation(getPart(), new ICVSRemoteFolder[] {folders[0]}, withName);
+ op.run(monitor);
+ folderResult[0] = op.getUpdatedFolders()[0];
+ booleanResult[0] = op.metaFileExists();
+ }
+ });
+ hasMetafile = booleanResult[0];
+ if (withName && hasMetafile)
+ selectedModules[0] = folderResult[0];
+ }
+ resetSubwizard();
+ wizard = new CheckoutAsWizard(getPart(), selectedModules, ! hasMetafile /* allow configuration */);
+ wizard.addPages();
+ return wizard.getStartingPage();
+ } catch (InvocationTargetException e) {
+ // Show the error and fall through to return null as the next page
+ CVSUIPlugin.openError(getShell(), null, null, e);
+ } catch (InterruptedException e) {
+ // Canceled by user. Fall through and return null
+ }
+ return null;
+ } else {
+ if (wizard == null) {
+ return dummyPage;
+ } else {
+ return wizard.getStartingPage();
+ }
+ }
+ }
+ if (wizard != null) {
+ return wizard.getNextPage(page);
+ }
+ return null;
+ }
+
+ private ICVSRemoteFolder[] getSelectedModules() {
+ if (modulePage == null) return null;
+ return modulePage.getSelectedModules();
+ }
+
+ /**
+ * Return an ICVSRepositoryLocation
+ */
+ private ICVSRepositoryLocation getLocation() throws TeamException {
+ // If the location page has a location, use it.
+ if (locationPage != null) {
+ ICVSRepositoryLocation newLocation = locationPage.getLocation();
+ if (newLocation != null) {
+ return recordLocation(newLocation);
+ }
+ }
+
+ // Otherwise, get the location from the create location page
+ final ICVSRepositoryLocation[] locations = new ICVSRepositoryLocation[] { null };
+ final CVSException[] exception = new CVSException[] { null };
+ getShell().getDisplay().syncExec(new Runnable() {
+ public void run() {
+ try {
+ locations[0] = createLocationPage.getLocation();
+ } catch (CVSException e) {
+ exception[0] = e;
+ }
+ }
+ });
+ if (exception[0] != null) {
+ throw exception[0];
+ }
+ return recordLocation(locations[0]);
+ }
+
+ private ICVSRepositoryLocation recordLocation(ICVSRepositoryLocation newLocation) {
+ if (newLocation == null) return location;
+ if (location == null || !newLocation.equals(location)) {
+ if (location != null && isNewLocation) {
+ // Dispose of the previous location
+ KnownRepositories.getInstance().disposeRepository(location);
+ }
+ location = newLocation;
+ isNewLocation = !KnownRepositories.getInstance().isKnownRepository(newLocation.getLocation(false));
+ if (isNewLocation) {
+ // Add the location silently so we can work with it
+ location = KnownRepositories.getInstance().addRepository(location, false /* silently */);
+ }
+ }
+ return location;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ }
+
+ /*
+ * Reset the sub-wizard
+ */
+ /* package */ void resetSubwizard() {
+ if (wizard != null) {
+ wizard.dispose();
+ wizard = null;
+ }
+ }
+}

Back to the top