package timeflow.data.analysis; import timeflow.data.analysis.DBAnalysis.*; import timeflow.data.db.*; import timeflow.data.db.filter.*; import java.text.*; public class RangeNumberAnalysis implements FieldAnalysis { String[] description; static DecimalFormat intFormat=new DecimalFormat("###,###,###,###"); static DecimalFormat df=new DecimalFormat("###,###,###,###.##"); @Override public String getName() { return "Value Range"; } @Override public String[] getResultDescription() { return description; } @Override public InterestLevel perform(ActList acts, Field field) { double low=0; double high=0; int numZero=0; double sum=0; int numDefined=0; boolean defined=false; for (Act a: acts) { if (a.get(field)==null) continue; double x=a.getValue(field); numDefined++; sum+=x; if (x==0) numZero++; if (defined) { low=Math.min(low,x); high=Math.max(high, x); } else { defined=true; low=x; high=low; } } if (defined) description= new String[] { "Average: "+df.format((sum/numDefined)), "Lowest: "+df.format(low), "Highest: "+df.format(high), "Number of zero values: "+df.format(numZero) }; else description=new String[] {"No values defined."}; return InterestLevel.INTERESTING; } static String format(double x) { if (Math.abs(x)>.1) { if (Math.round(x)-x<.01) return intFormat.format(x); return df.format(x); } return ""+x; } @Override public boolean canHandleType(Class type) { return type==Double.class; } }