package com.num.database; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import android.os.Handler; import com.num.database.datasource.DataSource; import com.num.models.GraphData; import com.num.models.GraphPoint; import com.num.models.Row; public class DatabasePicker { public DataSource datasource; HashMap<String, String> filter = new HashMap<String, String>(); HashMap<String, String> display = new HashMap<String, String>(); String title = "Graph"; String description = ""; Handler handler; float outlierFraction = 0.05f; boolean displayOutlier = true; float[] outlierOptions = { 0.0f, 0.05f, 0.10f, 0.15f, 0.20f }; String[] mode = { "last 24 hours","time of day",""}; public String getChartType() { return datasource.getGraphType(); } public String getYAxisLabel() { return datasource.getYAxisLabel(); } public DatabasePicker() { filter = new HashMap<String, String>(); display = new HashMap<String, String>(); outlierFraction = (float) 0.05; } public boolean isDisplayOutlier() { return displayOutlier; } public void setDisplayOutlier(boolean displayOutlier) { this.displayOutlier = displayOutlier; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title.toUpperCase(); } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public DatabasePicker(DataSource dataSource) { this.datasource = dataSource; } public void filterBy(String field, String displayField) { filterBy(field, "", displayField); } public void updateFilter(String field, String value) { filter.put(field, value); updateGraph(); } public String get(String field) { return filter.get(field); } public void filterBy(String field, String value, String displayField) { filter.put(field, value); display.put(field, displayField); } public GraphData getGraphData() { return new GraphData(datasource.getGraphData(filter)); } public GraphData getGraphDataWithoutOutliers() { GraphData data = getGraphData(outlierFraction); return data; } private GraphData getGraphData(float outlierFraction) { try { GraphData data = getGraphData(); if (displayOutlier) { int originalSize = data.getPoints().size(); int newSize = (int) (data.getPoints().size() * (1 - outlierFraction)); Collections.sort(data.getPoints()); ArrayList<GraphPoint> newPoints = new ArrayList<GraphPoint>(); for (int i = 0; i < newSize; i++) { newPoints.add(data.getPoints().get(i)); } data.setPoints(newPoints); } return data; } catch (Exception e) { e.printStackTrace(); return getGraphData(); } } public ArrayList<Row> getRows() { ArrayList<Row> data = new ArrayList<Row>(); Iterator<String> iter = filter.keySet().iterator(); while (iter.hasNext()) { data.add(new Row(this, iter.next())); } if (displayOutlier) data.add(new Row(this)); return data; } public void setGraphUpdateHandler(Handler updateGraphHandler) { handler = updateGraphHandler; } public void updateGraph() { handler.sendEmptyMessage(0); } public String getDisplayName(String field) { return display.get(field); } public float getOutlierFraction() { return outlierFraction; } public void setOutlierFraction(float outlierFraction) { this.outlierFraction = outlierFraction; } public float[] getOutlierOptions() { return outlierOptions; } public void setOutlierOptions(float[] outlierOptions) { outlierOptions = outlierOptions; } }