package sbt.eclipse.wizards;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* @author joonas
* @since 30.8.2009
*
*/
public class SbtImportWizardPage extends WizardPage {
private Label selectRootLabel;
private Text selectRootText;
private Button selectRootButton;
private Label projectFoundLabel;
private Label projectFoundLabelResult;
private Label projectOrganizationLabel;
private Label projectOrganizationLabelResult;
private Label projectNameLabel;
private Label projectNameLabelResult;
private Properties loadedProperties;
private File root;
public Properties getLoadedProperties() {
return loadedProperties;
}
public File getRoot() {
return root;
}
/**
* @param pageName
*/
protected SbtImportWizardPage(String pageName) {
super(pageName);
setTitle("Select SBT project");
setDescription("Import SBT project by selecting its root directory");
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
* .Composite)
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(3, false));
setControl(composite);
selectRootLabel = new Label(composite, SWT.NONE);
selectRootLabel.setText("Project root directory:");
selectRootText = new Text(composite, SWT.BORDER_SOLID);
selectRootText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
false));
selectRootText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
checkRootDirectory();
}
});
selectRootButton = new Button(composite, SWT.NONE);
selectRootButton.setText("Browse");
selectRootButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
DirectoryDialog dialog = new DirectoryDialog(getShell(),
SWT.NONE);
dialog.setText("Select the SBT project root directory");
String result = dialog.open();
if (result != null)
selectRootText.setText(result);
}
});
projectFoundLabel = new Label(composite, SWT.NONE);
projectFoundLabel.setText("SBT project found?");
projectFoundLabelResult = new Label(composite, SWT.NONE);
projectFoundLabelResult.setLayoutData(new GridData(SWT.FILL,
SWT.CENTER, true, false, 2, 1));
projectFoundLabelResult.setText("No");
projectNameLabel = new Label(composite, SWT.NONE);
projectNameLabel.setText("Project name");
projectNameLabelResult = new Label(composite, SWT.NONE);
projectNameLabelResult.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
true, false, 2, 1));
projectOrganizationLabel = new Label(composite, SWT.NONE);
projectOrganizationLabel.setText("Organization");
projectOrganizationLabelResult = new Label(composite, SWT.NONE);
projectOrganizationLabelResult.setLayoutData(new GridData(SWT.FILL,
SWT.CENTER, true, false, 2, 1));
}
protected boolean fillProjectInfo(File buildProperties) throws IOException {
FileInputStream input = null;
try {
input = new FileInputStream(buildProperties);
loadedProperties = new Properties();
loadedProperties.load(input);
if (!loadedProperties.containsKey("project.name"))
return false;
if (!loadedProperties.containsKey("sbt.version"))
return false;
projectNameLabelResult.setText(loadedProperties
.getProperty("project.name"));
projectOrganizationLabelResult.setText(loadedProperties
.getProperty("project.organization"));
return true;
} finally {
if (input != null) {
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
protected void checkRootDirectory() {
String rootText = selectRootText.getText();
if (rootText == null || rootText.isEmpty())
return;
root = new File(rootText);
if (root.exists() && root.isDirectory()) {
File projectDir = new File(root, "project");
File buildProperties = new File(projectDir, "build.properties");
if (buildProperties.exists() && buildProperties.isFile()) {
try {
if (fillProjectInfo(buildProperties)) {
projectFoundLabelResult.setText("Yes");
setPageComplete(true);
return;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
setPageComplete(false);
projectNameLabelResult.setText("");
projectOrganizationLabelResult.setText("");
projectFoundLabelResult.setText("No");
}
}