package name.abuchen.portfolio.ui.wizards.datatransfer; import org.eclipse.jface.layout.TreeColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import name.abuchen.portfolio.model.Account; import name.abuchen.portfolio.model.AccountTransaction; import name.abuchen.portfolio.model.Client; import name.abuchen.portfolio.model.Portfolio; import name.abuchen.portfolio.model.PortfolioTransaction; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.model.SecurityPrice; import name.abuchen.portfolio.ui.Images; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.wizards.AbstractWizardPage; public class ExportSelectionPage extends AbstractWizardPage { private Client client; private TreeViewer treeViewer; protected ExportSelectionPage(Client client) { super("export"); //$NON-NLS-1$ setTitle(Messages.ExportWizardTitle); setDescription(Messages.ExportWizardDescription); this.client = client; } public Object getExportItem() { return ((IStructuredSelection) treeViewer.getSelection()).getFirstElement(); } public Class<?> getExportClass() { TreeItem parentItem = treeViewer.getTree().getSelection()[0].getParentItem(); return parentItem == null ? null : (Class<?>) parentItem.getData(); } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); setControl(container); container.setLayout(new FillLayout()); Composite treeComposite = new Composite(container, SWT.NONE); TreeColumnLayout layout = new TreeColumnLayout(); treeComposite.setLayout(layout); treeViewer = new TreeViewer(treeComposite, SWT.BORDER | SWT.SINGLE); Tree tree = treeViewer.getTree(); tree.setHeaderVisible(false); tree.setLinesVisible(true); TreeColumn column = new TreeColumn(tree, SWT.None); column.setText(Messages.ColumnDate); layout.setColumnData(column, new ColumnWeightData(100)); treeViewer.setContentProvider(new ExportItemsContentProvider()); treeViewer.setLabelProvider(new ExportItemsLabelProvider()); treeViewer.setInput(client); treeViewer.setExpandedElements(new Object[] { AccountTransaction.class, PortfolioTransaction.class, Security.class }); // wiring setPageComplete(false); treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { Object element = ((IStructuredSelection) treeViewer.getSelection()).getFirstElement(); setPageComplete(element != null); } }); treeViewer.getTree().addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent event) { Object element = ((IStructuredSelection) treeViewer.getSelection()).getFirstElement(); setPageComplete(element != null); } @Override public void widgetDefaultSelected(SelectionEvent event) { if (getWizard().performFinish()) ((WizardDialog) getContainer()).close(); } }); } private static class ExportItemsContentProvider implements ITreeContentProvider { private Client client; @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { client = (Client) newInput; } @Override public Object[] getElements(Object inputElement) { return new Class[] { AccountTransaction.class, PortfolioTransaction.class, Security.class, SecurityPrice.class }; } @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof Class) { if (parentElement == AccountTransaction.class) return client.getAccounts().stream().sorted(new Account.ByName()).toArray(); else if (parentElement == PortfolioTransaction.class) return client.getPortfolios().stream().sorted(new Portfolio.ByName()).toArray(); else if (parentElement == Security.class) return new String[] { Messages.ExportWizardSecurityMasterData, Messages.ExportWizardMergedSecurityPrices, Messages.ExportWizardAllTransactionsAktienfreundeNet }; else if (parentElement == SecurityPrice.class) return client.getSecurities().stream().sorted(new Security.ByName()).toArray(); } return null; } @Override public Object getParent(Object element) { return null; } @Override public boolean hasChildren(Object element) { return element instanceof Class; } @Override public void dispose() {} } static class ExportItemsLabelProvider extends LabelProvider { @Override public String getText(Object element) { if (element instanceof Account) return ((Account) element).getName(); else if (element instanceof Portfolio) return ((Portfolio) element).getName(); else if (element instanceof Security) return ((Security) element).getName(); else if (element == AccountTransaction.class) return Messages.ExportWizardAccountTransactions; else if (element == PortfolioTransaction.class) return Messages.ExportWizardPortfolioTransactions; else if (element == Security.class) return Messages.ExportWizardSecurities; else if (element == SecurityPrice.class) return Messages.ExportWizardHistoricalQuotes; else if (element instanceof String) return (String) element; else return null; } @Override public Image getImage(Object element) { if (element instanceof Class) return Images.CATEGORY.image(); else if (element instanceof Account) return Images.ACCOUNT.image(); else if (element instanceof Portfolio) return Images.PORTFOLIO.image(); else if (element instanceof Security) return Images.SECURITY.image(); return null; } } }