package name.abuchen.portfolio.ui.views; import java.io.File; import java.io.IOException; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import name.abuchen.portfolio.datatransfer.csv.CSVExporter; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.online.QuoteFeed; import name.abuchen.portfolio.ui.AbstractFinanceView; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.PortfolioPlugin; import name.abuchen.portfolio.ui.UpdateQuotesJob; import name.abuchen.portfolio.ui.dialogs.SecurityPriceDialog; import name.abuchen.portfolio.ui.wizards.datatransfer.CSVImportWizard; import name.abuchen.portfolio.ui.wizards.datatransfer.ImportQuotesWizard; import name.abuchen.portfolio.ui.wizards.security.EditSecurityDialog; public class QuotesContextMenu { private AbstractFinanceView owner; public QuotesContextMenu(AbstractFinanceView owner) { this.owner = owner; } public void menuAboutToShow(IMenuManager parent, final Security security) { IMenuManager manager = new MenuManager(Messages.SecurityMenuQuotes); parent.add(manager); Action action = new Action(Messages.SecurityMenuUpdateQuotes) { @Override public void run() { new UpdateQuotesJob(owner.getClient(), security).schedule(); } }; // enable only if online updates are configured action.setEnabled(!QuoteFeed.MANUAL.equals(security.getFeed()) || (security.getLatestFeed() != null && !QuoteFeed.MANUAL.equals(security.getLatestFeed()))); manager.add(action); manager.add(new Action(Messages.SecurityMenuConfigureOnlineUpdate) { @Override public void run() { EditSecurityDialog dialog = new EditSecurityDialog(Display.getDefault().getActiveShell(), owner .getClient(), security); dialog.setShowQuoteConfigurationInitially(true); if (dialog.open() != Dialog.OK) return; owner.markDirty(); owner.notifyModelUpdated(); } }); manager.add(new Separator()); manager.add(new Action(Messages.SecurityMenuImportCSV) { @Override public void run() { FileDialog fileDialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.OPEN); fileDialog.setFilterNames( new String[] { Messages.CSVImportLabelFileCSV, Messages.CSVImportLabelFileAll }); fileDialog.setFilterExtensions(new String[] { "*.csv", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$ String fileName = fileDialog.open(); if (fileName == null) return; CSVImportWizard wizard = new CSVImportWizard(owner.getClient(), owner.getPreferenceStore(), new File(fileName)); wizard.setTarget(security); Dialog dialog = new WizardDialog(Display.getDefault().getActiveShell(), wizard); if (dialog.open() != Dialog.OK) return; owner.markDirty(); owner.notifyModelUpdated(); } }); manager.add(new Action(Messages.SecurityMenuImportHTML) { @Override public void run() { Dialog dialog = new WizardDialog(Display.getDefault().getActiveShell(), new ImportQuotesWizard(security)); if (dialog.open() != Dialog.OK) return; owner.markDirty(); owner.notifyModelUpdated(); } }); manager.add(new Action(Messages.SecurityMenuCreateManually) { @Override public void run() { Dialog dialog = new SecurityPriceDialog(Display.getDefault().getActiveShell(), owner.getClient(), security); if (dialog.open() != Dialog.OK) return; owner.markDirty(); owner.notifyModelUpdated(); } }); manager.add(new Separator()); manager.add(new Action(Messages.SecurityMenuExportCSV) { @Override public void run() { FileDialog fileDialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.SAVE); fileDialog.setFileName(security.getName() + ".csv"); //$NON-NLS-1$ String fileName = fileDialog.open(); if (fileName == null) return; try { new CSVExporter().exportSecurityPrices(new File(fileName), security); } catch (IOException e) { PortfolioPlugin.log(e); MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.LabelError, e.getMessage()); } } }); } }