/******************************************************************************* * 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.graphiti.sad.ui.diagram.wizards; import gov.redhawk.ide.sdr.ui.SdrUiPlugin; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import mil.jpeojtrs.sca.prf.AbstractProperty; import mil.jpeojtrs.sca.spd.SoftPkg; import mil.jpeojtrs.sca.spd.SpdFactory; import mil.jpeojtrs.sca.spd.impl.SoftPkgImpl; import mil.jpeojtrs.sca.spd.provider.SpdItemProviderAdapterFactory; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; 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.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.PlatformUI; import ExtendedCF.WKP.DEVICEKIND; import FRONTEND.FE_TUNER_DEVICE_KIND; public class SelectFrontEndTunerWizardPage extends WizardPage { private static final ImageDescriptor TITLE_IMAGE = null; private final SoftPkg[] targetSDRFrontEndDevices; private SoftPkg selectedDevice = null; private TableViewer tableViewer; public SelectFrontEndTunerWizardPage() { super("SelectFrontEndTunerWizardPage", "Select Target Device", TITLE_IMAGE); this.setDescription("Select a FrontEnd tuner installed on your system.\nThis will pre-populate many of the fields in the following wizard pages."); SoftPkg[] targetSDRDevices = SdrUiPlugin.getDefault().getTargetSdrRoot().getDevicesContainer().getComponents().toArray(new SoftPkg[0]); targetSDRFrontEndDevices = getFrontEndDevices(targetSDRDevices).toArray(new SoftPkg[0]); } /** * Return all FrontEnd Devices from the provided list * @param devices * @return */ public List<SoftPkg> getFrontEndDevices(SoftPkg[] devices) { List<SoftPkg> frontEndDevices = new ArrayList<SoftPkg>(); //add Generic SoftPkg genericEntry = SpdFactory.eINSTANCE.createSoftPkg(); genericEntry.setName("Generic FrontEnd Device"); frontEndDevices.add(genericEntry); for (SoftPkg d: devices) { //null checks if (d.getPropertyFile() != null && d.getPropertyFile().getProperties() != null) { AbstractProperty property = d.getPropertyFile().getProperties().getProperty(DEVICEKIND.value); if (property != null && property.toAny() != null && property.toAny().toString().equals(FE_TUNER_DEVICE_KIND.value)) { frontEndDevices.add(d); } } } return frontEndDevices; } @Override public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); composite.setLayout(new GridLayout(1, false)); Label usesDeviceIdLabel = new Label(composite, SWT.NONE); usesDeviceIdLabel.setText("Which FrontEnd Device you would like to use?"); createFrontEndDeviceTable(composite); setControl(composite); setPageComplete(true); } private void createFrontEndDeviceTable(final Composite parent) { GridDataFactory dataFactory = GridDataFactory.fillDefaults(); tableViewer = new TableViewer(new Table(parent, SWT.BORDER)); tableViewer.getControl().setLayoutData(dataFactory.span(1, 1).grab(true, true).create()); final ComposedAdapterFactory factory = new ComposedAdapterFactory(); factory.addAdapterFactory(new SpdItemProviderAdapterFactory()); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new DecoratingLabelProvider(new AdapterFactoryLabelProvider(factory), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()) { @Override public String getText(final Object element) { if (element instanceof SoftPkgImpl) { final SoftPkgImpl softPkg = (SoftPkgImpl) element; if (softPkg.getId() != null) { final URI uri = softPkg.eResource().getURI(); return softPkg.getName() + " (" + uri.path().replace(uri.lastSegment(), "") + ")"; } else { return softPkg.getName(); } } return ""; } }); //set selection tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { List<Object> selection = Arrays.asList(((IStructuredSelection) event.getSelection()).toArray()); for (Object obj : selection) { selectedDevice = (SoftPkg) obj; } } }); tableViewer.setInput(targetSDRFrontEndDevices); } public SoftPkg getSelectedDevice() { return selectedDevice; } }