/******************************************************************************* * 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 java.util.Iterator; 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.layout.GridDataFactory; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import gov.redhawk.ide.sdr.WaveformsSubContainer; import gov.redhawk.ide.sdr.ui.navigator.SdrNavigatorContentProvider; import gov.redhawk.ide.sdr.ui.navigator.SdrNavigatorLabelProvider; import gov.redhawk.ide.sdr.ui.navigator.SdrViewerSorter; import mil.jpeojtrs.sca.sad.SoftwareAssembly; public class SoftwareAssemblySelectionPage extends WizardPage { private LaunchLocalWaveformWizard wizard; private TreeViewer viewer; private DataBindingContext dbc = new DataBindingContext(); protected SoftwareAssemblySelectionPage(LaunchLocalWaveformWizard wizard) { super("selectSad", "Select Waveform", null); setDescription("Select a waveform to launch in the local Sandbox."); this.wizard = wizard; } @SuppressWarnings("unchecked") @Override public void createControl(Composite parent) { Composite main = new Composite(parent, SWT.None); main.setLayout(new GridLayout(2, false)); viewer = new TreeViewer(main, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL); viewer.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(2, 1).create()); viewer.setContentProvider(new SdrNavigatorContentProvider() { @Override public boolean hasChildren(Object object) { if (object instanceof SoftwareAssembly) { return false; } return super.hasChildren(object); } }); viewer.setLabelProvider(new SdrNavigatorLabelProvider()); viewer.setComparator(new SdrViewerSorter()); Group descriptionGroup = new Group(main, SWT.None); descriptionGroup.setText("Description"); descriptionGroup.setLayout(new GridLayout()); descriptionGroup.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).create()); final Text descriptionField = new Text(descriptionGroup, SWT.READ_ONLY | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP); descriptionField.setLayoutData(GridDataFactory.fillDefaults().hint(SWT.FILL, 100).grab(true, false).create()); viewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement(); if (selection instanceof SoftwareAssembly) { SoftwareAssembly sad = (SoftwareAssembly) selection; descriptionField.setText((sad.getDescription() == null) ? "" : sad.getDescription()); } else { descriptionField.setText(""); } } }); dbc.bindValue(ViewersObservables.observeInput(viewer), BeanProperties.value(wizard.getClass(), "waveformsContainer").observe(wizard)); dbc.bindValue(ViewersObservables.observeSingleSelection(viewer), BeanProperties.value(wizard.getClass(), "softwareAssembly").observe(wizard), new UpdateValueStrategy().setBeforeSetValidator(new IValidator() { @Override public IStatus validate(Object value) { if (value instanceof WaveformsSubContainer) { return ValidationStatus.error("Must select a waveform"); } return ValidationStatus.ok(); } }), null); WizardPageSupport.create(this, dbc); setControl(main); } @Override public boolean isPageComplete() { if (viewer.getSelection().isEmpty()) { return false; } StructuredSelection selection = (StructuredSelection) viewer.getSelection(); for (Iterator< ? > iterator = selection.iterator(); iterator.hasNext();) { if (!(iterator.next() instanceof SoftwareAssembly)) { return false; } } return super.isPageComplete(); } }