blob: 8970f254ea05fb4a0d43aa916a9b9dedc78b853e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Marc-Andre Laperle - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.importexport;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfNavigatorContentProvider;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfNavigatorLabelProvider;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* A wizard page for selecting the trace to export when no trace was previously
* selected.
*
* @author Marc-Andre Laperle
*/
public class ExportTracePackageSelectTraceWizardPage extends WizardPage {
private static final String PAGE_NAME = "ExportTracePackageSelectTraceWizardPage"; //$NON-NLS-1$
/**
* Construct the select trace page
*/
public ExportTracePackageSelectTraceWizardPage() {
super(PAGE_NAME);
}
private IProject fSelectedProject;
private Table fTraceTable;
@Override
public void createControl(Composite parent) {
Composite projectSelectionGroup = new Composite(parent, SWT.NONE);
projectSelectionGroup.setLayout(new GridLayout(2, true));
projectSelectionGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
projectSelectionGroup.setFont(parent.getFont());
Label projectLabel = new Label(projectSelectionGroup, SWT.NONE);
projectLabel.setText(Messages.ExportTracePackageSelectTraceWizardPage_ProjectSelection);
projectLabel.setLayoutData(new GridData());
Label configLabel = new Label(projectSelectionGroup, SWT.NONE);
configLabel.setText(Messages.ExportTracePackageSelectTraceWizardPage_TraceSelection);
configLabel.setLayoutData(new GridData());
final Table projectTable = new Table(projectSelectionGroup, SWT.SINGLE | SWT.BORDER);
projectTable.setLayoutData(new GridData(GridData.FILL_BOTH));
TableViewer projectViewer = new TableViewer(projectTable);
projectViewer.setContentProvider(new TmfNavigatorContentProvider() {
@Override
public Object[] getElements(Object inputElement) {
return (IProject[]) inputElement;
}
});
projectViewer.setLabelProvider(new WorkbenchLabelProvider());
projectViewer.setInput(TraceUtils.getOpenedTmfProjects().toArray(new IProject[] {}));
fTraceTable = new Table(projectSelectionGroup, SWT.BORDER | SWT.CHECK);
fTraceTable.setLayoutData(new GridData(GridData.FILL_BOTH));
final TableViewer traceViewer = new TableViewer(fTraceTable);
traceViewer.setContentProvider(new IStructuredContentProvider() {
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// Do nothing
}
@Override
public void dispose() {
// Do nothing
}
@Override
public Object[] getElements(Object inputElement) {
if (inputElement instanceof TmfTraceElement[]) {
return (TmfTraceElement[]) inputElement;
}
return null;
}
});
traceViewer.setLabelProvider(new ExportLabelProvider());
fTraceTable.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
getWizard().getContainer().updateButtons();
updateNextPageData();
}
});
projectTable.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem[] items = projectTable.getSelection();
fSelectedProject = (IProject) items[0].getData();
TmfProjectElement project = TmfProjectRegistry.getProject(fSelectedProject, true);
TmfTraceFolder tracesFolder = project.getTracesFolder();
TmfTraceElement[] array = new TmfTraceElement[0];
if (tracesFolder != null) {
List<TmfTraceElement> traces = tracesFolder.getTraces();
array = traces.toArray(new TmfTraceElement[] {});
traceViewer.setInput(array);
traceViewer.refresh();
}
if (array.length > 0) {
fTraceTable.select(0);
fTraceTable.notifyListeners(SWT.Selection, new Event());
}
getWizard().getContainer().updateButtons();
}
});
Composite btComp = new Composite(projectSelectionGroup, SWT.NONE);
btComp.setLayout(new GridLayout(2, true));
GridData gd = new GridData();
gd.horizontalSpan = 2;
gd.horizontalAlignment = SWT.RIGHT;
btComp.setLayoutData(gd);
final Button selectAll = new Button(btComp, SWT.PUSH);
selectAll.setText(org.eclipse.tracecompass.internal.tmf.ui.project.dialogs.Messages.Dialog_SelectAll);
selectAll.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem[] items = fTraceTable.getItems();
for (TableItem item : items) {
item.setChecked(true);
}
getWizard().getContainer().updateButtons();
updateNextPageData();
}
});
final Button deselectAll = new Button(btComp, SWT.PUSH);
deselectAll.setText(org.eclipse.tracecompass.internal.tmf.ui.project.dialogs.Messages.Dialog_DeselectAll);
deselectAll.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem[] items = fTraceTable.getItems();
for (TableItem item : items) {
item.setChecked(false);
}
getWizard().getContainer().updateButtons();
updateNextPageData();
}
});
setControl(projectSelectionGroup);
setTitle(Messages.ExportTracePackageWizardPage_Title);
setMessage(Messages.ExportTracePackageSelectTraceWizardPage_ChooseTrace);
}
private ArrayList<TmfTraceElement> getCheckedTraces() {
TableItem[] items = fTraceTable.getItems();
ArrayList<TmfTraceElement> traces = new ArrayList<>();
for (TableItem item : items) {
if (item.getChecked()) {
TmfTraceElement trace = (TmfTraceElement) item.getData();
traces.add(trace);
}
}
return traces;
}
private void updateNextPageData() {
ExportTracePackageWizardPage page = (ExportTracePackageWizardPage) getWizard().getPage(ExportTracePackageWizardPage.PAGE_NAME);
page.setSelectedTraces(getCheckedTraces());
}
@Override
public boolean canFlipToNextPage() {
return !getCheckedTraces().isEmpty();
}
private class ExportLabelProvider extends TmfNavigatorLabelProvider {
@Override
public String getText(Object element) {
if (element instanceof TmfTraceElement) {
TmfTraceElement folder = (TmfTraceElement) element;
return folder.getElementPath();
}
return super.getText(element);
}
}
}