001 /* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jfreechart/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * ---------------------- 028 * BoxAndWhiskerItem.java 029 * ---------------------- 030 * (C) Copyright 2003-2007, by Object Refinery Limited and Contributors. 031 * 032 * Original Author: David Gilbert (for Object Refinery Limited); 033 * Contributor(s): -; 034 * 035 * $Id: BoxAndWhiskerItem.java,v 1.5.2.4 2007/01/17 15:35:00 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 27-Aug-2003 : Version 1 (DG); 040 * 01-Mar-2004 : Added equals() method and implemented Serializable (DG); 041 * ------------- JFREECHART 1.0.x --------------------------------------------- 042 * 15-Nov-2006 : Added toString() method override (DG); 043 * 044 */ 045 046 package org.jfree.data.statistics; 047 048 import java.io.Serializable; 049 import java.util.Collections; 050 import java.util.List; 051 052 import org.jfree.util.ObjectUtilities; 053 054 /** 055 * Represents one data item within a box-and-whisker dataset. Instances of 056 * this class are immutable. 057 */ 058 public class BoxAndWhiskerItem implements Serializable { 059 060 /** For serialization. */ 061 private static final long serialVersionUID = 7329649623148167423L; 062 063 /** The mean. */ 064 private Number mean; 065 066 /** The median. */ 067 private Number median; 068 069 /** The first quarter. */ 070 private Number q1; 071 072 /** The third quarter. */ 073 private Number q3; 074 075 /** The minimum regular value. */ 076 private Number minRegularValue; 077 078 /** The maximum regular value. */ 079 private Number maxRegularValue; 080 081 /** The minimum outlier. */ 082 private Number minOutlier; 083 084 /** The maximum outlier. */ 085 private Number maxOutlier; 086 087 /** The outliers. */ 088 private List outliers; 089 090 /** 091 * Creates a new box-and-whisker item. 092 * 093 * @param mean the mean (<code>null</code> permitted). 094 * @param median the median (<code>null</code> permitted). 095 * @param q1 the first quartile (<code>null</code> permitted). 096 * @param q3 the third quartile (<code>null</code> permitted). 097 * @param minRegularValue the minimum regular value (<code>null</code> 098 * permitted). 099 * @param maxRegularValue the maximum regular value (<code>null</code> 100 * permitted). 101 * @param minOutlier the minimum outlier (<code>null</code> permitted). 102 * @param maxOutlier the maximum outlier (<code>null</code> permitted). 103 * @param outliers the outliers (<code>null</code> permitted). 104 */ 105 public BoxAndWhiskerItem(Number mean, 106 Number median, 107 Number q1, 108 Number q3, 109 Number minRegularValue, 110 Number maxRegularValue, 111 Number minOutlier, 112 Number maxOutlier, 113 List outliers) { 114 115 this.mean = mean; 116 this.median = median; 117 this.q1 = q1; 118 this.q3 = q3; 119 this.minRegularValue = minRegularValue; 120 this.maxRegularValue = maxRegularValue; 121 this.minOutlier = minOutlier; 122 this.maxOutlier = maxOutlier; 123 this.outliers = outliers; 124 125 } 126 127 /** 128 * Returns the mean. 129 * 130 * @return The mean (possibly <code>null</code>). 131 */ 132 public Number getMean() { 133 return this.mean; 134 } 135 136 /** 137 * Returns the median. 138 * 139 * @return The median (possibly <code>null</code>). 140 */ 141 public Number getMedian() { 142 return this.median; 143 } 144 145 /** 146 * Returns the first quartile. 147 * 148 * @return The first quartile (possibly <code>null</code>). 149 */ 150 public Number getQ1() { 151 return this.q1; 152 } 153 154 /** 155 * Returns the third quartile. 156 * 157 * @return The third quartile (possibly <code>null</code>). 158 */ 159 public Number getQ3() { 160 return this.q3; 161 } 162 163 /** 164 * Returns the minimum regular value. 165 * 166 * @return The minimum regular value (possibly <code>null</code>). 167 */ 168 public Number getMinRegularValue() { 169 return this.minRegularValue; 170 } 171 172 /** 173 * Returns the maximum regular value. 174 * 175 * @return The maximum regular value (possibly <code>null</code>). 176 */ 177 public Number getMaxRegularValue() { 178 return this.maxRegularValue; 179 } 180 181 /** 182 * Returns the minimum outlier. 183 * 184 * @return The minimum outlier (possibly <code>null</code>). 185 */ 186 public Number getMinOutlier() { 187 return this.minOutlier; 188 } 189 190 /** 191 * Returns the maximum outlier. 192 * 193 * @return The maximum outlier (possibly <code>null</code>). 194 */ 195 public Number getMaxOutlier() { 196 return this.maxOutlier; 197 } 198 199 /** 200 * Returns a list of outliers. 201 * 202 * @return A list of outliers (possibly <code>null</code>). 203 */ 204 public List getOutliers() { 205 if (this.outliers == null) { 206 return null; 207 } 208 return Collections.unmodifiableList(this.outliers); 209 } 210 211 /** 212 * Returns a string representation of this instance, primarily for 213 * debugging purposes. 214 * 215 * @return A string representation of this instance. 216 */ 217 public String toString() { 218 return super.toString() + "[mean=" + this.mean + ",median=" 219 + this.median + ",q1=" + this.q1 + ",q3=" + this.q3 + "]"; 220 } 221 222 /** 223 * Tests this object for equality with an arbitrary object. 224 * 225 * @param obj the object to test against (<code>null</code> permitted). 226 * 227 * @return A boolean. 228 */ 229 public boolean equals(Object obj) { 230 231 if (obj == this) { 232 return true; 233 } 234 if (!(obj instanceof BoxAndWhiskerItem)) { 235 return false; 236 } 237 BoxAndWhiskerItem that = (BoxAndWhiskerItem) obj; 238 if (!ObjectUtilities.equal(this.mean, that.mean)) { 239 return false; 240 } 241 if (!ObjectUtilities.equal(this.median, that.median)) { 242 return false; 243 } 244 if (!ObjectUtilities.equal(this.q1, that.q1)) { 245 return false; 246 } 247 if (!ObjectUtilities.equal(this.q3, that.q3)) { 248 return false; 249 } 250 if (!ObjectUtilities.equal(this.minRegularValue, 251 that.minRegularValue)) { 252 return false; 253 } 254 if (!ObjectUtilities.equal(this.maxRegularValue, 255 that.maxRegularValue)) { 256 return false; 257 } 258 if (!ObjectUtilities.equal(this.minOutlier, that.minOutlier)) { 259 return false; 260 } 261 if (!ObjectUtilities.equal(this.maxOutlier, that.maxOutlier)) { 262 return false; 263 } 264 if (!ObjectUtilities.equal(this.outliers, that.outliers)) { 265 return false; 266 } 267 return true; 268 } 269 270 }