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
9 * Mathias Kinzler (SAP AG) - initial implementation
10 *******************************************************************************/
11 package org
.eclipse
.egit
.ui
.internal
.clone
;
14 import java
.util
.List
;
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
;
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
;
53 public GitSelectRepositoryPage() {
54 super(GitSelectRepositoryPage
.class.getName());
55 setTitle(UIText
.GitSelectRepositoryPage_PageTitle
);
56 setMessage(UIText
.GitSelectRepositoryPage_PageMessage
);
60 * @return the repository
62 public Repository
getRepository() {
63 Object obj
= ((IStructuredSelection
) tv
.getSelection())
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(
76 GridDataFactory
.fillDefaults().grab(true, true).applyTo(main
);
78 tv
= new TableViewer(main
, SWT
.SINGLE
| SWT
.H_SCROLL
| SWT
.V_SCROLL
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
);
91 .setToolTipText(UIText
.GitSelectRepositoryPage_CloneTooltip
);
93 GridDataFactory
.fillDefaults().grab(false, false).align(SWT
.FILL
,
94 SWT
.BEGINNING
).applyTo(cloneRepo
);
96 cloneRepo
.addSelectionListener(new SelectionAdapter() {
99 public void widgetSelected(SelectionEvent e
) {
100 WizardDialog dlg
= new WizardDialog(getShell(),
101 new GitCloneWizard());
103 if (dlg
.open() == Window
.OK
) {
105 tv
.setInput(RepositoriesView
106 .getRepositoriesFromDirs(null));
108 } catch (InterruptedException e1
) {
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
);
121 .setToolTipText(UIText
.GitSelectRepositoryPage_AddTooltip
);
122 addRepo
.addSelectionListener(new SelectionAdapter() {
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) {
130 Set
<String
> dirs
= dlg
.getDirectories();
131 for (String dir
: dirs
)
132 RepositoriesView
.addDir(new File(dir
));
134 tv
.setInput(RepositoriesView
135 .getRepositoriesFromDirs(null));
137 } catch (InterruptedException e1
) {
145 tv
.addSelectionChangedListener(new ISelectionChangedListener() {
147 public void selectionChanged(SelectionChangedEvent event
) {
153 tv
.setInput(RepositoriesView
.getRepositoriesFromDirs(null));
155 } catch (InterruptedException e
) {
163 private void checkPage() {
164 setErrorMessage(null);
166 if (((List
) tv
.getInput()).isEmpty()) {
167 setErrorMessage(UIText
.GitSelectRepositoryPage_NoRepoFoundMessage
);
171 if (tv
.getSelection().isEmpty()) {
172 setErrorMessage(UIText
.GitSelectRepositoryPage_PleaseSelectMessage
);
176 setPageComplete(getErrorMessage() == null);