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.descriptors.FlowDescriptor;
import org.openlca.core.model.descriptors.ImpactCategoryDescriptor;
public class SimpleResultProvider<T extends SimpleResult> extends
BaseResultProvider<T> {
public SimpleResultProvider(T result, EntityCache cache) {
super(result, cache);
}
/**
* Returns the flow results of the inventory results.
*/
public List<FlowResult> getTotalFlowResults() {
FlowIndex index = result.flowIndex;
List<FlowResult> results = new ArrayList<>();
for (FlowDescriptor d : getFlowDescriptors()) {
double val = result.getTotalFlowResult(d.getId());
FlowResult r = new FlowResult();
r.flow = d;
r.input = index.isInput(d.getId());
r.value = adoptFlowResult(val, d.getId());
results.add(r);
}
return results;
}
public FlowResult getTotalFlowResult(FlowDescriptor flow) {
FlowIndex index = result.flowIndex;
long flowId = flow.getId();
FlowResult r = new FlowResult();
r.flow = flow;
r.input = index.isInput(flowId);
double val = result.getTotalFlowResult(flow.getId());
r.value = adoptFlowResult(val, flowId);
return r;
}
/** Switches the sign for input-flows. */
protected double adoptFlowResult(double value, long flowId) {
if (value == 0)
return 0; // avoid -0 in the results
boolean inputFlow = result.flowIndex.isInput(flowId);
return inputFlow ? -value : value;
}
public ImpactResult getTotalImpactResult(ImpactCategoryDescriptor impact) {
double val = result.getTotalImpactResult(impact.getId());
ImpactResult r = new ImpactResult();
r.impactCategory = impact;
r.value = val;
return r;
}
/**
* Returns the impact category results for the given result. In contrast to
* the flow results, entries are also generated for 0-values.
*/
public List<ImpactResult> getTotalImpactResults() {
List<ImpactResult> results = new ArrayList<>();
for (ImpactCategoryDescriptor d : getImpactDescriptors()) {
ImpactResult r = getTotalImpactResult(d);
results.add(r);
}
return results;
}
public double getTotalCostResult() {
return result.totalCostResult;
}
}