Git Repositories View: Refactoring first part
[egit.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / clone / GitImportWithDirectoriesPage.java
blobea5729d3bbb08af1b0e5b5aedc09783444f4e92d
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.tree.RepositoryTreeNode;
21 import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType;
22 import org.eclipse.egit.ui.internal.repository.tree.WorkingDirNode;
23 import org.eclipse.jface.layout.GridDataFactory;
24 import org.eclipse.jface.viewers.ISelectionChangedListener;
25 import org.eclipse.jface.viewers.IStructuredSelection;
26 import org.eclipse.jface.viewers.SelectionChangedEvent;
27 import org.eclipse.jface.viewers.StructuredSelection;
28 import org.eclipse.jface.viewers.TreeViewer;
29 import org.eclipse.jgit.lib.Repository;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.events.SelectionAdapter;
32 import org.eclipse.swt.events.SelectionEvent;
33 import org.eclipse.swt.events.SelectionListener;
34 import org.eclipse.swt.widgets.Composite;
36 /**
37 * Select a wizard and a directory from a Git Working Directory
39 public class GitImportWithDirectoriesPage extends GitSelectWizardPage {
41 private TreeViewer tv;
43 /**
46 public GitImportWithDirectoriesPage() {
47 super();
48 setTitle(UIText.GitImportWithDirectoriesPage_PageTitle);
49 setMessage(UIText.GitImportWithDirectoriesPage_PageMessage);
52 /**
53 * @param repo
55 public void setRepository(Repository repo) {
56 List<WorkingDirNode> input = new ArrayList<WorkingDirNode>();
57 if (repo != null)
58 input.add(new WorkingDirNode(null, 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);