Search in sources :

Example 1 with Column

use of name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column in project portfolio by buchen.

the class CSVExtractor method getText.

protected String getText(String name, String[] rawValues, Map<String, Column> field2column) {
    Column column = field2column.get(name);
    if (column == null)
        return null;
    int columnIndex = column.getColumnIndex();
    if (columnIndex < 0 || columnIndex >= rawValues.length)
        return null;
    String value = rawValues[columnIndex];
    return value != null && value.trim().length() == 0 ? null : value;
}
Also used : Column(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column)

Example 2 with Column

use of name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column in project portfolio by buchen.

the class CSVImportDefinitionPage method doUpdateErrorMessages.

private void doUpdateErrorMessages() {
    Set<Field> fieldsToMap = new HashSet<>(importer.getExtractor().getFields());
    for (Column column : importer.getColumns()) fieldsToMap.remove(column.getField());
    if (fieldsToMap.isEmpty()) {
        setMessage(null);
        setPageComplete(true);
    } else {
        String required = fieldsToMap.stream().filter(f -> !f.isOptional()).map(Field::getName).collect(// $NON-NLS-1$
        Collectors.joining(", "));
        String optional = fieldsToMap.stream().filter(Field::isOptional).map(Field::getName).collect(// $NON-NLS-1$
        Collectors.joining(", "));
        boolean onlyOptional = required.length() == 0;
        setPageComplete(onlyOptional);
        StringBuilder message = new StringBuilder();
        if (required.length() > 0)
            // $NON-NLS-1$
            message.append(MessageFormat.format(Messages.CSVImportErrorMissingFields, required)).append("\n");
        if (optional.length() > 0)
            message.append(MessageFormat.format(Messages.CSVImportInformationOptionalFields, optional));
        setMessage(message.toString(), onlyOptional ? IMessageProvider.INFORMATION : IMessageProvider.ERROR);
    }
}
Also used : EnumField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.EnumField) AmountField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.AmountField) DateField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.DateField) Field(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Field) ISINField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.ISINField) TableColumn(org.eclipse.swt.widgets.TableColumn) TableViewerColumn(org.eclipse.jface.viewers.TableViewerColumn) Column(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column) HashSet(java.util.HashSet)

Example 3 with Column

use of name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column in project portfolio by buchen.

the class CSVExtractorTestUtil method buildField2Column.

/**
 * Build column config for unit testing, e.g. expect all values exactly in
 * the order they have been configured and with the first format option
 */
/* package */
static Map<String, Column> buildField2Column(CSVExtractor extractor) {
    Map<String, Column> field2column = new HashMap<>();
    int index = 0;
    for (Field f : extractor.getFields()) {
        Column column = new Column(index++, f.getName());
        column.setField(f);
        if (f instanceof DateField)
            column.setFormat(DateField.FORMATS[0]);
        else if (f instanceof AmountField)
            column.setFormat(AmountField.FORMATS[0]);
        field2column.put(f.getName(), column);
    }
    return field2column;
}
Also used : AmountField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.AmountField) DateField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.DateField) Field(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Field) Column(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column) HashMap(java.util.HashMap) AmountField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.AmountField) DateField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.DateField)

Example 4 with Column

use of name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column in project portfolio by buchen.

the class CSVAccountTransactionExtractorTest method testDetectionOfFeeRefunds.

@Test
public void testDetectionOfFeeRefunds() {
    Client client = new Client();
    CSVExtractor extractor = new CSVAccountTransactionExtractor(client);
    // setup custom mapping from string -> type
    Map<String, Column> field2column = buildField2Column(extractor);
    Column typeColumn = field2column.get(Messages.CSVColumn_Type);
    @SuppressWarnings("unchecked") EnumField<AccountTransaction.Type> field = (EnumField<AccountTransaction.Type>) typeColumn.getField();
    EnumMapFormat<AccountTransaction.Type> format = field.createFormat();
    format.map().put(AccountTransaction.Type.FEES_REFUND, "Gebührenerstattung");
    format.map().put(AccountTransaction.Type.FEES, "Gebühren");
    typeColumn.setFormat(new FieldFormat(Messages.CSVColumn_Type, format));
    List<Exception> errors = new ArrayList<Exception>();
    List<Item> results = extractor.extract(0, // 
    Arrays.<String[]>asList(new String[] { "2017-04-21", "", "", "", "10", "", "Gebührenerstattung", "", "", "", "" }, new String[] { "2017-04-21", "", "", "", "20", "", "Gebühren", "", "", "", "" }), field2column, errors);
    assertThat(results.size(), is(2));
    new AssertImportActions().check(results, CurrencyUnit.EUR);
    AccountTransaction t1 = (AccountTransaction) // 
    results.stream().filter(// 
    i -> i instanceof TransactionItem).filter(i -> ((AccountTransaction) ((TransactionItem) i).getSubject()).getType() == AccountTransaction.Type.FEES_REFUND).findAny().get().getSubject();
    assertThat(t1.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(10))));
    AccountTransaction t2 = (AccountTransaction) // 
    results.stream().filter(// 
    i -> i instanceof TransactionItem).filter(i -> ((AccountTransaction) ((TransactionItem) i).getSubject()).getType() == AccountTransaction.Type.FEES).findAny().get().getSubject();
    assertThat(t2.getMonetaryAmount(), is(Money.of(CurrencyUnit.EUR, Values.Amount.factorize(20))));
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) Arrays(java.util.Arrays) Money(name.abuchen.portfolio.money.Money) Values(name.abuchen.portfolio.money.Values) Client(name.abuchen.portfolio.model.Client) Item(name.abuchen.portfolio.datatransfer.Extractor.Item) CurrencyUnit(name.abuchen.portfolio.money.CurrencyUnit) LocalDateTime(java.time.LocalDateTime) IsEmptyCollection.empty(org.hamcrest.collection.IsEmptyCollection.empty) Messages(name.abuchen.portfolio.Messages) SecurityItem(name.abuchen.portfolio.datatransfer.Extractor.SecurityItem) ArrayList(java.util.ArrayList) Assert.assertThat(org.junit.Assert.assertThat) EnumField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.EnumField) EnumMapFormat(name.abuchen.portfolio.datatransfer.csv.CSVImporter.EnumMapFormat) Map(java.util.Map) TransactionItem(name.abuchen.portfolio.datatransfer.Extractor.TransactionItem) CSVExtractorTestUtil.buildField2Column(name.abuchen.portfolio.datatransfer.csv.CSVExtractorTestUtil.buildField2Column) BuySellEntry(name.abuchen.portfolio.model.BuySellEntry) AccountTransferEntry(name.abuchen.portfolio.model.AccountTransferEntry) ParseException(java.text.ParseException) CoreMatchers.nullValue(org.hamcrest.CoreMatchers.nullValue) FieldFormat(name.abuchen.portfolio.datatransfer.csv.CSVImporter.FieldFormat) AccountTransaction(name.abuchen.portfolio.model.AccountTransaction) Test(org.junit.Test) Security(name.abuchen.portfolio.model.Security) List(java.util.List) Column(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column) AssertImportActions(name.abuchen.portfolio.datatransfer.actions.AssertImportActions) Unit(name.abuchen.portfolio.model.Transaction.Unit) EnumField(name.abuchen.portfolio.datatransfer.csv.CSVImporter.EnumField) TransactionItem(name.abuchen.portfolio.datatransfer.Extractor.TransactionItem) ArrayList(java.util.ArrayList) FieldFormat(name.abuchen.portfolio.datatransfer.csv.CSVImporter.FieldFormat) AccountTransaction(name.abuchen.portfolio.model.AccountTransaction) ParseException(java.text.ParseException) AssertImportActions(name.abuchen.portfolio.datatransfer.actions.AssertImportActions) Item(name.abuchen.portfolio.datatransfer.Extractor.Item) SecurityItem(name.abuchen.portfolio.datatransfer.Extractor.SecurityItem) TransactionItem(name.abuchen.portfolio.datatransfer.Extractor.TransactionItem) CSVExtractorTestUtil.buildField2Column(name.abuchen.portfolio.datatransfer.csv.CSVExtractorTestUtil.buildField2Column) Column(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column) Client(name.abuchen.portfolio.model.Client) Test(org.junit.Test)

Example 5 with Column

use of name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column in project portfolio by buchen.

the class CSVExtractor method getISIN.

protected String getISIN(String name, String[] rawValues, Map<String, Column> field2column) {
    Column column = field2column.get(name);
    if (column == null)
        return null;
    int columnIndex = column.getColumnIndex();
    if (columnIndex < 0 || columnIndex >= rawValues.length)
        return null;
    String value = rawValues[columnIndex];
    if (value == null)
        return null;
    value = value.trim().toUpperCase();
    // $NON-NLS-1$ //$NON-NLS-2$
    Pattern pattern = Pattern.compile("\\b(" + Isin.PATTERN + ")\\b");
    Matcher matcher = pattern.matcher(value);
    if (matcher.find())
        value = matcher.group(1);
    return value.length() == 0 ? null : value;
}
Also used : Pattern(java.util.regex.Pattern) Column(name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column) Matcher(java.util.regex.Matcher)

Aggregations

Column (name.abuchen.portfolio.datatransfer.csv.CSVImporter.Column)6 ArrayList (java.util.ArrayList)2 AmountField (name.abuchen.portfolio.datatransfer.csv.CSVImporter.AmountField)2 DateField (name.abuchen.portfolio.datatransfer.csv.CSVImporter.DateField)2 EnumField (name.abuchen.portfolio.datatransfer.csv.CSVImporter.EnumField)2 Field (name.abuchen.portfolio.datatransfer.csv.CSVImporter.Field)2 TableViewerColumn (org.eclipse.jface.viewers.TableViewerColumn)2 TableColumn (org.eclipse.swt.widgets.TableColumn)2 IOException (java.io.IOException)1 ParseException (java.text.ParseException)1 LocalDateTime (java.time.LocalDateTime)1 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1 Messages (name.abuchen.portfolio.Messages)1 Item (name.abuchen.portfolio.datatransfer.Extractor.Item)1