package org.openlca.core.database.usage; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openlca.core.Tests; import org.openlca.core.database.IDatabase; 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.Process; import org.openlca.core.model.ProductSystem; import org.openlca.core.model.Project; import org.openlca.core.model.ProjectVariant; import org.openlca.core.model.descriptors.BaseDescriptor; import org.openlca.core.model.descriptors.CategorizedDescriptor; import org.openlca.core.model.descriptors.Descriptors; import org.openlca.core.model.descriptors.ParameterDescriptor; public class ParameterUseSearchTest { private IDatabase database = Tests.getDb(); private IUseSearch<ParameterDescriptor> search; @Before public void setup() { search = IUseSearch.FACTORY.createFor(ModelType.PARAMETER, database); } @Test public void testFindNoUsage() { Parameter parameter = new Parameter(); parameter.setName("testNoUsage"); Tests.insert(parameter); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(parameter)); Assert.assertNotNull(models); Assert.assertTrue(models.isEmpty()); Tests.delete(parameter); } @Test public void testFindGlobal() { Parameter p1 = createParameter("p1", 5d, ParameterScope.GLOBAL); Parameter p2 = createParameter("p2", 5d, ParameterScope.GLOBAL); Parameter p3 = createParameter("p3", "5*3", ParameterScope.GLOBAL); Parameter p4 = createParameter("p4", "5*p1", ParameterScope.GLOBAL); Tests.insert(p1); Tests.insert(p2); Tests.insert(p3); Tests.insert(p4); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(p1)); Tests.delete(p1); Tests.delete(p2); Tests.delete(p3); Tests.delete(p4); BaseDescriptor expected = Descriptors.toDescriptor(p4); Assert.assertEquals(1, models.size()); Assert.assertEquals(expected, models.get(0)); } @Test public void testFindInProcess() { Parameter p1 = createParameter("p1", 5d, ParameterScope.GLOBAL); Parameter p2 = createParameter("p2", "5*p1", ParameterScope.PROCESS); Process process = new Process(); process.getParameters().add(p2); Tests.insert(p1); Tests.insert(process); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(p1)); Tests.delete(p1); Tests.delete(process); BaseDescriptor expected = Descriptors.toDescriptor(process); Assert.assertEquals(1, models.size()); Assert.assertEquals(expected, models.get(0)); } @Test public void testFindInImpactMethod() { Parameter p1 = createParameter("p1", 5d, ParameterScope.GLOBAL); Parameter p2 = createParameter("p2", "5*p1", ParameterScope.IMPACT_METHOD); ImpactMethod method = new ImpactMethod(); method.getParameters().add(p2); Tests.insert(p1); Tests.insert(method); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(p1)); Tests.delete(p1); Tests.delete(method); BaseDescriptor expected = Descriptors.toDescriptor(method); Assert.assertEquals(1, models.size()); Assert.assertEquals(expected, models.get(0)); } @Test public void testFindNotInProcess() { Parameter p = createParameter("p1", 5d, ParameterScope.GLOBAL); Parameter p1 = createParameter("p1", 5d, ParameterScope.PROCESS); Parameter p2 = createParameter("p2", "5*p1", ParameterScope.PROCESS); Process process = new Process(); process.getParameters().add(p1); process.getParameters().add(p2); Tests.insert(p); Tests.insert(process); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(p)); Tests.delete(p); Tests.delete(process); Assert.assertEquals(0, models.size()); } @Test public void testFindNotInImpactMethod() { Parameter p = createParameter("p1", 5d, ParameterScope.GLOBAL); Parameter p1 = createParameter("p1", 5d, ParameterScope.IMPACT_METHOD); Parameter p2 = createParameter("p2", "5*p1", ParameterScope.IMPACT_METHOD); ImpactMethod method = new ImpactMethod(); method.getParameters().add(p1); method.getParameters().add(p2); Tests.insert(p); Tests.insert(method); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(p)); Tests.delete(p); Tests.delete(method); Assert.assertEquals(0, models.size()); } @Test public void testFindProductSystemRedef() { Parameter parameter = createParameter("p1", 5d, ParameterScope.GLOBAL); Tests.insert(parameter); ProductSystem system = new ProductSystem(); system.getParameterRedefs().add(createParameterRedef("p1")); Tests.insert(system); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(parameter)); Tests.delete(parameter); Tests.delete(system); BaseDescriptor expected = Descriptors.toDescriptor(system); Assert.assertEquals(1, models.size()); Assert.assertEquals(expected, models.get(0)); } @Test public void testFindProjectRedef() { Parameter parameter = createParameter("p1", 5d, ParameterScope.GLOBAL); Tests.insert(parameter); Project project = new Project(); ProjectVariant variant = new ProjectVariant(); variant.getParameterRedefs().add(createParameterRedef("p1")); project.getVariants().add(variant); Tests.insert(project); List<CategorizedDescriptor> models = search.findUses(Descriptors .toDescriptor(parameter)); Tests.delete(parameter); Tests.delete(project); BaseDescriptor expected = Descriptors.toDescriptor(project); Assert.assertEquals(1, models.size()); Assert.assertEquals(expected, models.get(0)); } private Parameter createParameter(String name, Object value, ParameterScope scope) { 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); parameter.setScope(scope); return parameter; } private ParameterRedef createParameterRedef(String name) { ParameterRedef redef = new ParameterRedef(); redef.setName(name); redef.setValue(5d); return redef; } }