X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fjson%2FAccountListParser.java;h=872cac79c7828f6dd06a637431aaa7f36a2dbfab;hb=bb789332571609eeb1bef6e39b7ad359227d1045;hp=4dd2e375ae7ac79e9c66c31feb7afc6b6e978e07;hpb=eccd11f1895e84dcc2a95db41934355311cebe2e;p=mobile-ledger-staging.git diff --git a/app/src/main/java/net/ktnx/mobileledger/json/AccountListParser.java b/app/src/main/java/net/ktnx/mobileledger/json/AccountListParser.java index 4dd2e375..872cac79 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/AccountListParser.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/AccountListParser.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -18,23 +18,48 @@ package net.ktnx.mobileledger.json; import com.fasterxml.jackson.databind.MappingIterator; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectReader; + +import net.ktnx.mobileledger.async.RetrieveTransactionsTask; +import net.ktnx.mobileledger.model.LedgerAccount; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; -public class AccountListParser { - - private final MappingIterator iter; +import static net.ktnx.mobileledger.utils.Logger.debug; - public AccountListParser(InputStream input) throws IOException { - ObjectMapper mapper = new ObjectMapper(); - ObjectReader reader = mapper.readerFor(ParsedLedgerAccount.class); +abstract public class AccountListParser { + protected MappingIterator iterator; + public static AccountListParser forApiVersion(API version, InputStream input) + throws IOException { + switch (version) { + case v1_14: + return new net.ktnx.mobileledger.json.v1_14.AccountListParser(input); + case v1_15: + return new net.ktnx.mobileledger.json.v1_15.AccountListParser(input); + case v1_19_1: + return new net.ktnx.mobileledger.json.v1_19_1.AccountListParser(input); + default: + throw new RuntimeException("Unsupported version " + version.toString()); + } - iter = reader.readValues(input); } - public ParsedLedgerAccount nextAccount() throws IOException { - return iter.hasNext() ? iter.next() : null; + public abstract API getApiVersion(); + public LedgerAccount nextAccount(RetrieveTransactionsTask task, + HashMap map) { + if (!iterator.hasNext()) + return null; + + LedgerAccount next = iterator.next() + .toLedgerAccount(task, map); + + if (next.getName() + .equalsIgnoreCase("root")) + return nextAccount(task, map); + + debug("accounts", String.format("Got account '%s' [%s]", next.getName(), + getApiVersion().getDescription())); + return next; } + }