package com.tibco.as.spacebar.ui.wizards.space.distribution;
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 DistributionWizardPage extends AbstractWizardPage implements
IListChangeListener {
private Space space;
private IObservableList observe;
private DualList<Field> dualList;
public DistributionWizardPage(Space space) {
super("spaceDistributionWizardPage", "Space Distribution",
"Select space distribution fields");
this.space = space;
}
/**
* Create contents of the wizard.
*
* @param parent
*/
@Override
protected Control createControl(ScrolledComposite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
dualList = new DualList<Field>(composite, SWT.NONE, Field.class,
"name", space.getKeys().getChildren());
dualList.addSelection(space.getDistribution().getChildren());
observe = BeanProperties.list("children").observe(space.getKeys());
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 void handleListChange(ListChangeEvent event) {
for (ListDiffEntry entry : event.diff.getDifferences()) {
Field field = (Field) entry.getElement();
if (entry.isAddition()) {
space.getDistribution().addChild(field);
} else {
space.getDistribution().removeChild(field);
}
}
}
}