package org.openlca.io.olca; import org.openlca.core.database.CurrencyDao; import org.openlca.core.database.IDatabase; import org.openlca.core.model.Currency; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Objects; class CurrencyImport { private Logger log = LoggerFactory.getLogger(getClass()); private CurrencyDao sourceDao; private CurrencyDao destDao; private Sequence seq; private RefSwitcher refs; CurrencyImport(IDatabase source, IDatabase dest, Sequence seq) { this.sourceDao = new CurrencyDao(source); this.destDao = new CurrencyDao(dest); this.refs = new RefSwitcher(source, dest, seq); this.seq = seq; } public void run() { log.trace("import currencies"); try { Currency refCurrency = sourceDao.getReferenceCurrency(); if (refCurrency == null) return; if (!seq.contains(seq.CURRENCY, refCurrency.getRefId())) { copy(refCurrency); } for (Currency srcCurrency : sourceDao.getAll()) { if (Objects.equal(refCurrency, srcCurrency)) continue; if (seq.contains(seq.CURRENCY, srcCurrency.getRefId())) continue; copy(srcCurrency); } } catch (Exception e) { log.error("Currency import failed", e); } } private void copy(Currency srcCurrency) { Currency destCurrency = srcCurrency.clone(); if (Objects.equal(srcCurrency, srcCurrency.referenceCurrency)) { destCurrency.referenceCurrency = destCurrency; } else { destCurrency.referenceCurrency = refs.switchRef( srcCurrency.referenceCurrency); } destCurrency = destDao.insert(destCurrency); seq.put(seq.CURRENCY, srcCurrency.getRefId(), destCurrency.getId()); } }