package org.openlca.core.database.references; import java.util.HashMap; import java.util.Map; import org.openlca.core.Tests; import org.openlca.core.model.Actor; import org.openlca.core.model.Category; import org.openlca.core.model.Currency; import org.openlca.core.model.Exchange; import org.openlca.core.model.Flow; import org.openlca.core.model.FlowProperty; import org.openlca.core.model.FlowPropertyFactor; import org.openlca.core.model.Location; import org.openlca.core.model.ModelType; import org.openlca.core.model.Parameter; import org.openlca.core.model.ParameterScope; import org.openlca.core.model.Process; import org.openlca.core.model.ProcessDocumentation; import org.openlca.core.model.SocialAspect; import org.openlca.core.model.SocialIndicator; import org.openlca.core.model.Source; import org.openlca.core.model.Unit; import org.openlca.core.model.UnitGroup; public class ProcessReferenceSearchTest extends BaseReferenceSearchTest { private Map<Long, Process> processes = new HashMap<>(); @Override protected ModelType getModelType() { return ModelType.PROCESS; } @Override protected Process createModel() { Process process = new Process(); process.setCategory(insertAndAddExpected("category", new Category())); process.setLocation(insertAndAddExpected("location", new Location())); String n1 = generateName(); String n2 = generateName(); String n3 = generateName(); String n4 = generateName(); String n5 = generateName(); process.getExchanges().add(createExchange(3d, true)); process.getExchanges().add(createExchange("2*" + n4, false)); process.getParameters().add(createParameter(n1, 3d, false)); process.getParameters() .add(createParameter(n2, n1 + "*2*" + n3, false)); process.socialAspects.add(createSocialAspect()); process.socialAspects.add(createSocialAspect()); process.currency = insertAndAddExpected("currency", new Currency()); process.setDocumentation(createDocumentation()); 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); process = Tests.insert(process); for (Exchange e : process.getExchanges()) { addExpected("flow", e.getFlow(), "exchanges", Exchange.class, e.getId()); addExpected("flowPropertyFactor", e.getFlowPropertyFactor(), "exchanges", Exchange.class, e.getId()); addExpected("unit", e.getUnit(), "exchanges", Exchange.class, e.getId()); Process provider = processes.get(e.getDefaultProviderId()); if (provider != null) addExpected("defaultProviderId", provider, "exchanges", Exchange.class, e.getId()); } for (SocialAspect a : process.socialAspects) { addExpected("indicator", a.indicator, "socialAspects", SocialAspect.class, a.getId()); addExpected("source", a.source, "socialAspects", SocialAspect.class, a.getId()); } ProcessDocumentation doc = process.getDocumentation(); addExpected("dataDocumentor", doc.getDataDocumentor(), "documentation", ProcessDocumentation.class, doc.getId()); addExpected("dataGenerator", doc.getDataGenerator(), "documentation", ProcessDocumentation.class, doc.getId()); addExpected("dataSetOwner", doc.getDataSetOwner(), "documentation", ProcessDocumentation.class, doc.getId()); addExpected("reviewer", doc.getReviewer(), "documentation", ProcessDocumentation.class, doc.getId()); addExpected("publication", doc.getPublication(), "documentation", ProcessDocumentation.class, doc.getId()); for (Source s : process.getDocumentation().getSources()) addExpected("sources", s, "documentation", ProcessDocumentation.class, doc.getId()); return process; } private Exchange createExchange(Object value, boolean provider) { Exchange exchange = new Exchange(); exchange.setFlow(createFlow()); exchange.setFlowPropertyFactor(exchange.getFlow() .getFlowPropertyFactors().get(0)); exchange.setUnit(exchange.getFlowPropertyFactor().getFlowProperty() .getUnitGroup().getUnits().get(0)); boolean formula = value instanceof String; if (formula) exchange.setAmountFormula(value.toString()); else exchange.setAmountValue((double) value); if (provider) { Process process = Tests.insert(new Process()); processes.put(process.getId(), process); exchange.setDefaultProviderId(process.getId()); } return exchange; } 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 SocialAspect createSocialAspect() { SocialAspect aspect = new SocialAspect(); aspect.indicator = Tests.insert(new SocialIndicator()); aspect.source = Tests.insert(new Source()); return aspect; } 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; } private ProcessDocumentation createDocumentation() { ProcessDocumentation doc = new ProcessDocumentation(); doc.setDataDocumentor(Tests.insert(new Actor())); doc.setDataGenerator(Tests.insert(new Actor())); doc.setDataSetOwner(Tests.insert(new Actor())); doc.setReviewer(Tests.insert(new Actor())); doc.setPublication(Tests.insert(new Source())); doc.getSources().add(Tests.insert(new Source())); doc.getSources().add(Tests.insert(new Source())); return doc; } }