package net.enilink.komma.edit.ui.wizards;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import net.enilink.commons.iterator.IExtendedIterator;
import net.enilink.komma.core.IReference;
public class ConnectionPropertySelectionPage extends WizardPage {
protected Object input;
protected ITreeContentProvider contentProvider;
protected ILabelProvider labelProvider;
protected TreeViewer treeViewer;
protected IReference selectedType;
private List<ViewerFilter> preAddedFilters = Collections.EMPTY_LIST;
public IReference validate(Object[] selection) {
return null;
}
public ConnectionPropertySelectionPage(String name, Object treeInput,
ITreeContentProvider contentProvider, ILabelProvider labelProvider) {
super(name);
setTitle("New Connection");
setDescription("Select connection type");
this.input = (treeInput instanceof IExtendedIterator) ? ((IExtendedIterator<?>) treeInput)
.toList() : treeInput;
this.contentProvider = contentProvider;
this.labelProvider = labelProvider;
setPageComplete(false);
}
@Override
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
Tree tree = new Tree(composite, SWT.BORDER);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
tree.setLayoutData(gridData);
treeViewer = new TreeViewer(tree);
treeViewer.setLabelProvider(labelProvider);
treeViewer.setContentProvider(contentProvider);
treeViewer.setInput(input);
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent e) {
IStructuredSelection selection = (IStructuredSelection) e
.getSelection();
selectedType = validate(selection.toArray());
setPageComplete(!selection.isEmpty());
}
});
treeViewer.setSorter(new PropertyConnectionSorter());
for (ViewerFilter filter : preAddedFilters) {
treeViewer.addFilter(filter);
}
setControl(composite);
}
public void addFilter(ViewerFilter filter) {
if (treeViewer != null) {
treeViewer.addFilter(filter);
} else {
if (preAddedFilters == Collections.EMPTY_LIST) {
preAddedFilters = new LinkedList<ViewerFilter>();
}
preAddedFilters.add(filter);
}
}
public void setInput(Object input) {
this.input = input;
if (treeViewer != null) {
treeViewer.setInput(input);
}
}
protected IReference getType() {
return selectedType;
}
}