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/CheckoutAsProjectSelectionPage.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutAsProjectSelectionPage.java244
1 files changed, 244 insertions, 0 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutAsProjectSelectionPage.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutAsProjectSelectionPage.java
new file mode 100644
index 000000000..47d768289
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutAsProjectSelectionPage.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * 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.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.team.core.RepositoryProvider;
+import org.eclipse.team.internal.ccvs.core.*;
+import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
+import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo;
+import org.eclipse.team.internal.ccvs.ui.*;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * This page allows the user to select the target parent container for
+ * the folders being checked out.
+ */
+public class CheckoutAsProjectSelectionPage extends CVSWizardPage {
+
+ public static final String NAME = "CheckoutAsProjectSelectionPage"; //$NON-NLS-1$
+
+ private TreeViewer tree;
+ private Text nameField;
+ private Combo filterList;
+
+ private IResource selection;
+ private ICVSRemoteFolder[] remoteFolders;
+ private String folderName;
+ private int filter;
+
+ /**
+ * Constructor for CheckoutIntoProjectSelectionPage.
+ * @param pageName
+ * @param title
+ * @param titleImage
+ */
+ public CheckoutAsProjectSelectionPage(ImageDescriptor titleImage, ICVSRemoteFolder[] remoteFolders) {
+ super(NAME, CVSUIMessages.CheckoutAsProjectSelectionPage_title, titleImage, CVSUIMessages.CheckoutAsProjectSelectionPage_description); //
+ this.remoteFolders = remoteFolders;
+ }
+
+ /**
+ * @return
+ */
+ private boolean isSingleFolder() {
+ return remoteFolders.length == 1;
+ }
+
+ /*
+ * For the single folder case, return the name of the folder
+ */
+ private String getInputFolderName() {
+ return getPreferredFolderName(remoteFolders[0]);
+ }
+
+ private String getRepository() throws CVSException {
+ return remoteFolders[0].getFolderSyncInfo().getRoot();
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createControl(Composite parent) {
+ Composite composite= createComposite(parent, 2, false);
+ setControl(composite);
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.CHECKOUT_PROJECT_SELECTION_PAGE);
+
+ if (isSingleFolder()) {
+ createLabel(composite, CVSUIMessages.CheckoutAsProjectSelectionPage_name);
+ nameField = createTextField(composite);
+ nameField.addListener(SWT.Modify, new Listener() {
+ public void handleEvent(Event event) {
+ folderName = nameField.getText();
+ updateWidgetEnablements();
+ }
+ });
+ }
+
+ createWrappingLabel(composite, CVSUIMessages.CheckoutAsProjectSelectionPage_treeLabel, 0, 2);
+
+ tree = createResourceSelectionTree(composite, IResource.PROJECT | IResource.FOLDER, 2 /* horizontal span */);
+ tree.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleResourceSelection(event);
+ }
+ });
+
+ Composite filterComposite = createComposite(composite, 2, false);
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.horizontalAlignment = GridData.FILL;
+ data.horizontalSpan = 2;
+ filterComposite.setLayoutData(data);
+ createLabel(filterComposite, CVSUIMessages.CheckoutAsProjectSelectionPage_showLabel);
+ filterList = createCombo(filterComposite);
+ filterList.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleFilterSelection();
+ }
+ });
+
+ createWrappingLabel(composite, "", 0, 2); //$NON-NLS-1$
+
+ initializeValues();
+ updateWidgetEnablements();
+ tree.getControl().setFocus();
+ Dialog.applyDialogFont(parent);
+ }
+
+ /**
+ * Method initializeValues.
+ */
+ private void initializeValues() {
+ if (isSingleFolder()) {
+ nameField.setText(getInputFolderName());
+ }
+ tree.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ filter = 0;
+ updateTreeContents(filter);
+ filterList.add(CVSUIMessages.CheckoutAsProjectSelectionPage_showAll);
+ filterList.add(CVSUIMessages.CheckoutAsProjectSelectionPage_showUnshared);
+ filterList.add(CVSUIMessages.CheckoutAsProjectSelectionPage_showSameRepo);
+ filterList.select(filter);
+ }
+
+ private void handleResourceSelection(SelectionChangedEvent event) {
+ ISelection sel = event.getSelection();
+ if (sel.isEmpty()) {
+ this.selection = null;
+ } else if (sel instanceof IStructuredSelection) {
+ this.selection = (IResource)((IStructuredSelection)sel).getFirstElement();
+ }
+ updateWidgetEnablements();
+ }
+
+ /**
+ * Method updateWidgetEnablement.
+ */
+ private void updateWidgetEnablements() {
+ if (isSingleFolder() && !Path.EMPTY.isValidSegment(folderName)) {
+ setPageComplete(false);
+ setErrorMessage(NLS.bind(CVSUIMessages.CheckoutAsProjectSelectionPage_invalidFolderName, new String[] { folderName }));
+ return;
+ }
+ boolean complete = selection != null && selection.getType() != IResource.FILE;
+ setErrorMessage(null);
+ setPageComplete(complete);
+ }
+
+ /**
+ * Returns the selection.
+ * @return IResource
+ */
+ public IResource getSelection() {
+ return selection;
+ }
+
+ private void updateTreeContents(int selected) {
+ try {
+ if (selected == 0) {
+ tree.setInput(new AdaptableResourceList(getProjects(getRepository(), true)));
+ } else if (selected == 1) {
+ tree.setInput(new AdaptableResourceList(getProjects(null, true)));
+ } else if (selected == 2) {
+ tree.setInput(new AdaptableResourceList(getProjects(getRepository(), false)));
+ }
+ } catch (CVSException e) {
+ CVSUIPlugin.log(e);
+ }
+ }
+
+ /**
+ * Method getValidTargetProjects returns the set of projects that match the provided criteria.
+ * @return IResource
+ */
+ private IProject[] getProjects(String root, boolean unshared) throws CVSException {
+ List validTargets = new ArrayList();
+ try {
+ IResource[] projects = ResourcesPlugin.getWorkspace().getRoot().members();
+ for (int i = 0; i < projects.length; i++) {
+ IResource resource = projects[i];
+ if (resource instanceof IProject) {
+ IProject project = (IProject) resource;
+ if (project.isAccessible()) {
+ RepositoryProvider provider = RepositoryProvider.getProvider(project);
+ if (provider == null && unshared) {
+ validTargets.add(project);
+ } else if (provider != null && provider.getID().equals(CVSProviderPlugin.getTypeId())) {
+ ICVSFolder cvsFolder = CVSWorkspaceRoot.getCVSFolderFor(project);
+ FolderSyncInfo info = cvsFolder.getFolderSyncInfo();
+ if (root != null && info != null && root.equals(info.getRoot())) {
+ validTargets.add(project);
+ }
+ }
+ }
+ }
+ }
+ } catch (CoreException e) {
+ throw CVSException.wrapException(e);
+ }
+ return (IProject[]) validTargets.toArray(new IProject[validTargets.size()]);
+ }
+
+ public IContainer getLocalFolder() {
+ if (Path.EMPTY.isValidSegment(folderName)) {
+ return ((IContainer)getSelection()).getFolder(new Path(null, folderName));
+ } else {
+ return null;
+ }
+ }
+
+ public IContainer getParentFolder() {
+ return ((IContainer)getSelection());
+ }
+
+ private void handleFilterSelection() {
+ filter = filterList.getSelectionIndex();
+ updateTreeContents(filter);
+ }
+
+}

Back to the top