001/* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-present, by David Gilbert 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 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 025 * Other names may be trademarks of their respective owners.] 026 * 027 * ------------------- 028 * NumberTickUnit.java 029 * ------------------- 030 * (C) Copyright 2001-present, by David Gilbert. 031 * 032 * Original Author: David Gilbert; 033 * Contributor(s): -; 034 * 035 */ 036 037package org.jfree.chart.axis; 038 039import java.io.Serializable; 040import java.text.NumberFormat; 041import org.jfree.chart.util.Args; 042 043/** 044 * A numerical tick unit. 045 */ 046public class NumberTickUnit extends TickUnit implements Serializable { 047 048 /** For serialization. */ 049 private static final long serialVersionUID = 3849459506627654442L; 050 051 /** A formatter for the tick unit. */ 052 private NumberFormat formatter; 053 054 /** 055 * Creates a new number tick unit. 056 * 057 * @param size the size of the tick unit. 058 */ 059 public NumberTickUnit(double size) { 060 this(size, NumberFormat.getNumberInstance()); 061 } 062 063 /** 064 * Creates a new number tick unit. 065 * 066 * @param size the size of the tick unit. 067 * @param formatter a number formatter for the tick unit ({@code null} 068 * not permitted). 069 */ 070 public NumberTickUnit(double size, NumberFormat formatter) { 071 super(size); 072 Args.nullNotPermitted(formatter, "formatter"); 073 this.formatter = formatter; 074 } 075 076 /** 077 * Creates a new number tick unit. 078 * 079 * @param size the size of the tick unit. 080 * @param formatter a number formatter for the tick unit ({@code null} 081 * not permitted). 082 * @param minorTickCount the number of minor ticks. 083 */ 084 public NumberTickUnit(double size, NumberFormat formatter, 085 int minorTickCount) { 086 super(size, minorTickCount); 087 Args.nullNotPermitted(formatter, "formatter"); 088 this.formatter = formatter; 089 } 090 091 /** 092 * Converts a value to a string. 093 * 094 * @param value the value. 095 * 096 * @return The formatted string. 097 */ 098 @Override 099 public String valueToString(double value) { 100 return this.formatter.format(value); 101 } 102 103 /** 104 * Tests this formatter for equality with an arbitrary object. 105 * 106 * @param obj the object ({@code null} permitted). 107 * 108 * @return A boolean. 109 */ 110 @Override 111 public boolean equals(Object obj) { 112 if (obj == this) { 113 return true; 114 } 115 if (!(obj instanceof NumberTickUnit)) { 116 return false; 117 } 118 if (!super.equals(obj)) { 119 return false; 120 } 121 NumberTickUnit that = (NumberTickUnit) obj; 122 if (!this.formatter.equals(that.formatter)) { 123 return false; 124 } 125 return true; 126 } 127 128 /** 129 * Returns a string representing this unit. 130 * 131 * @return A string. 132 */ 133 @Override 134 public String toString() { 135 return "[NumberTickUnit: size=" + this.valueToString(this.getSize()) 136 + ", formatter=" + this.formatter + "]"; 137 } 138 139 /** 140 * Returns a hash code for this instance. 141 * 142 * @return A hash code. 143 */ 144 @Override 145 public int hashCode() { 146 int result = super.hashCode(); 147 result = 29 * result + (this.formatter != null 148 ? this.formatter.hashCode() : 0); 149 return result; 150 } 151 152}