package org.openlca.core.results; import java.util.ArrayList; import java.util.List; import org.openlca.core.database.EntityCache; import org.openlca.core.matrix.FlowIndex; import org.openlca.core.model.ProcessLink; import org.openlca.core.model.descriptors.FlowDescriptor; import org.openlca.core.model.descriptors.ImpactCategoryDescriptor; import org.openlca.core.model.descriptors.ProcessDescriptor; public class FullResultProvider extends ContributionResultProvider<FullResult> { private final LinkContributions linkContributions; private final UpstreamTreeCalculator treeCalculator; public FullResultProvider(FullResult result, EntityCache cache) { super(result, cache); this.linkContributions = result.linkContributions; this.treeCalculator = new UpstreamTreeCalculator(result); } public List<FlowResult> getUpstreamFlowResults(ProcessDescriptor process) { FlowIndex index = result.flowIndex; List<FlowResult> results = new ArrayList<>(); for (FlowDescriptor flow : getFlowDescriptors()) { double val = result.getUpstreamFlowResult(process.getId(), flow.getId()); if (val == 0) continue; val = adoptFlowResult(val, flow.getId()); FlowResult r = new FlowResult(); r.flow = flow; r.input = index.isInput(flow.getId()); r.value = val; results.add(r); } return results; } public FlowResult getUpstreamFlowResult(ProcessDescriptor process, FlowDescriptor flow) { double val = result .getUpstreamFlowResult(process.getId(), flow.getId()); val = adoptFlowResult(val, flow.getId()); FlowResult r = new FlowResult(); r.flow = flow; FlowIndex index = result.flowIndex; r.input = index.isInput(flow.getId()); r.value = val; return r; } public List<ImpactResult> getUpstreamImpactResults(ProcessDescriptor process) { List<ImpactResult> results = new ArrayList<>(); for (ImpactCategoryDescriptor impact : getImpactDescriptors()) results.add(getUpstreamImpactResult(process, impact)); return results; } public ImpactResult getUpstreamImpactResult(ProcessDescriptor process, ImpactCategoryDescriptor impact) { double val = result.getUpstreamImpactResult(process.getId(), impact.getId()); ImpactResult r = new ImpactResult(); r.impactCategory = impact; r.value = val; return r; } public double getUpstreamCostResult(ProcessDescriptor process) { return result.getUpstreamCostResult(process.getId()); } /** * Get the contribution share of the outgoing process product (provider) to * the product input (recipient) of the given link and the calculated * product system. The returned share is a value between 0 and 1. */ public double getLinkShare(ProcessLink link) { return linkContributions.getShare(link); } public UpstreamTree getTree(FlowDescriptor flow) { return treeCalculator.calculate(flow); } public UpstreamTree getTree(ImpactCategoryDescriptor impact) { return treeCalculator.calculate(impact); } public UpstreamTree getCostTree() { return treeCalculator.calculateCosts(); } }