package org.openlca.core.matrix; import org.openlca.core.database.IDatabase; import org.openlca.core.database.NativeSql; import gnu.trove.list.array.TDoubleArrayList; /** * Contains conversion factors of currencies to the reference currency of a * database. */ public class CurrencyTable { private LongIndex index = new LongIndex(); private TDoubleArrayList factors = new TDoubleArrayList(); private CurrencyTable() { } public static CurrencyTable create(IDatabase db) { CurrencyTable table = new CurrencyTable(); table.init(db); return table; } private void init(IDatabase db) { String query = "select id, conversion_factor from tbl_currencies"; try { NativeSql.on(db).query(query, r -> { long id = r.getLong(1); double factor = r.getDouble(2); index.put(id); factors.add(factor); return true; }); } catch (Exception e) { String m = "failed to load currency factors via: " + query; throw new RuntimeException(m, e); } } public double getFactor(long currencyId) { if (currencyId == 0) return 1.0; int idx = index.getIndex(currencyId); if (idx < 0 || idx >= factors.size()) return 1.0; return factors.get(idx); } }