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
9 * Mathias Kinzler (SAP AG) - initial implementation
10 *******************************************************************************/
11 package org
.eclipse
.egit
.ui
.internal
.repository
;
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
;
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
;
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);
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() {
75 public void widgetSelected(SelectionEvent e
) {
76 String previous
= directoryText
.getText();
77 File previousFile
= new File(previous
);
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();
86 directoryText
.setText(result
);
91 bareButton
= new Button(main
, SWT
.CHECK
);
92 bareButton
.setText(UIText
.CreateRepositoryPage_BareCheckbox
);
93 GridDataFactory
.fillDefaults().indent(10, 0).span(3, 1)
95 bareButton
.addSelectionListener(new SelectionListener() {
97 public void widgetSelected(SelectionEvent e
) {
101 public void widgetDefaultSelected(SelectionEvent e
) {
107 directoryText
.addModifyListener(new ModifyListener() {
109 public void modifyText(ModifyEvent e
) {
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();
136 setErrorMessage(null);
138 String dir
= directoryText
.getText().trim();
140 if (dir
.length() == 0) {
141 setErrorMessage(UIText
.CreateRepositoryPage_PleaseSelectDirectoryMessage
);
145 RepositoryPathChecker checker
= new RepositoryPathChecker();
146 if (!checker
.check(dir
)) {
147 setErrorMessage(checker
.getErrorMessage());
150 if (checker
.hasContent()) {
152 setErrorMessage(NLS
.bind(
153 UIText
.CreateRepositoryPage_NotEmptyMessage
, dir
));
157 UIText
.CreateRepositoryPage_NotEmptyMessage
, dir
),
158 IMessageProvider
.INFORMATION
);
161 setMessage(UIText
.CreateRepositoryPage_PageMessage
);
164 setPageComplete(getErrorMessage() == null);