1 /*******************************************************************************
2 * Copyright (c) 2012 SAP AG.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License 2.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-2.0/
8 * SPDX-License-Identifier: EPL-2.0
11 * Stefan Lay (SAP AG) - initial implementation
12 *******************************************************************************/
13 package org
.eclipse
.egit
.ui
.internal
.clone
;
15 import java
.util
.HashMap
;
16 import java
.util
.List
;
19 import org
.eclipse
.core
.runtime
.CoreException
;
20 import org
.eclipse
.egit
.ui
.Activator
;
21 import org
.eclipse
.egit
.ui
.internal
.UIText
;
22 import org
.eclipse
.egit
.ui
.internal
.clone
.GitCloneSourceProviderExtension
.CloneSourceProvider
;
23 import org
.eclipse
.egit
.ui
.internal
.provisional
.wizards
.RepositoryServerInfo
;
24 import org
.eclipse
.jface
.layout
.GridDataFactory
;
25 import org
.eclipse
.jface
.layout
.GridLayoutFactory
;
26 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
27 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
28 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
29 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
30 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
31 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
32 import org
.eclipse
.jface
.viewers
.TreeViewer
;
33 import org
.eclipse
.jface
.wizard
.IWizardPage
;
34 import org
.eclipse
.jface
.wizard
.WizardPage
;
35 import org
.eclipse
.swt
.SWT
;
36 import org
.eclipse
.swt
.widgets
.Composite
;
37 import org
.eclipse
.ui
.dialogs
.FilteredTree
;
38 import org
.eclipse
.ui
.dialogs
.PatternFilter
;
41 * Displays the possible locations of git repositories
43 public class RepositoryLocationPage
extends WizardPage
{
45 private final List
<CloneSourceProvider
> repositoryImports
;
47 // local cache for contributed WizardPages
48 private Map
<CloneSourceProvider
, WizardPage
> resolvedWizardPages
;
50 private TreeViewer tv
;
53 * @param cloneSourceProvider all contributed CloneSourceProviders
55 public RepositoryLocationPage(List
<CloneSourceProvider
> cloneSourceProvider
) {
56 super(RepositoryLocationPage
.class.getName());
57 this.repositoryImports
= cloneSourceProvider
;
58 resolvedWizardPages
= new HashMap
<>();
59 setTitle(UIText
.RepositoryLocationPage_title
);
60 setMessage(UIText
.RepositoryLocationPage_info
);
64 public void createControl(Composite parent
) {
65 Composite main
= new Composite(parent
, SWT
.NONE
);
67 GridLayoutFactory
.fillDefaults().numColumns(2).margins(0, 0)
70 GridDataFactory
.fillDefaults().grab(true, true).applyTo(main
);
71 // use a filtered tree
72 FilteredTree tree
= new FilteredTree(main
, SWT
.SINGLE
| SWT
.BORDER
73 | SWT
.H_SCROLL
| SWT
.V_SCROLL
, new PatternFilter(), true);
75 tv
= tree
.getViewer();
76 GridDataFactory
.fillDefaults().grab(true, true).applyTo(tree
);
77 tv
.setContentProvider(new RepositoryLocationContentProvider());
79 tv
.setLabelProvider(new RepositoryLocationLabelProvider());
81 tv
.addSelectionChangedListener(new ISelectionChangedListener() {
84 public void selectionChanged(SelectionChangedEvent event
) {
89 tv
.addDoubleClickListener(new IDoubleClickListener() {
92 public void doubleClick(DoubleClickEvent event
) {
95 getContainer().showPage(getNextPage());
99 tv
.setInput(repositoryImports
);
103 private void checkPage() {
104 setErrorMessage(null);
105 boolean complete
= false;
106 IStructuredSelection selection
= (IStructuredSelection
) tv
108 if (selection
.size() == 1) {
109 Object element
= selection
.getFirstElement();
110 if (element
instanceof CloneSourceProvider
) {
111 CloneSourceProvider repositoryImport
= (CloneSourceProvider
) element
;
112 if (repositoryImport
.equals(CloneSourceProvider
.LOCAL
)
113 || repositoryImport
.hasFixLocation())
115 } else if (element
instanceof RepositoryServerInfo
) {
120 setPageComplete(complete
);
124 public IWizardPage
getNextPage() {
125 IStructuredSelection selection
= (IStructuredSelection
) tv
128 if (selection
.size() == 1) {
129 Object element
= selection
.getFirstElement();
130 if (element
instanceof CloneSourceProvider
) {
131 return getNextPage((CloneSourceProvider
) element
);
132 } else if (element
instanceof RepositoryServerInfo
) {
133 Object parent
= ((ITreeContentProvider
) tv
.getContentProvider())
135 if (parent
instanceof CloneSourceProvider
)
136 return getNextPage((CloneSourceProvider
) parent
);
144 private IWizardPage
getNextPage(CloneSourceProvider repositoryImport
) {
145 if (repositoryImport
.equals(CloneSourceProvider
.LOCAL
))
146 return getWizard().getNextPage(this);
148 return getWizardPage(repositoryImport
);
151 private WizardPage
getWizardPage(CloneSourceProvider repositoryImport
) {
153 nextPage
= resolvedWizardPages
.get(repositoryImport
);
154 if (nextPage
== null) {
156 nextPage
= repositoryImport
.getRepositorySearchPage();
157 } catch (CoreException e
) {
158 Activator
.error(e
.getLocalizedMessage(), e
);
160 if (nextPage
!= null) {
161 nextPage
.setWizard(getWizard());
162 resolvedWizardPages
.put(repositoryImport
, nextPage
);