package rocks.inspectit.ui.rcp.ci.wizard.page;
import java.util.Collection;
import java.util.HashSet;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import rocks.inspectit.shared.cs.ci.Environment;
import rocks.inspectit.ui.rcp.formatter.ImageFormatter;
import rocks.inspectit.ui.rcp.formatter.TextFormatter;
/**
* Page for exporting/importing {@link Environment}s.
*
* @author Ivan Senic
*
*/
public class SelectEnvironmentsWizardPage extends WizardPage {
/**
* Environments possible to export.
*/
private Collection<Environment> environments;
/**
* Pre-selected environment IDs.
*/
private Collection<String> selectedIds;
/**
* Table for showing environments.
*/
private Table table;
/**
* {@link TableViewer}.
*/
private TableViewer tableViewer;
/**
* Default constructor.
*
* @param pageName
* Page name.
* @param message
* Page message.
* @param environments
* Environment to offer for selection.
* @param selectedIds
* Pre-selected environment IDs.
*/
public SelectEnvironmentsWizardPage(String pageName, String message, Collection<Environment> environments, Collection<String> selectedIds) {
super(pageName);
setTitle(pageName);
setMessage(message);
this.environments = environments;
this.selectedIds = selectedIds;
}
/**
* {@inheritDoc}
*/
@Override
public void createControl(Composite parent) {
Composite main = new Composite(parent, SWT.NONE);
main.setLayout(new GridLayout(1, false));
table = new Table(main, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.CHECK);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
table.setHeaderVisible(true);
table.setLinesVisible(true);
tableViewer = new TableViewer(table);
createColumns(tableViewer);
tableViewer.setContentProvider(new ArrayContentProvider());
tableViewer.setInput(environments);
updateCheckedItems();
setControl(main);
}
/**
* Updates checked items.
*/
private void updateCheckedItems() {
for (TableItem item : table.getItems()) {
Environment data = (Environment) item.getData();
item.setChecked(selectedIds.contains(data.getId()));
}
}
/**
* Creates columns.
*
* @param tableViewer
* {@link TableViewer}
*/
private void createColumns(TableViewer tableViewer) {
TableViewerColumn selectedColumn = new TableViewerColumn(tableViewer, SWT.NONE);
selectedColumn.getColumn().setResizable(false);
selectedColumn.getColumn().setWidth(40);
selectedColumn.getColumn().setText("Selected");
selectedColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return "";
}
});
TableViewerColumn nameColumn = new TableViewerColumn(tableViewer, SWT.NONE);
nameColumn.getColumn().setWidth(200);
nameColumn.getColumn().setText("Name");
nameColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((Environment) element).getName();
}
@Override
public Image getImage(Object element) {
return ImageFormatter.getEnvironmentImage((Environment) element);
}
});
TableViewerColumn descriptionColumn = new TableViewerColumn(tableViewer, SWT.NONE);
descriptionColumn.getColumn().setWidth(300);
descriptionColumn.getColumn().setText("Description");
descriptionColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
String desc = StringUtils.defaultString(((Environment) element).getDescription());
return TextFormatter.clearLineBreaks(desc);
}
});
}
/**
* Returns selected environments.
*
* @return Returns selected environments.
*/
public Collection<Environment> getEnvironments() {
Collection<Environment> selected = new HashSet<>();
for (TableItem item : table.getItems()) {
if (item.getChecked()) {
selected.add((Environment) item.getData());
}
}
return selected;
}
/**
* Sets {@link #environments}.
*
* @param environments
* New value for {@link #environments}
*/
public void setEnvironments(Collection<Environment> environments) {
this.environments = environments;
tableViewer.setInput(environments);
}
/**
* Sets {@link #selectedIds}.
*
* @param selectedIds
* New value for {@link #selectedIds}
*/
public void setSelectedIds(Collection<String> selectedIds) {
this.selectedIds = selectedIds;
updateCheckedItems();
}
}