package org.openlca.core.math.data_quality; import java.math.RoundingMode; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openlca.core.Tests; import org.openlca.core.database.DQSystemDao; import org.openlca.core.database.FlowDao; import org.openlca.core.database.ProcessDao; import org.openlca.core.database.ProductSystemDao; import org.openlca.core.matrix.LongPair; import org.openlca.core.model.DQIndicator; import org.openlca.core.model.DQScore; import org.openlca.core.model.DQSystem; import org.openlca.core.model.Exchange; import org.openlca.core.model.Flow; import org.openlca.core.model.Process; import org.openlca.core.model.ProductSystem; public class DQDataTest { private DQSystem dqSystem; private ProductSystem pSystem; private Process process1; private Process process2; private Flow flow; @Before public void setup() { createFlow(); createDQSystem(); createProductSystem(); } private void createDQSystem() { dqSystem = new DQSystem(); for (int i = 1; i <= 5; i++) { DQIndicator indicator = new DQIndicator(); indicator.position = i; dqSystem.indicators.add(indicator); for (int j = 1; j <= 5; j++) { DQScore score = new DQScore(); score.position = j; indicator.scores.add(score); } } dqSystem = new DQSystemDao(Tests.getDb()).insert(dqSystem); } private void createProductSystem() { process1 = new ProcessDao(Tests.getDb()).insert(createProcess("(1;2;3;4;5)", "(2;1;4;3;5)")); process2 = new ProcessDao(Tests.getDb()).insert(createProcess("(5;4;3;2;1)", "(4;5;2;3;1)")); pSystem = new ProductSystem(); pSystem.getProcesses().add(process1.getId()); pSystem.getProcesses().add(process2.getId()); pSystem = new ProductSystemDao(Tests.getDb()).insert(pSystem); } private Process createProcess(String dqEntry1, String dqEntry2) { Process process = new Process(); process.dqSystem = dqSystem; process.dqEntry = dqEntry1; process.exchangeDqSystem = dqSystem; Exchange exchange = new Exchange(); exchange.setDqEntry(dqEntry2); exchange.setFlow(flow); process.getExchanges().add(exchange); return process; } private void createFlow() { flow = new Flow(); flow = new FlowDao(Tests.getDb()).insert(flow); } @Test public void test() { DQCalculationSetup setup = new DQCalculationSetup(); setup.productSystemId = pSystem.getId(); setup.aggregationType = AggregationType.WEIGHTED_AVERAGE; setup.roundingMode = RoundingMode.HALF_UP; setup.processingType = ProcessingType.EXCLUDE; setup.exchangeDqSystem = dqSystem; setup.processDqSystem = dqSystem; DQData data = DQData.load(Tests.getDb(), setup, new long[] { flow.getId() }); Assert.assertEquals(dqSystem.getId(), setup.processDqSystem.getId()); Assert.assertEquals(dqSystem.getId(), setup.exchangeDqSystem.getId()); Assert.assertArrayEquals(new double[] { 1, 2, 3, 4, 5 }, data.processData.get(process1.getId()), 0); Assert.assertArrayEquals(new double[] { 5, 4, 3, 2, 1 }, data.processData.get(process2.getId()), 0); Assert.assertArrayEquals(new double[] { 2, 1, 4, 3, 5 }, data.exchangeData.get(new LongPair(process1.getId(), flow.getId())), 0); Assert.assertArrayEquals(new double[] { 4, 5, 2, 3, 1 }, data.exchangeData.get(new LongPair(process2.getId(), flow.getId())), 0); } @After public void shutdown() { new ProductSystemDao(Tests.getDb()).delete(pSystem); new ProcessDao(Tests.getDb()).delete(process1); new ProcessDao(Tests.getDb()).delete(process2); new DQSystemDao(Tests.getDb()).delete(dqSystem); new FlowDao(Tests.getDb()).delete(flow); } }