package org.openlca.io.xls.results.system; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.openlca.core.math.data_quality.DQResult; import org.openlca.core.model.descriptors.FlowDescriptor; import org.openlca.core.results.ContributionResultProvider; import org.openlca.io.xls.results.CellWriter; class InventorySheet { private final CellWriter writer; private final Workbook workbook; private final ContributionResultProvider<?> result; private final DQResult dqResult; private final List<FlowDescriptor> flows; private Sheet sheet; static void write(ResultExport export) { new InventorySheet(export).write(); } private InventorySheet(ResultExport export) { this.writer = export.writer; this.workbook = export.workbook; this.result = export.result; this.dqResult = export.dqResult; this.flows = export.flows; } private void write() { sheet = workbook.createSheet("Inventory"); int col = header(1, true); header(col, false); data(1, filterByInputType(true)); data(col, filterByInputType(false)); } private List<FlowDescriptor> filterByInputType(boolean input) { List<FlowDescriptor> filtered = new ArrayList<>(); for (FlowDescriptor flow : flows) { if (result.isInput(flow) != input) continue; filtered.add(flow); } return filtered; } private int header(int col, boolean input) { writer.headerRow(sheet, 1, col, input ? "Inputs" : "Outputs"); int row = 2; col = writer.headerRow(sheet, row, col, ResultExport.FLOW_HEADER); writer.cell(sheet, row, col++, "Result", true); if (dqResult == null || dqResult.setup.exchangeDqSystem == null) return col + 1; col = writer.dataQualityHeader(sheet, row, col, dqResult.setup.exchangeDqSystem); return col + 1; } private void data(int col, List<FlowDescriptor> flows) { int row = 3; int resultStartCol = ResultExport.FLOW_HEADER.length; for (FlowDescriptor flow : flows) { double value = result.getTotalFlowResult(flow).value; writer.flowRow(sheet, row, col, flow); writer.cell(sheet, row, resultStartCol + col, value); if (dqResult == null) { row++; continue; } RoundingMode rounding = dqResult.setup.roundingMode; int scores = dqResult.setup.exchangeDqSystem.getScoreCount(); double[] quality = dqResult.get(flow); writer.dataQuality(sheet, row++, resultStartCol + col + 1, quality, rounding, scores); } } }