package com.tibco.as.spacebar.ui.wizards.space.key;
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.custom.ScrolledComposite;
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.Space;
import com.tibco.as.spacebar.ui.wizards.AbstractWizardPage;
import com.tibco.as.spacebar.ui.wizards.space.DualList;
public class KeyWizardPage extends AbstractWizardPage implements
IListChangeListener {
private Space space;
private IObservableList observe;
private DualList<Field> dualList;
public KeyWizardPage(Space space) {
super("spaceKeyDefWizardPage", "Space Key Definition",
"Enter space key index type and fields");
this.space = space;
setPageComplete(isKeySet());
}
@Override
protected Control createControl(ScrolledComposite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
KeyIndexTypeEditor indexTypeEditor = new KeyIndexTypeEditor(composite,
SWT.NONE, space);
GridDataFactory.fillDefaults().grab(true, false)
.applyTo(indexTypeEditor);
dualList = new DualList<Field>(composite, SWT.NONE, Field.class,
"name", space.getFields().getChildren());
dualList.addSelection(space.getKeys().getChildren());
observe = BeanProperties.list("children").observe(space.getFields());
observe.addListChangeListener(dualList);
dualList.getSelection().addListChangeListener(this);
GridDataFactory.fillDefaults().grab(true, true).applyTo(dualList);
return composite;
}
@Override
public void dispose() {
observe.removeListChangeListener(dualList);
super.dispose();
}
@Override
public boolean canFlipToNextPage() {
return isKeySet();
}
private boolean isKeySet() {
return !space.getKeys().getChildren().isEmpty();
}
@Override
public void handleListChange(ListChangeEvent event) {
for (ListDiffEntry entry : event.diff.getDifferences()) {
Field field = (Field) entry.getElement();
if (entry.isAddition()) {
space.getKeys().addChild(field);
} else {
space.getKeys().removeChild(field);
}
}
setPageComplete(isKeySet());
}
}