package org.openlca.core.database.references;
import org.openlca.core.Tests;
import org.openlca.core.model.Actor;
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.ImpactMethod;
import org.openlca.core.model.ModelType;
import org.openlca.core.model.Parameter;
import org.openlca.core.model.ParameterRedef;
import org.openlca.core.model.ParameterScope;
import org.openlca.core.model.ProductSystem;
import org.openlca.core.model.Project;
import org.openlca.core.model.ProjectVariant;
import org.openlca.core.model.Unit;
import org.openlca.core.model.UnitGroup;
public class ProjectReferenceSearchTest extends BaseReferenceSearchTest {
@Override
protected ModelType getModelType() {
return ModelType.PROJECT;
}
@Override
protected Project createModel() {
Project project = new Project();
project.setCategory(insertAndAddExpected("category", new Category()));
project.setAuthor(insertAndAddExpected("author", new Actor()));
project.setImpactMethodId(insertAndAddExpected("impactMethodId",
new ImpactMethod()).getId());
String n1 = generateName();
String n2 = generateName();
String n3 = generateName();
Parameter globalUnreferenced = createParameter(n1, "3*3", true);
Parameter globalUnreferenced2 = createParameter(n3, "3*3", true);
// must be inserted manually
globalUnreferenced = Tests.insert(globalUnreferenced);
globalUnreferenced2 = Tests.insert(globalUnreferenced2);
project.getVariants().add(
createProjectVariant(n1, n2, n3, project.getImpactMethodId(),
true));
project.getVariants().add(
createProjectVariant(n1, n2, n3, project.getImpactMethodId(),
false));
project = Tests.insert(project);
for (ProjectVariant variant : project.getVariants()) {
addExpected("productSystem", variant.getProductSystem(),
"variants", ProjectVariant.class, variant.getId());
addExpected("unit", variant.getUnit(), "variants",
ProjectVariant.class, variant.getId());
addExpected("flowPropertyFactor", variant.getFlowPropertyFactor(),
"variants", ProjectVariant.class, variant.getId());
}
return project;
}
private ProjectVariant createProjectVariant(String p1Name, String p2Name,
String p3Name, long methodId, boolean createParameters) {
ProjectVariant variant = new ProjectVariant();
variant.setProductSystem(Tests.insert(new ProductSystem()));
variant.getParameterRedefs().add(
createParameterRedef(p1Name, methodId, createParameters));
// formula with parameter to see if added as reference (unexpected)
variant.getParameterRedefs().add(
createParameterRedef(p2Name, p3Name + "*5", createParameters));
FlowPropertyFactor factor = new FlowPropertyFactor();
factor.setFlowProperty(Tests.insert(new FlowProperty()));
variant.setFlowPropertyFactor(factor);
UnitGroup unitGroup = new UnitGroup();
Unit unit = new Unit();
unit.setName("unit");
unitGroup.getUnits().add(unit);
unitGroup = Tests.insert(unitGroup);
unit = unitGroup.getUnit(unit.getName());
variant.setUnit(unit);
Flow flow = new Flow();
flow.getFlowPropertyFactors().add(factor);
// don't add flow to expected references, just for persisting the factor
flow = Tests.insert(flow);
return variant;
}
private ParameterRedef createParameterRedef(String name,
Object contextOrValue, boolean createParameter) {
ParameterRedef redef = new ParameterRedef();
redef.setName(name);
redef.setValue(1d);
if (contextOrValue instanceof Long) {
redef.setContextType(ModelType.IMPACT_METHOD);
redef.setContextId((long) contextOrValue);
} else if (contextOrValue instanceof String && createParameter)
insertAndAddExpected("parameterRedefs",
createParameter(name, contextOrValue.toString(), true));
return redef;
}
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.PROCESS);
return parameter;
}
}