/
PDFImportAssistant.java
174 lines (153 loc) · 8.07 KB
/
PDFImportAssistant.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package name.abuchen.portfolio.datatransfer.pdf;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.eclipse.core.runtime.IProgressMonitor;
import name.abuchen.portfolio.Messages;
import name.abuchen.portfolio.datatransfer.Extractor;
import name.abuchen.portfolio.datatransfer.Extractor.Item;
import name.abuchen.portfolio.datatransfer.SecurityCache;
import name.abuchen.portfolio.model.Client;
public class PDFImportAssistant
{
private final Client client;
private final List<File> files;
private final List<Extractor> extractors = new ArrayList<>();
public PDFImportAssistant(Client client, List<File> files)
{
this.client = client;
this.files = files;
extractors.add(new AdvanziaBankPDFExtractor(client));
extractors.add(new AJBellSecuritiesLimitedPDFExtractor(client));
extractors.add(new AkfBankPDFExtractor(client));
extractors.add(new ArkeaDirectBankPDFExtractor(client));
extractors.add(new AvivaPLCPDFExtractor(client));
extractors.add(new BaaderBankPDFExtractor(client));
extractors.add(new Bank11PDFExtractor(client));
extractors.add(new BankSLMPDFExtractor(client));
extractors.add(new BarclaysBankIrelandPLCPDFExtractor(client));
extractors.add(new BasellandschaftlicheKantonalbankPDFExtractor(client));
extractors.add(new BigbankPDFExtractor(client));
extractors.add(new BisonPDFExtractor(client));
extractors.add(new BondoraCapitalPDFExtractor(client));
extractors.add(new ComdirectPDFExtractor(client));
extractors.add(new CommerzbankPDFExtractor(client));
extractors.add(new CommSecPDFExtractor(client));
extractors.add(new ComputersharePDFExtractor(client));
extractors.add(new ConsorsbankPDFExtractor(client));
extractors.add(new CreditSuisseAGPDFExtractor(client));
extractors.add(new CrowdestorPDFExtractor(client));
extractors.add(new DABPDFExtractor(client));
extractors.add(new DADATBankenhausPDFExtractor(client));
extractors.add(new DegiroPDFExtractor(client));
extractors.add(new DekaBankPDFExtractor(client));
extractors.add(new DeutscheBankPDFExtractor(client));
extractors.add(new DirectaSimPDFExtractor(client));
extractors.add(new Direkt1822BankPDFExtractor(client));
extractors.add(new DkbPDFExtractor(client));
extractors.add(new DreiBankenEDVPDFExtractor(client));
extractors.add(new DZBankGruppePDFExtractor(client));
extractors.add(new EasyBankAGPDFExtractor(client));
extractors.add(new EbasePDFExtractor(client));
extractors.add(new ErsteBankPDFExtractor(client));
extractors.add(new FidelityInternationalPDFExtractor(client));
extractors.add(new FILFondbankPDFExtractor(client));
extractors.add(new FindependentAGPDFExtractor(client));
extractors.add(new FinTechGroupBankPDFExtractor(client));
extractors.add(new GenoBrokerPDFExtractor(client));
extractors.add(new GladbacherBankAGPDFExtractor(client));
extractors.add(new HargreavesLansdownPlcExtractor(client));
extractors.add(new HelloBankPDFExtractor(client));
extractors.add(new HypothekarbankLenzburgAGPDFExtractor(client));
extractors.add(new INGDiBaPDFExtractor(client));
extractors.add(new JTDirektbankPDFExtractor(client));
extractors.add(new KBCGroupNVPDFExtractor(client));
extractors.add(new KeytradeBankPDFExtractor(client));
extractors.add(new MLPBankingAGPDFExtractor(client));
extractors.add(new NIBCBankPDFExtractor(client));
extractors.add(new OldenburgischeLandesbankAGPDFExtractor(client));
extractors.add(new LGTBankPDFExtractor(client));
extractors.add(new LiechtensteinischeLandesbankAGPDFExtractor(client));
extractors.add(new LimeTradingCorpPDFExtractor(client));
extractors.add(new MerkurPrivatBankPDFExtractor(client));
extractors.add(new OnvistaPDFExtractor(client));
extractors.add(new OpenBankSAPDFExtractor(client));
extractors.add(new PictetCieGruppeSAPDFExtractor(client));
extractors.add(new PostbankPDFExtractor(client));
extractors.add(new PostfinancePDFExtractor(client));
extractors.add(new QuirinBankAGPDFExtractor(client));
extractors.add(new RaiffeisenBankgruppePDFExtractor(client));
extractors.add(new RenaultBankDirektPDFExtractor(client));
extractors.add(new RevolutLtdPDFExtractor(client));
extractors.add(new SantanderConsumerBankPDFExtractor(client));
extractors.add(new SberbankEuropeAGPDFExtractor(client));
extractors.add(new SBrokerPDFExtractor(client));
extractors.add(new ScorePriorityIncPDFExtractor(client));
extractors.add(new SelfWealthPDFExtractor(client));
extractors.add(new SimpelPDFExtractor(client));
extractors.add(new SolarisbankAGPDFExtractor(client));
extractors.add(new StakeshopPtyLtdPDFExtractor(client));
extractors.add(new SunrisePDFExtractor(client));
extractors.add(new SuresseDirektBankPDFExtractor(client));
extractors.add(new SutorBankGmbHPDFExtractor(client));
extractors.add(new SwissquotePDFExtractor(client));
extractors.add(new TargobankPDFExtractor(client));
extractors.add(new TigerBrokersPteLtdPDFExtractor(client));
extractors.add(new TradeRepublicPDFExtractor(client));
extractors.add(new UBSAGBankingAGPDFExtractor(client));
extractors.add(new UnicreditPDFExtractor(client));
extractors.add(new VanguardGroupEuropePDFExtractor(client));
extractors.add(new VBankAGPDFExtractor(client));
extractors.add(new WealthsimpleInvestmentsIncPDFExtractor(client));
extractors.add(new WirBankPDFExtractor(client));
extractors.add(new WeberbankPDFExtractor(client));
extractors.add(new ZuercherKantonalbankPDFExtractor(client));
}
public Map<Extractor, List<Item>> run(IProgressMonitor monitor, Map<File, List<Exception>> errors)
{
monitor.beginTask(Messages.PDFMsgExtracingFiles, files.size());
List<PDFInputFile> inputFiles = files.stream().map(PDFInputFile::new).collect(Collectors.toList());
Map<Extractor, List<Item>> itemsByExtractor = new HashMap<>();
SecurityCache securityCache = new SecurityCache(client);
for (PDFInputFile inputFile : inputFiles)
{
monitor.setTaskName(inputFile.getName());
try
{
inputFile.convertPDFtoText();
boolean extracted = false;
List<Exception> warnings = new ArrayList<>();
for (Extractor extractor : extractors)
{
List<Item> items = extractor.extract(securityCache, inputFile, warnings);
if (!items.isEmpty())
{
extracted = true;
itemsByExtractor.computeIfAbsent(extractor, e -> new ArrayList<Item>()).addAll(items);
break;
}
}
if (!extracted)
{
Predicate<? super Exception> isNotUnsupportedOperation = e -> !(e instanceof UnsupportedOperationException);
List<Exception> meaningfulExceptions = warnings.stream().filter(isNotUnsupportedOperation).toList();
errors.put(inputFile.getFile(), meaningfulExceptions.isEmpty() ? warnings : meaningfulExceptions);
}
}
catch (IOException e)
{
errors.computeIfAbsent(inputFile.getFile(), f -> new ArrayList<>()).add(e);
}
monitor.worked(1);
}
// post processing
itemsByExtractor.entrySet().forEach(e -> e.getKey().postProcessing(e.getValue()));
securityCache.addMissingSecurityItems(itemsByExtractor);
return itemsByExtractor;
}
}