package com.tibco.as.spacebar.ui.wizards.space.index;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.observable.list.IListChangeListener;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.list.ListChangeEvent;
import org.eclipse.core.databinding.observable.list.ListDiffEntry;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import com.tibco.as.spacebar.ui.model.Field;
import com.tibco.as.spacebar.ui.model.Index;
import com.tibco.as.spacebar.ui.model.SpaceFields;
import com.tibco.as.spacebar.ui.wizards.space.AbstractEditElementWizardPage;
import com.tibco.as.spacebar.ui.wizards.space.DualList;
public class EditIndexWizardPage extends AbstractEditElementWizardPage<Index>
implements IListChangeListener {
private DualList<Field> dualList;
private IObservableList observe;
public EditIndexWizardPage(Index original, Index edited) {
super("EditIndexWizardPage", original, edited);
}
@Override
protected Control getControl(Composite parent, Index edited) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
Index index = getEdited();
IndexEditor editor = new IndexEditor(composite, SWT.NONE, index);
GridDataFactory.defaultsFor(editor).applyTo(editor);
// GridDataFactory.fillDefaults().grab(true, false).applyTo(editor);
SpaceFields fields = index.getParent().getParent().getFields();
dualList = new DualList<Field>(composite, SWT.NONE, Field.class,
"name", fields.getChildren());
observe = BeanProperties.list("children").observe(fields);
observe.addListChangeListener(dualList);
dualList.setSelection(index.getChildren());
dualList.getSelection().addListChangeListener(this);
GridDataFactory.defaultsFor(dualList).grab(true, true)
.applyTo(dualList);
// GridDataFactory.fillDefaults().grab(true, true).applyTo(dualList);
return composite;
}
@Override
public void dispose() {
observe.removeListChangeListener(dualList);
super.dispose();
}
@Override
protected String getEmptyNameMessage(Index element) {
return "Index name cannot be empty";
}
@Override
protected String getExistsMessage(Index element) {
return "An index with that name already exists";
}
@Override
public void handleListChange(ListChangeEvent event) {
Index index = getEdited();
for (ListDiffEntry entry : event.diff.getDifferences()) {
Field field = (Field) entry.getElement();
if (entry.isAddition()) {
index.addChild(field);
} else {
index.removeChild(field);
}
}
validate();
}
@Override
protected void validate() {
if (getEdited().getChildren().isEmpty()) {
setErrorMessage("No field selected");
setPageComplete(false);
} else {
super.validate();
}
}
}