Git Import Wizard
[egit.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / clone / GitSelectRepositoryPage.java
blob305fc27fb08e0c3a4e0835fddfbcd5454b92771f
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.List;
15 import java.util.Set;
17 import org.eclipse.egit.ui.UIText;
18 import org.eclipse.egit.ui.internal.repository.RepositoriesView;
19 import org.eclipse.egit.ui.internal.repository.RepositoriesViewContentProvider;
20 import org.eclipse.egit.ui.internal.repository.RepositoriesViewLabelProvider;
21 import org.eclipse.egit.ui.internal.repository.RepositorySearchDialog;
22 import org.eclipse.egit.ui.internal.repository.RepositoryTreeNode;
23 import org.eclipse.jface.layout.GridDataFactory;
24 import org.eclipse.jface.layout.GridLayoutFactory;
25 import org.eclipse.jface.viewers.ISelectionChangedListener;
26 import org.eclipse.jface.viewers.IStructuredSelection;
27 import org.eclipse.jface.viewers.SelectionChangedEvent;
28 import org.eclipse.jface.viewers.TableViewer;
29 import org.eclipse.jface.window.Window;
30 import org.eclipse.jface.wizard.WizardDialog;
31 import org.eclipse.jface.wizard.WizardPage;
32 import org.eclipse.jgit.lib.Repository;
33 import org.eclipse.swt.SWT;
34 import org.eclipse.swt.events.SelectionAdapter;
35 import org.eclipse.swt.events.SelectionEvent;
36 import org.eclipse.swt.widgets.Button;
37 import org.eclipse.swt.widgets.Composite;
39 /**
40 * Select a repository, add or clone
42 public class GitSelectRepositoryPage extends WizardPage {
44 private TableViewer tv;
46 private Button addRepo;
48 private Button cloneRepo;
50 /**
53 public GitSelectRepositoryPage() {
54 super(GitSelectRepositoryPage.class.getName());
55 setTitle(UIText.GitSelectRepositoryPage_PageTitle);
56 setMessage(UIText.GitSelectRepositoryPage_PageMessage);
59 /**
60 * @return the repository
62 public Repository getRepository() {
63 Object obj = ((IStructuredSelection) tv.getSelection())
64 .getFirstElement();
65 if (obj == null)
66 return null;
67 return ((RepositoryTreeNode) obj).getRepository();
70 public void createControl(Composite parent) {
71 Composite main = new Composite(parent, SWT.NONE);
73 GridLayoutFactory.fillDefaults().numColumns(2).margins(0, 0).applyTo(
74 main);
76 GridDataFactory.fillDefaults().grab(true, true).applyTo(main);
78 tv = new TableViewer(main, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL
79 | SWT.BORDER);
80 tv.setContentProvider(new RepositoriesViewContentProvider());
81 GridDataFactory.fillDefaults().grab(true, true).applyTo(tv.getTable());
82 new RepositoriesViewLabelProvider(tv);
84 Composite tb = new Composite(main, SWT.NONE);
85 GridLayoutFactory.fillDefaults().numColumns(1).applyTo(tb);
86 GridDataFactory.fillDefaults().grab(false, true).applyTo(tb);
88 cloneRepo = new Button(tb, SWT.PUSH);
89 cloneRepo.setText(UIText.GitSelectRepositoryPage_CloneButton);
90 cloneRepo
91 .setToolTipText(UIText.GitSelectRepositoryPage_CloneTooltip);
93 GridDataFactory.fillDefaults().grab(false, false).align(SWT.FILL,
94 SWT.BEGINNING).applyTo(cloneRepo);
96 cloneRepo.addSelectionListener(new SelectionAdapter() {
98 @Override
99 public void widgetSelected(SelectionEvent e) {
100 WizardDialog dlg = new WizardDialog(getShell(),
101 new GitCloneWizard());
103 if (dlg.open() == Window.OK) {
104 try {
105 tv.setInput(RepositoriesView
106 .getRepositoriesFromDirs(null));
107 checkPage();
108 } catch (InterruptedException e1) {
109 // ignore
116 addRepo = new Button(tb, SWT.PUSH);
117 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL,
118 SWT.BEGINNING).applyTo(addRepo);
119 addRepo.setText(UIText.GitSelectRepositoryPage_AddButton);
120 addRepo
121 .setToolTipText(UIText.GitSelectRepositoryPage_AddTooltip);
122 addRepo.addSelectionListener(new SelectionAdapter() {
124 @Override
125 public void widgetSelected(SelectionEvent e) {
126 RepositorySearchDialog dlg = new RepositorySearchDialog(
127 getShell(), RepositoriesView.getDirs());
128 if (dlg.open() == Window.OK && dlg.getDirectories().size() > 0) {
129 try {
130 Set<String> dirs = dlg.getDirectories();
131 for (String dir : dirs)
132 RepositoriesView.addDir(new File(dir));
134 tv.setInput(RepositoriesView
135 .getRepositoriesFromDirs(null));
136 checkPage();
137 } catch (InterruptedException e1) {
138 // ignore
145 tv.addSelectionChangedListener(new ISelectionChangedListener() {
147 public void selectionChanged(SelectionChangedEvent event) {
148 checkPage();
152 try {
153 tv.setInput(RepositoriesView.getRepositoriesFromDirs(null));
154 checkPage();
155 } catch (InterruptedException e) {
156 // ignore
159 setControl(main);
163 private void checkPage() {
164 setErrorMessage(null);
165 try {
166 if (((List) tv.getInput()).isEmpty()) {
167 setErrorMessage(UIText.GitSelectRepositoryPage_NoRepoFoundMessage);
168 return;
171 if (tv.getSelection().isEmpty()) {
172 setErrorMessage(UIText.GitSelectRepositoryPage_PleaseSelectMessage);
173 return;
175 } finally {
176 setPageComplete(getErrorMessage() == null);