Add descriptive message to directory browsers
[egit/eclipse.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / repository / CreateRepositoryPage.java
blobdacf4f68435e01629bc9282a1d7b9be748f5ef7a
1 /*******************************************************************************
2 * Copyright (c) 2010, 2013 SAP AG and others.
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.repository;
13 import java.io.File;
15 import org.eclipse.core.runtime.IPath;
16 import org.eclipse.core.runtime.Path;
17 import org.eclipse.egit.core.RepositoryUtil;
18 import org.eclipse.egit.core.internal.util.RepositoryPathChecker;
19 import org.eclipse.egit.ui.internal.UIText;
20 import org.eclipse.jface.dialogs.IMessageProvider;
21 import org.eclipse.jface.layout.GridDataFactory;
22 import org.eclipse.jface.wizard.WizardPage;
23 import org.eclipse.osgi.util.NLS;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.events.ModifyEvent;
26 import org.eclipse.swt.events.ModifyListener;
27 import org.eclipse.swt.events.SelectionAdapter;
28 import org.eclipse.swt.events.SelectionEvent;
29 import org.eclipse.swt.events.SelectionListener;
30 import org.eclipse.swt.layout.GridLayout;
31 import org.eclipse.swt.widgets.Button;
32 import org.eclipse.swt.widgets.Composite;
33 import org.eclipse.swt.widgets.DirectoryDialog;
34 import org.eclipse.swt.widgets.Label;
35 import org.eclipse.swt.widgets.Text;
37 /**
38 * Asks for a directory and whether to create a bare repository
40 public class CreateRepositoryPage extends WizardPage {
41 private final boolean hideBare;
43 private Text directoryText;
45 private Button bareButton;
47 /**
48 * Constructs this page
50 * @param hideBareOption
52 public CreateRepositoryPage(boolean hideBareOption) {
53 super(CreateRepositoryPage.class.getName());
54 this.hideBare = hideBareOption;
55 setTitle(UIText.CreateRepositoryPage_PageTitle);
56 setMessage(UIText.CreateRepositoryPage_PageMessage);
57 // we must at least enter the directory
58 setPageComplete(false);
61 @Override
62 public void createControl(Composite parent) {
63 Composite main = new Composite(parent, SWT.NONE);
64 main.setLayout(new GridLayout(3, false));
65 Label directoryLabel = new Label(main, SWT.NONE);
66 directoryLabel.setText(UIText.CreateRepositoryPage_DirectoryLabel);
67 directoryText = new Text(main, SWT.BORDER);
68 directoryText.setText(RepositoryUtil.getDefaultRepositoryDir());
69 GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER)
70 .grab(true, false).applyTo(directoryText);
71 Button browseButton = new Button(main, SWT.PUSH);
72 browseButton.setText(UIText.CreateRepositoryPage_BrowseButton);
73 browseButton.addSelectionListener(new SelectionAdapter() {
74 @Override
75 public void widgetSelected(SelectionEvent e) {
76 String previous = directoryText.getText();
77 File previousFile = new File(previous);
78 String result;
79 DirectoryDialog dialog = new DirectoryDialog(getShell());
80 dialog.setMessage(UIText.CreateRepositoryPage_PageMessage);
81 if (previousFile.exists() && previousFile.isDirectory()) {
82 dialog.setFilterPath(previousFile.getPath());
84 result = dialog.open();
85 if (result != null)
86 directoryText.setText(result);
88 });
90 if (!hideBare) {
91 bareButton = new Button(main, SWT.CHECK);
92 bareButton.setText(UIText.CreateRepositoryPage_BareCheckbox);
93 GridDataFactory.fillDefaults().indent(10, 0).span(3, 1)
94 .applyTo(bareButton);
95 bareButton.addSelectionListener(new SelectionListener() {
96 @Override
97 public void widgetSelected(SelectionEvent e) {
98 checkPage();
100 @Override
101 public void widgetDefaultSelected(SelectionEvent e) {
102 checkPage();
107 directoryText.addModifyListener(new ModifyListener() {
108 @Override
109 public void modifyText(ModifyEvent e) {
110 checkPage();
114 setControl(main);
115 directoryText.setFocus();
116 directoryText.setSelection(directoryText.getText().length());
120 * @return the directory where to create the Repository (with operating
121 * system specific path separators)
123 public String getDirectory() {
124 IPath path = new Path(directoryText.getText().trim());
125 return path.toOSString();
129 * @return <code>true</code> if a bare Repository is to be created
131 public boolean getBare() {
132 return bareButton != null && bareButton.getSelection();
135 void checkPage() {
136 setErrorMessage(null);
137 try {
138 String dir = directoryText.getText().trim();
140 if (dir.length() == 0) {
141 setErrorMessage(UIText.CreateRepositoryPage_PleaseSelectDirectoryMessage);
142 return;
145 RepositoryPathChecker checker = new RepositoryPathChecker();
146 if (!checker.check(dir)) {
147 setErrorMessage(checker.getErrorMessage());
148 return;
150 if (checker.hasContent()) {
151 if (getBare()) {
152 setErrorMessage(NLS.bind(
153 UIText.CreateRepositoryPage_NotEmptyMessage, dir));
154 return;
155 } else {
156 setMessage(NLS.bind(
157 UIText.CreateRepositoryPage_NotEmptyMessage, dir),
158 IMessageProvider.INFORMATION);
160 } else {
161 setMessage(UIText.CreateRepositoryPage_PageMessage);
163 } finally {
164 setPageComplete(getErrorMessage() == null);