/******************************************************************************
* Copyright (c) 2012 GitHub Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Kevin Sawicki (GitHub Inc.) - initial API and implementation
*****************************************************************************/
package org.eclipse.egit.ui.internal.submodule;
import java.io.File;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* Wizard page to configure the path of a submodule
*/
public class SubmodulePathWizardPage extends WizardPage {
private final Repository repo;
private Text pathText;
private String path;
/**
* Create submodule path wizard page
*
* @param repo
*/
public SubmodulePathWizardPage(Repository repo) {
super("pathPage"); //$NON-NLS-1$
this.repo = repo;
}
@Override
public void createControl(Composite parent) {
Composite displayArea = new Composite(parent, SWT.NONE);
GridLayoutFactory.swtDefaults().numColumns(2).equalWidth(false)
.applyTo(displayArea);
GridDataFactory.fillDefaults().grab(true, true).applyTo(displayArea);
new Label(displayArea, SWT.NONE)
.setText(UIText.SubmodulePathWizardPage_PathLabel);
pathText = new Text(displayArea, SWT.SINGLE | SWT.BORDER);
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER)
.grab(true, false).applyTo(pathText);
pathText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
validate();
}
});
setControl(displayArea);
setTitle(UIText.SubmodulePathWizardPage_Title);
setMessage(UIText.SubmodulePathWizardPage_Message);
setPageComplete(false);
}
/**
* @return path
*/
public String getPath() {
return path;
}
private void validate() {
final String currentPath = pathText.getText();
if (currentPath.length() == 0) {
setPageComplete(false);
return;
}
File file = new File(repo.getWorkTree(), currentPath);
if (file.isFile()) {
setErrorMessage(UIText.SubmodulePathWizardPage_ErrorPathMustBeEmpty);
setPageComplete(false);
return;
}
if (file.isDirectory()) {
String[] children = file.list();
if (children != null && children.length > 0) {
setErrorMessage(UIText.SubmodulePathWizardPage_ErrorPathMustBeEmpty);
setPageComplete(false);
return;
}
}
this.path = currentPath;
setErrorMessage(null);
setPageComplete(true);
}
}