/*******************************************************************************
* 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.sad.ui.wizard;
import java.util.List;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
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.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
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.ui.PlatformUI;
import gov.redhawk.ide.sdr.SdrRoot;
import gov.redhawk.ide.sdr.ui.SdrUiPlugin;
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.spd.SoftPkg;
import mil.jpeojtrs.sca.spd.provider.SpdItemProviderAdapterFactory;
/**
* @since 4.0
*/
public class ScaWaveformProjectAssemblyControllerWizardPage extends WizardPage {
private TreeViewer treeViewer;
private static final int TABLE_HEIGHT_HINT = 150;
public ScaWaveformProjectAssemblyControllerWizardPage(final String pageName) {
super(pageName);
setTitle("Select Assembly Controller for Waveform");
this.setPageComplete(true);
}
/**
* {@inheritDoc}
*/
@Override
public void createControl(final Composite parent) {
// The top-level composite for this page
final Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
// Top Heading
final Label directionsLabel = new Label(composite, SWT.NONE);
directionsLabel.setText("Select the Component that you want to be the Assembly Controller for your Waveform:");
GridDataFactory.generate(directionsLabel, 2, 1);
this.treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
this.treeViewer.setContentProvider(new SdrNavigatorContentProvider());
this.treeViewer.setLabelProvider(new SdrNavigatorLabelProvider());
this.treeViewer.setComparator(new SdrViewerSorter());
final GridData data = new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1);
data.heightHint = ScaWaveformProjectAssemblyControllerWizardPage.TABLE_HEIGHT_HINT;
this.treeViewer.getControl().setLayoutData(data);
final ComposedAdapterFactory factory = new ComposedAdapterFactory();
factory.addAdapterFactory(new SpdItemProviderAdapterFactory());
final WorkspaceJob job = new WorkspaceJob("Load SdrRoot") {
@Override
public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
final SdrRoot sdrRoot = SdrUiPlugin.getDefault().getTargetSdrRoot();
sdrRoot.load(null);
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
treeViewer.setInput(sdrRoot.getComponentsContainer());
}
});
return Status.OK_STATUS;
}
};
job.setUser(true);
job.schedule();
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
getWizard().getContainer().updateButtons();
}
});
setControl(composite);
}
public SoftPkg getAssemblyController() {
return (SoftPkg) ((IStructuredSelection) this.treeViewer.getSelection()).getFirstElement();
}
@Override
public boolean isPageComplete() {
if (treeViewer.getSelection().isEmpty()) {
return super.isPageComplete();
}
Object selection = ((TreeSelection) treeViewer.getSelection()).getFirstElement();
if (selection instanceof SoftPkg) {
return super.isPageComplete();
}
return false;
}
/**
* @deprecated {@link ScaWaveformProjectAssemblyControllerWizardPage} now collects the list of available components
* internally
*/
@Deprecated
public void setComponents(final List<SoftPkg> components) {
return;
}
}