package name.abuchen.portfolio.datatransfer.csv;
import java.text.MessageFormat;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import name.abuchen.portfolio.Messages;
import name.abuchen.portfolio.datatransfer.Extractor;
import name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column;
import name.abuchen.portfolio.datatransfer.csv.CSVImporter.Field;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.online.impl.YahooFinanceQuoteFeed;
/* package */class CSVSecurityExtractor extends BaseCSVExtractor
{
/* package */ CSVSecurityExtractor(Client client)
{
super(client, Messages.CSVDefSecurities);
List<Field> fields = getFields();
fields.add(new Field(Messages.CSVColumn_ISIN).setOptional(true));
fields.add(new Field(Messages.CSVColumn_WKN).setOptional(true));
fields.add(new Field(Messages.CSVColumn_TickerSymbol).setOptional(true));
fields.add(new Field(Messages.CSVColumn_SecurityName).setOptional(true));
fields.add(new Field(Messages.CSVColumn_Currency).setOptional(true));
fields.add(new Field(Messages.CSVColumn_Note).setOptional(true));
}
@Override
void extract(List<Item> items, String[] rawValues, Map<String, Column> field2column) throws ParseException
{
// check if we can identify a security
Security security = getSecurity(rawValues, field2column, s -> {
s.setCurrencyCode(getCurrencyCode(Messages.CSVColumn_Currency, rawValues, field2column));
String note = getText(Messages.CSVColumn_Note, rawValues, field2column);
s.setNote(note);
if (s.getTickerSymbol() != null)
s.setFeed(YahooFinanceQuoteFeed.ID);
items.add(new Extractor.SecurityItem(s));
});
if (security == null)
throw new ParseException(MessageFormat.format(Messages.CSVImportMissingSecurity,
new StringJoiner(", ").add(Messages.CSVColumn_ISIN) //$NON-NLS-1$
.add(Messages.CSVColumn_TickerSymbol).add(Messages.CSVColumn_WKN)
.toString()),
0);
// security exists
if (getClient().getSecurities().contains(security))
throw new ParseException(MessageFormat.format(Messages.CSVImportSecurityExists, security.getName(),
security.getExternalIdentifier()), 0);
// nothing to do: if necessary, the security item has been created in
// the callback of the #extractSecurity method
}
}