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
.repository
;
13 import java
.net
.URISyntaxException
;
14 import java
.util
.ArrayList
;
15 import java
.util
.List
;
17 import org
.eclipse
.egit
.ui
.UIText
;
18 import org
.eclipse
.jface
.dialogs
.Dialog
;
19 import org
.eclipse
.jface
.layout
.GridDataFactory
;
20 import org
.eclipse
.jface
.viewers
.BaseLabelProvider
;
21 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
22 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
23 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
24 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
25 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
26 import org
.eclipse
.jface
.viewers
.TableViewer
;
27 import org
.eclipse
.jface
.viewers
.Viewer
;
28 import org
.eclipse
.jface
.window
.Window
;
29 import org
.eclipse
.jface
.wizard
.WizardDialog
;
30 import org
.eclipse
.jface
.wizard
.WizardPage
;
31 import org
.eclipse
.jgit
.transport
.RemoteConfig
;
32 import org
.eclipse
.jgit
.transport
.URIish
;
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
.graphics
.Image
;
37 import org
.eclipse
.swt
.layout
.GridLayout
;
38 import org
.eclipse
.swt
.widgets
.Button
;
39 import org
.eclipse
.swt
.widgets
.Composite
;
40 import org
.eclipse
.swt
.widgets
.Label
;
41 import org
.eclipse
.swt
.widgets
.Text
;
42 import org
.eclipse
.swt
.widgets
.ToolBar
;
43 import org
.eclipse
.swt
.widgets
.ToolItem
;
48 public class ConfigureUriPage
extends WizardPage
{
50 private final boolean myFetchMode
;
58 private final List
<URIish
> myUris
= new ArrayList
<URIish
>();
60 private final RemoteConfig myConfig
;
65 public ConfigureUriPage(boolean fetchMode
) {
66 this(fetchMode
, null);
74 public ConfigureUriPage(boolean fetchMode
, RemoteConfig remoteConfig
) {
76 super(ConfigureUriPage
.class.getName());
78 myFetchMode
= fetchMode
;
79 myConfig
= remoteConfig
;
80 // myRepository = repository;
83 setTitle(UIText
.ConfigureUriPage_ConfigureFetch_pagetitle
);
85 setTitle(UIText
.ConfigureUriPage_ConfigurePush_pagetitle
);
88 public void createControl(Composite parent
) {
90 Composite main
= new Composite(parent
, SWT
.NONE
);
91 GridDataFactory
.fillDefaults().grab(true, true).applyTo(main
);
94 main
.setLayout(new GridLayout(3, false));
95 // we only use the first URI
96 Label uriLabel
= new Label(main
, SWT
.NONE
);
97 uriLabel
.setText(UIText
.ConfigureUriPage_FetchUri_label
);
98 uriText
= new Text(main
, SWT
.BORDER
);
99 // manual entry is dangerous, as the validate may wait forever
100 uriText
.setEnabled(false);
102 Button change
= new Button(main
, SWT
.PUSH
);
103 change
.setText(UIText
.ConfigureUriPage_Change_button
);
104 change
.addSelectionListener(new SelectionAdapter() {
107 public void widgetSelected(SelectionEvent e
) {
108 SelectUriWiazrd slwz
= new SelectUriWiazrd(false, uriText
110 WizardDialog dlg
= new WizardDialog(getShell(), slwz
);
111 if (dlg
.open() == Window
.OK
) {
112 URIish uri
= slwz
.getUri();
113 uriText
.setText(uri
.toPrivateString());
120 if (myConfig
!= null && !myConfig
.getURIs().isEmpty()) {
122 uriText
.setText(myConfig
.getURIs().get(0).toPrivateString());
125 setPageComplete(false);
128 GridDataFactory
.fillDefaults().grab(true, false).applyTo(uriText
);
131 main
.setLayout(new GridLayout(1, false));
132 tv
= new TableViewer(main
);
134 GridDataFactory
.fillDefaults().grab(true, true).applyTo(
137 tv
.setLabelProvider(new LabelProvider());
138 tv
.setContentProvider(new ContentProvider());
140 ToolBar tb
= new ToolBar(main
, SWT
.HORIZONTAL
);
141 ToolItem add
= new ToolItem(tb
, SWT
.PUSH
);
142 add
.setText(UIText
.ConfigureUriPage_Add_button
);
144 add
.addSelectionListener(new SelectionAdapter() {
147 public void widgetSelected(SelectionEvent e
) {
148 SelectUriWiazrd slwz
= new SelectUriWiazrd(false);
149 WizardDialog dlg
= new WizardDialog(getShell(), slwz
);
150 if (dlg
.open() == Window
.OK
) {
151 URIish uri
= slwz
.getUri();
152 if (!myUris
.contains(uri
))
161 final ToolItem remove
= new ToolItem(tb
, SWT
.PUSH
);
162 remove
.setText(UIText
.ConfigureUriPage_Remove_button
);
163 remove
.setEnabled(false);
165 remove
.addSelectionListener(new SelectionAdapter() {
168 public void widgetSelected(SelectionEvent e
) {
169 for (Object o
: ((IStructuredSelection
) tv
.getSelection())
178 tv
.addSelectionChangedListener(new ISelectionChangedListener() {
180 public void selectionChanged(SelectionChangedEvent event
) {
181 remove
.setEnabled(!tv
.getSelection().isEmpty());
186 if (myConfig
!= null && !myConfig
.getPushURIs().isEmpty()) {
188 for (URIish uri
: myConfig
.getPushURIs())
193 setPageComplete(false);
197 Dialog
.applyDialogFont(main
);
202 private void checkPage() {
204 setErrorMessage(null);
207 if (uriText
.getText().equals("")) { //$NON-NLS-1$
208 setErrorMessage(UIText
.ConfigureUriPage_MissingUri_message
);
212 myUri
= new URIish(uriText
.getText());
213 } catch (URISyntaxException e
) {
214 setErrorMessage(UIText
.ConfigureUriPage_ParsingProblem_message
);
219 if (myUris
.isEmpty()) {
220 setErrorMessage(UIText
.ConfigureUriPage_MissingUris_message
);
226 setPageComplete(getErrorMessage() == null);
230 private static final class ContentProvider
implements
231 IStructuredContentProvider
{
233 public Object
[] getElements(Object inputElement
) {
234 return ((List
) inputElement
).toArray();
237 public void dispose() {
241 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
247 private static final class LabelProvider
extends BaseLabelProvider
248 implements ITableLabelProvider
{
250 public Image
getColumnImage(Object element
, int columnIndex
) {
254 public String
getColumnText(Object element
, int columnIndex
) {
255 return ((URIish
) element
).toPrivateString();
263 public URIish
getUri() {
267 throw new IllegalStateException();
273 public List
<URIish
> getUris() {
275 throw new IllegalStateException();