package com.onaro.util.jfc.grouping; import com.onaro.sanscreen.client.view.tabular.value.NumberValue; import com.onaro.util.jfc.grouping.GroupingModel.State.Row; public class RatioSummarizer implements Summarizer { private int column; private int sourceColumnNominator; private int sourceColumnDenominator; private boolean complement; /** * Defined the format-name used by {@link NumberValue} to format the number. */ private String format; public RatioSummarizer(int column, int sourceColumnNominator, int sourceColumnDenominator, boolean complement, String format) { this.format = format; this.column = column; this.sourceColumnNominator = sourceColumnNominator; this.sourceColumnDenominator = sourceColumnDenominator; this.complement = complement; } public RatioSummarizer(int column, int sourceColumnNominator, int sourceColumnDenominator, boolean complement) { this(column, sourceColumnNominator, sourceColumnDenominator, complement, NumberValue.FORMAT_DEFAULT); } public void updateSummary(Node node) { int childCount = node.getChildCount(); if (childCount > 0) { // for (int childInd = 0 ; childInd < childCount; ++childInd) { // Node child = node.getChild(childInd); // computeValue(child); // } computeValue(node); } } private void computeValue(Node node) { double nominator = getNumberValue(node.getValueAt(sourceColumnNominator)); double denominator = getNumberValue(node.getValueAt(sourceColumnDenominator)); double value = -1.0; if (denominator!=0) { value = nominator/denominator; if (complement) value = 1-value; } if (value >= 0) { NumberValue numberValue = new NumberValue(value, null, format); if (node instanceof Row) { ((Row)node).setOverlayValueAt(column, numberValue); } else { node.setValueAt(column, numberValue); } } } private double getNumberValue(Object value) { if (value instanceof Number) { return ((Number)value).doubleValue(); } else if (value instanceof NumberValue) { return ((NumberValue) value).getNumber(); } return 0; } }