Git Import Wizard
[egit.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / clone / GitImportWithDirectoriesPage.java
blob5db5551fd9c3bdfb3af79e54fef7ea71735404ee
1 /*******************************************************************************
2 * Copyright (c) 2010 SAP AG.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
8 * Contributors:
9 * Mathias Kinzler (SAP AG) - initial implementation
10 *******************************************************************************/
11 package org.eclipse.egit.ui.internal.clone;
13 import java.io.File;
14 import java.util.ArrayList;
15 import java.util.List;
17 import org.eclipse.egit.ui.UIText;
18 import org.eclipse.egit.ui.internal.repository.RepositoriesViewContentProvider;
19 import org.eclipse.egit.ui.internal.repository.RepositoriesViewLabelProvider;
20 import org.eclipse.egit.ui.internal.repository.RepositoryTreeNode;
21 import org.eclipse.egit.ui.internal.repository.RepositoryTreeNode.RepositoryTreeNodeType;
22 import org.eclipse.jface.layout.GridDataFactory;
23 import org.eclipse.jface.viewers.ISelectionChangedListener;
24 import org.eclipse.jface.viewers.IStructuredSelection;
25 import org.eclipse.jface.viewers.SelectionChangedEvent;
26 import org.eclipse.jface.viewers.StructuredSelection;
27 import org.eclipse.jface.viewers.TreeViewer;
28 import org.eclipse.jgit.lib.Repository;
29 import org.eclipse.swt.SWT;
30 import org.eclipse.swt.events.SelectionAdapter;
31 import org.eclipse.swt.events.SelectionEvent;
32 import org.eclipse.swt.events.SelectionListener;
33 import org.eclipse.swt.widgets.Composite;
35 /**
36 * Select a wizard and a directory from a Git Working Directory
38 public class GitImportWithDirectoriesPage extends GitSelectWizardPage {
40 private TreeViewer tv;
42 /**
45 public GitImportWithDirectoriesPage() {
46 super();
47 setTitle(UIText.GitImportWithDirectoriesPage_PageTitle);
48 setMessage(UIText.GitImportWithDirectoriesPage_PageMessage);
51 /**
52 * @param repo
54 public void setRepository(Repository repo) {
55 List<RepositoryTreeNode<Repository>> input = new ArrayList<RepositoryTreeNode<Repository>>();
56 if (repo != null)
57 input.add(new RepositoryTreeNode<Repository>(null,
58 RepositoryTreeNodeType.WORKINGDIR, repo, repo));
59 tv.setInput(input);
60 // select the working directory as default
61 tv.setSelection(new StructuredSelection(input.get(0)));
64 public void createControl(Composite parent) {
65 super.createControl(parent);
67 Composite main = (Composite) getControl();
69 tv = new TreeViewer(main, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL
70 | SWT.BORDER);
71 tv.setContentProvider(new RepositoriesViewContentProvider());
72 GridDataFactory.fillDefaults().grab(true, true).applyTo(tv.getTree());
73 new RepositoriesViewLabelProvider(tv);
75 SelectionListener sl = new SelectionAdapter() {
77 @Override
78 public void widgetSelected(SelectionEvent e) {
79 tv.getTree().setEnabled(!newProjectWizard.getSelection());
84 generalWizard.addSelectionListener(sl);
85 importExisting.addSelectionListener(sl);
86 newProjectWizard.addSelectionListener(sl);
88 tv.addSelectionChangedListener(new ISelectionChangedListener() {
90 public void selectionChanged(SelectionChangedEvent event) {
91 checkPage();
93 });
95 checkPage();
96 setControl(main);
99 /**
100 * @return the selected path
102 public String getPath() {
103 IStructuredSelection sel = (IStructuredSelection) tv.getSelection();
104 RepositoryTreeNode node = (RepositoryTreeNode) sel.getFirstElement();
105 if (node != null && node.getType() == RepositoryTreeNodeType.FOLDER)
106 return ((File) node.getObject()).getPath();
107 if (node != null && node.getType() == RepositoryTreeNodeType.WORKINGDIR)
108 return node.getRepository().getWorkDir().getPath();
109 return null;
112 protected void checkPage() {
113 super.checkPage();
114 if (getErrorMessage() != null)
115 return;
117 if (newProjectWizard.getSelection())
118 return;
120 IStructuredSelection sel = (IStructuredSelection) tv.getSelection();
121 try {
122 if (sel.isEmpty()) {
123 setErrorMessage(UIText.GitImportWithDirectoriesPage_SelectFolderMessage);
124 return;
126 RepositoryTreeNode node = (RepositoryTreeNode) sel
127 .getFirstElement();
128 if (node.getType() != RepositoryTreeNodeType.FOLDER
129 && node.getType() != RepositoryTreeNodeType.WORKINGDIR) {
130 setErrorMessage(UIText.GitImportWithDirectoriesPage_SelectFolderMessage);
131 return;
133 } finally {
134 setPageComplete(getErrorMessage() == null);