package org.openlca.core.matrix; import org.openlca.core.database.IDatabase; import org.openlca.core.database.NativeSql; import org.openlca.core.model.ParameterScope; import org.openlca.core.model.UncertaintyType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Set; class ParameterTableBuilder { private Logger log = LoggerFactory.getLogger(getClass()); private Set<Long> contexts; ParameterTable build(IDatabase database, Set<Long> contexts) { this.contexts = contexts; final ParameterTable table = new ParameterTable(); try { putParameters(database, table); } catch (Exception e) { log.error("error while building parameter table", e); } this.contexts = null; return table; } private void putParameters(IDatabase database, final ParameterTable table) throws Exception { String query = "select * from tbl_parameters"; NativeSql.on(database).query(query, new NativeSql.QueryResultHandler() { @Override public boolean nextResult(ResultSet result) throws SQLException { CalcParameter param = makeParam(result); if (param != null) table.put(param); return true; } }); } private CalcParameter makeParam(ResultSet r) { try { ParameterScope scope = ParameterScope.valueOf(r .getString("scope")); long owner = r.getLong("f_owner"); if (scope != ParameterScope.GLOBAL && !contexts.contains(owner)) return null; if(scope == ParameterScope.GLOBAL) owner = 0; CalcParameter param = new CalcParameter(); param.setName(r.getString("name")); param.setInputParameter(r.getBoolean("is_input_param")); param.setOwner(owner); param.setScope(scope); param.setValue(r.getDouble("value")); param.setFormula(r.getString("formula")); addUncertaintyInfo(r, param); return param; } catch (Exception e) { log.error("failed to get parameter values from db", e); return null; } } private void addUncertaintyInfo(ResultSet r, CalcParameter param) throws SQLException { int uncertaintyType = r.getInt("distribution_type"); if (!r.wasNull()) { param.setUncertaintyType(UncertaintyType.values()[uncertaintyType]); param.setParameter1(r.getDouble("parameter1_value")); param.setParameter2(r.getDouble("parameter2_value")); param.setParameter3(r.getDouble("parameter3_value")); param.setParameter1Formula(r.getString("parameter1_formula")); param.setParameter2Formula(r.getString("parameter2_formula")); param.setParameter3Formula(r.getString("parameter3_formula")); } } }