package name.abuchen.portfolio.ui.handlers;
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import name.abuchen.portfolio.datatransfer.Extractor;
import name.abuchen.portfolio.datatransfer.IBFlexStatementExtractor;
import name.abuchen.portfolio.datatransfer.pdf.BankSLMPDFExctractor;
import name.abuchen.portfolio.datatransfer.pdf.ComdirectPDFExtractor;
import name.abuchen.portfolio.datatransfer.pdf.CommerzbankPDFExctractor;
import name.abuchen.portfolio.datatransfer.pdf.ConsorsbankPDFExctractor;
import name.abuchen.portfolio.datatransfer.pdf.DABPDFExctractor;
import name.abuchen.portfolio.datatransfer.pdf.DeutscheBankPDFExctractor;
import name.abuchen.portfolio.datatransfer.pdf.DkbPDFExtractor;
import name.abuchen.portfolio.datatransfer.pdf.FlatexPDFExtractor;
import name.abuchen.portfolio.datatransfer.pdf.INGDiBaExtractor;
import name.abuchen.portfolio.datatransfer.pdf.OnvistaPDFExtractor;
import name.abuchen.portfolio.datatransfer.pdf.SBrokerPDFExtractor;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.PortfolioPart;
import name.abuchen.portfolio.ui.PortfolioPlugin;
import name.abuchen.portfolio.ui.wizards.datatransfer.ImportExtractedItemsWizard;
public class ImportPDFHandler
{
@CanExecute
boolean isVisible(@Named(IServiceConstants.ACTIVE_PART) MPart part)
{
return MenuHelper.isClientPartActive(part);
}
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part,
@Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
@Named("name.abuchen.portfolio.ui.param.pdf-type") String type) throws IOException
{
Client client = MenuHelper.getActiveClient(part);
if (client == null)
return;
try
{
// determine extractor class
Extractor extractor = createExtractor(type, client);
// open file dialog to pick pdf files
FileDialog fileDialog = new FileDialog(shell, SWT.OPEN | SWT.MULTI);
fileDialog.setText(extractor.getLabel());
fileDialog.setFilterNames(new String[] { MessageFormat.format("{0} ({1})", //$NON-NLS-1$
extractor.getLabel(), extractor.getFilterExtension()) });
fileDialog.setFilterExtensions(new String[] { extractor.getFilterExtension() });
fileDialog.open();
String[] fileNames = fileDialog.getFileNames();
if (fileNames.length == 0)
return;
List<File> files = new ArrayList<>();
for (String file : fileNames)
files.add(new File(fileDialog.getFilterPath(), file));
// open wizard dialog
IPreferenceStore preferences = ((PortfolioPart) part.getObject()).getPreferenceStore();
Dialog wizwardDialog = new WizardDialog(shell,
new ImportExtractedItemsWizard(client, extractor, preferences, files));
wizwardDialog.open();
}
catch (IllegalArgumentException e)
{
PortfolioPlugin.log(e);
MessageDialog.openError(shell, Messages.LabelError, e.getMessage());
}
}
private Extractor createExtractor(String type, Client client) throws IOException, IllegalArgumentException
{
switch (type)
{
case "bankslm": //$NON-NLS-1$
return new BankSLMPDFExctractor(client);
case "comdirect": //$NON-NLS-1$
return new ComdirectPDFExtractor(client);
case "commerzbank": //$NON-NLS-1$
return new CommerzbankPDFExctractor(client);
case "consorsbank": //$NON-NLS-1$
return new ConsorsbankPDFExctractor(client);
case "dab": //$NON-NLS-1$
return new DABPDFExctractor(client);
case "db": //$NON-NLS-1$
return new DeutscheBankPDFExctractor(client);
case "dkb": //$NON-NLS-1$
return new DkbPDFExtractor(client);
case "flatex": //$NON-NLS-1$
return new FlatexPDFExtractor(client);
case "ingdiba": //$NON-NLS-1$
return new INGDiBaExtractor(client);
case "onvista": //$NON-NLS-1$
return new OnvistaPDFExtractor(client);
case "sbroker": //$NON-NLS-1$
return new SBrokerPDFExtractor(client);
case "ib": //$NON-NLS-1$
return new IBFlexStatementExtractor(client);
default:
throw new UnsupportedOperationException("Unknown pdf type: " + type); //$NON-NLS-1$
}
}
}