package fr.opensagres.nosql.ide.ui.wizards;
import java.util.Collections;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import fr.opensagres.nosql.ide.core.model.IDatabase;
import fr.opensagres.nosql.ide.core.model.IServer;
import fr.opensagres.nosql.ide.ui.Validator;
import fr.opensagres.nosql.ide.ui.internal.Messages;
import fr.opensagres.nosql.ide.ui.viewers.database.DatabaseContentProvider;
import fr.opensagres.nosql.ide.ui.viewers.database.DatabaseLabelProvider;
public class AbstractSelectDatabaseWizardPage extends
AbstractSelectServerWizardPage {
private ComboViewer databaseViewer;
public AbstractSelectDatabaseWizardPage(String pageName) {
super(pageName);
}
@Override
protected void createUIContent(Composite container) {
// Create server
super.createUIContent(container);
// Display list of database.
Label databaseLabel = new Label(container, SWT.NONE);
databaseLabel.setText(Messages.database_label);
databaseViewer = new ComboViewer(container, SWT.BORDER);
databaseViewer.setLabelProvider(DatabaseLabelProvider.getInstance());
databaseViewer
.setContentProvider(DatabaseContentProvider.getInstance());
databaseViewer.getControl().setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
databaseViewer.getCombo().addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
validate();
}
});
}
public IDatabase getSelectedDatabase() {
return databaseViewer.getSelection().isEmpty() ? null
: (IDatabase) ((IStructuredSelection) databaseViewer
.getSelection()).getFirstElement();
}
public String getDatabaseName() {
return databaseViewer.getCombo().getText();
}
@Override
protected void onLoad() {
super.onLoad();
refreshDatabases();
// display databases of the server
IDatabase database = getInitialDatabase();
if (database != null) {
databaseViewer.setSelection(new StructuredSelection(database));
}
}
@Override
protected void serverChanged() {
super.serverChanged();
refreshDatabases();
}
protected void refreshDatabases() {
IServer server = getSelectedServer();
databaseViewer.setInput(server != null ? server.getChildren()
: Collections.emptyList());
}
private IDatabase getInitialDatabase() {
return ((AbstractSelectNodeWizard) getWizard()).getInitialDatabase();
}
@Override
protected boolean validateFields() {
if (super.validateFields()) {
// Database Name validation
String databaseName = databaseViewer.getCombo().getText();
return Validator.validateDatatabaseName(databaseName, this);
}
return false;
}
}