/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* All rights reserved. This program and the accompanying materials are made available under
* the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package gov.redhawk.ide.debug.internal.ui.wizards;
import gov.redhawk.ide.sdr.ui.SdrContentProvider;
import gov.redhawk.ide.sdr.ui.SdrLabelProvider;
import mil.jpeojtrs.sca.spd.Implementation;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.databinding.wizard.WizardPageSupport;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
public class ImplementationSelectionPage extends WizardPage {
private LaunchComponentWizard wizard;
private DataBindingContext dbc = new DataBindingContext();
protected ImplementationSelectionPage(LaunchComponentWizard wizard) {
super("implPage", "Select Implementation", null);
setDescription("Select the implementation to launch in the sandbox.");
this.wizard = wizard;
}
@SuppressWarnings("unchecked")
@Override
public void createControl(Composite parent) {
Composite main = new Composite(parent, SWT.None);
main.setLayout(new FillLayout());
TreeViewer viewer = new TreeViewer(main, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL);
viewer.setContentProvider(new SdrContentProvider() {
@Override
public boolean hasChildren(Object object) {
if (object instanceof Implementation) {
return false;
}
return super.hasChildren(object);
}
});
viewer.setLabelProvider(new SdrLabelProvider());
viewer.setFilters(new ViewerFilter[] {
new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
return element instanceof Implementation;
}
}
});
viewer.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
if (e1 instanceof Implementation && e2 instanceof Implementation) {
Implementation spd1 = (Implementation) e1;
Implementation spd2 = (Implementation) e2;
return spd1.getId().compareTo(spd2.getId());
}
return super.compare(viewer, e1, e2);
}
});
dbc.bindValue(ViewersObservables.observeInput(viewer), BeanProperties.value(wizard.getClass(), "softPkg").observe(wizard));
dbc.bindValue(ViewersObservables.observeSingleSelection(viewer), BeanProperties.value(wizard.getClass(), "implementation").observe(wizard),
new UpdateValueStrategy().setAfterConvertValidator(new IValidator() {
@Override
public IStatus validate(Object value) {
if (value == null) {
return ValidationStatus.error("Must select an implementation");
}
return ValidationStatus.ok();
}
}), null);
WizardPageSupport.create(this, dbc);
setControl(main);
}
}