/*******************************************************************************
* 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.dcd.ui.wizard;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
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.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.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 1.1
*/
public class ScaNodeProjectDevicesWizardPage extends WizardPage {
private TreeViewer treeViewer;
/**
* @since 1.2
*/
public ScaNodeProjectDevicesWizardPage(final String pageName) {
super(pageName);
setTitle("Select Devices for Node");
this.setPageComplete(true);
}
/**
* @deprecated {@link ScaNodeProjectDevicesWizardPage} now collects the list of available devices
* internally
*/
@Deprecated
public ScaNodeProjectDevicesWizardPage(final String pageName, final SoftPkg[] devices) {
this(pageName);
}
/**
* {@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 devices to include in this node:");
GridDataFactory.generate(directionsLabel, 2, 1);
this.treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
this.treeViewer.getControl().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1));
this.treeViewer.setContentProvider(new SdrNavigatorContentProvider());
this.treeViewer.setLabelProvider(new SdrNavigatorLabelProvider());
this.treeViewer.setComparator(new SdrViewerSorter());
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.getDevicesContainer());
}
});
return Status.OK_STATUS;
}
};
job.setUser(true);
job.schedule();
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
getWizard().getContainer().updateButtons();
}
});
setControl(composite);
}
@Override
public void setVisible(final boolean visible) {
this.setPageComplete(true);
super.setVisible(visible);
}
@SuppressWarnings("unchecked")
public SoftPkg[] getNodeDevices() {
List<SoftPkg> softPkgs = new ArrayList<SoftPkg>();
StructuredSelection selection = (StructuredSelection) treeViewer.getSelection();
for (Iterator<SoftPkg> iterator = selection.iterator(); iterator.hasNext();) {
softPkgs.add(iterator.next());
}
return softPkgs.toArray(new SoftPkg[0]);
}
@Override
public boolean isPageComplete() {
StructuredSelection selection = (StructuredSelection) treeViewer.getSelection();
for (Iterator< ? > iterator = selection.iterator(); iterator.hasNext();) {
if (!(iterator.next() instanceof SoftPkg)) {
return false;
}
}
return super.isPageComplete();
}
/**
* @deprecated {@link ScaNodeProjectDevicesWizardPage} now collects the list of available devices
* internally
*/
@Deprecated
public void setDevices(Collection<SoftPkg> devices) {
return;
}
}