package name.abuchen.portfolio.ui.wizards.client; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import name.abuchen.portfolio.model.Client; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.ui.Images; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.wizards.AbstractWizardPage; /* package */ class MarkSecurityAsIndexPage extends AbstractWizardPage { private Client client; private CheckboxTableViewer tableViewer; public MarkSecurityAsIndexPage(Client client) { super("mark-security-as-index"); //$NON-NLS-1$ this.client = client; setTitle(Messages.MarkSecurityPageTitle); setDescription(Messages.MarkSecurityPageDescription); } @Override public void beforePage() { if (tableViewer.getTable().getItemCount() == 0) { List<Security> candidates = client.getSecurities().stream().filter(s -> !s.hasTransactions(client)) .sorted(new Security.ByName()).collect(Collectors.toList()); tableViewer.setInput(candidates); tableViewer.setCheckedElements(candidates.stream() .filter(s -> s.getTickerSymbol() != null && s.getTickerSymbol().startsWith("^")).toArray()); //$NON-NLS-1$ } } public Stream<Security> getSelectedSecurities() { return Arrays.stream(tableViewer.getCheckedElements()).map(o -> (Security) o); } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); setControl(container); GridLayoutFactory.fillDefaults().numColumns(1).applyTo(container); Composite tableArea = new Composite(container, SWT.NONE); GridDataFactory.fillDefaults().grab(true, true).applyTo(tableArea); TableColumnLayout layout = new TableColumnLayout(); tableArea.setLayout(layout); tableViewer = CheckboxTableViewer.newCheckList(tableArea, SWT.BORDER | SWT.CHECK | SWT.MULTI); final Table table = tableViewer.getTable(); table.setHeaderVisible(false); table.setLinesVisible(false); TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.None); layout.setColumnData(column.getColumn(), new ColumnWeightData(100)); tableViewer.setLabelProvider(new LabelProvider() { @Override public Image getImage(Object element) { return Images.SECURITY.image(); } @Override public String getText(Object element) { return ((Security) element).getName(); } }); tableViewer.setContentProvider(ArrayContentProvider.getInstance()); container.pack(); setPageComplete(true); } }