package org.openlca.core.database.references; import org.openlca.core.Tests; import org.openlca.core.model.Category; import org.openlca.core.model.Flow; import org.openlca.core.model.FlowProperty; import org.openlca.core.model.FlowPropertyFactor; import org.openlca.core.model.ImpactCategory; import org.openlca.core.model.ImpactFactor; import org.openlca.core.model.ImpactMethod; import org.openlca.core.model.ModelType; import org.openlca.core.model.Parameter; import org.openlca.core.model.ParameterScope; import org.openlca.core.model.Unit; import org.openlca.core.model.UnitGroup; public class ImpactMethodReferenceSearchTest extends BaseReferenceSearchTest { @Override protected ModelType getModelType() { return ModelType.IMPACT_METHOD; } @Override protected ImpactMethod createModel() { ImpactMethod method = new ImpactMethod(); method.setCategory(insertAndAddExpected("category", new Category())); String n1 = generateName(); String n2 = generateName(); String n3 = generateName(); String n4 = generateName(); String n5 = generateName(); method.getParameters().add(createParameter(n1, 3d, false)); method.getParameters().add(createParameter(n2, n1 + "*2*" + n3, false)); insertAndAddExpected(null, createParameter(n3, "5*5", true)); // formula with parameter to see if added as reference (unexpected) insertAndAddExpected(null, createParameter(n4, "3*" + n5, true)); Parameter globalUnreferenced = createParameter(n1, "3*3", true); Parameter globalUnreferenced2 = createParameter(n5, "3*3", true); // must be inserted manually globalUnreferenced = Tests.insert(globalUnreferenced); globalUnreferenced2 = Tests.insert(globalUnreferenced2); method.getImpactCategories().add(createImpactCategory(n4)); method.getImpactCategories().add(createImpactCategory(n4)); method = Tests.insert(method); for (ImpactCategory category : method.getImpactCategories()) for (ImpactFactor f : category.getImpactFactors()) { addExpected("flow", f.getFlow(), "impactFactors", ImpactFactor.class, f.getId()); addExpected("flowPropertyFactor", f.getFlowPropertyFactor(), "impactFactors", ImpactFactor.class, f.getId()); addExpected("unit", f.getUnit(), "impactFactors", ImpactFactor.class, f.getId()); } return method; } private ImpactCategory createImpactCategory(String p4Name) { ImpactCategory category = new ImpactCategory(); category.getImpactFactors().add(createImpactFactor(3d)); category.getImpactFactors().add(createImpactFactor("2*" + p4Name)); return category; } private ImpactFactor createImpactFactor(Object value) { ImpactFactor iFactor = new ImpactFactor(); Flow flow = createFlow(); FlowPropertyFactor factor = flow.getFlowPropertyFactors().get(0); Unit unit = factor.getFlowProperty().getUnitGroup().getUnits().get(0); iFactor.setFlow(flow); iFactor.setFlowPropertyFactor(factor); iFactor.setUnit(unit); boolean formula = value instanceof String; if (formula) iFactor.setFormula(value.toString()); else iFactor.setValue((double) value); return iFactor; } private Flow createFlow() { Flow flow = new Flow(); UnitGroup group = new UnitGroup(); Unit unit = new Unit(); unit.setName("unit"); group.getUnits().add(unit); group = Tests.insert(group); FlowProperty property = new FlowProperty(); property.setUnitGroup(group); property = Tests.insert(property); FlowPropertyFactor factor = new FlowPropertyFactor(); factor.setFlowProperty(property); flow.getFlowPropertyFactors().add(factor); return Tests.insert(flow); } private Parameter createParameter(String name, Object value, boolean global) { Parameter parameter = new Parameter(); parameter.setName(name); boolean formula = value instanceof String; parameter.setInputParameter(!formula); if (formula) parameter.setFormula(value.toString()); else parameter.setValue((double) value); if (global) parameter.setScope(ParameterScope.GLOBAL); else parameter.setScope(ParameterScope.IMPACT_METHOD); return parameter; } }