/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.reporting; /** * @deprecated see reportingcompatibility module */ @Deprecated public class NumericRangeColumnClassifier implements TableRowClassifier { private String columnName; private double[] points; // { 15, 40, 80 } means <15, 15-40, 40-80, >80 private String[] labels; private String missingLabel; public NumericRangeColumnClassifier(String columnName, String missingLabel) { this.columnName = columnName; this.missingLabel = missingLabel; points = new double[0]; labels = new String[0]; } public void addCutoff(Number num, String label) { double lastPoint = 0; if (points.length > 0) { lastPoint = points[points.length - 1]; if (num.doubleValue() <= lastPoint) throw new IllegalArgumentException("The cutoff you're trying to add (" + num + ") is <= the last cutoff (" + lastPoint + ")"); } if (label == null) { if (points.length == 0) label = "< " + num; else label = "[" + lastPoint + ", " + num + ")"; } double[] temp = new double[points.length + 1]; for (int i = 0; i < points.length; ++i) temp[i] = points[i]; temp[points.length] = num.doubleValue(); points = temp; String[] temp2 = new String[labels.length + 1]; for (int i = 0; i < labels.length; ++i) temp2[i] = labels[i]; temp2[labels.length] = label; labels = temp2; } public void addLastLabel(String label) { String[] temp = new String[labels.length + 1]; for (int i = 0; i < labels.length; ++i) temp[i] = labels[i]; temp[labels.length] = label; labels = temp; } public String classify(TableRow row) { Object o = row.get(columnName); if (o == null) return missingLabel; double value; if (o instanceof Number) value = ((Number) o).doubleValue(); else value = Double.valueOf(o.toString()); if (o instanceof Number) for (int i = 0; i < points.length; ++i) { if (value < points[i]) return labels[i]; } // TODO: if labels.length == points.length, then add a default last label return labels[points.length]; } }