package org.openlca.io.ecospold2.input;
import org.openlca.core.database.CurrencyDao;
import org.openlca.core.database.IDatabase;
import org.openlca.core.model.Currency;
import org.openlca.core.model.Exchange;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import spold2.IntermediateExchange;
import spold2.Property;
/**
* Maps prices of ecoinvent intermediate exchanges to cost information of the
* respective openLCA inputs and outputs.
*/
class PriceMapper {
private Currency currency;
PriceMapper(IDatabase db) {
Logger log = LoggerFactory.getLogger(getClass());
try {
CurrencyDao dao = new CurrencyDao(db);
for (Currency c : dao.getAll()) {
if ("EUR".equalsIgnoreCase(c.code)) {
currency = c;
break;
}
}
if (currency == null) {
log.info("no currency EUR found, will not map prices in import");
}
} catch (Exception e) {
log.error("failed to get currency");
}
}
void map(IntermediateExchange ie, Exchange e) {
if (currency == null || ie == null || ie.amount == null || e == null)
return;
Property price = findPrice(ie);
if (price == null)
return;
double val = ie.amount * price.amount;
if (val == 0)
return;
e.costValue = val;
e.currency = currency;
}
private Property findPrice(IntermediateExchange ie) {
for (Property p : ie.properties) {
String name = p.name;
String unit = p.unit;
if (name == null || unit == null)
continue;
if ("price".equalsIgnoreCase(name) && unit.startsWith("EUR"))
return p;
}
return null;
}
}