Source for org.jfree.chart.axis.TickUnit

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * -------------
  28:  * TickUnit.java
  29:  * -------------
  30:  * (C) Copyright 2001-2005, by Object Refinery Limited.
  31:  *
  32:  * Original Author:  David Gilbert (for Object Refinery Limited);
  33:  * Contributor(s):   -;
  34:  *
  35:  * $Id: TickUnit.java,v 1.3.2.2 2005/10/25 20:37:34 mungady Exp $
  36:  *
  37:  * Changes (from 19-Dec-2001)
  38:  * --------------------------
  39:  * 19-Dec-2001 : Added standard header (DG);
  40:  * 01-May-2002 : Changed the unit size from Number to double (DG);
  41:  * 26-Sep-2002 : Fixed errors reported by Checkstyle (DG);
  42:  * 08-Nov-2002 : Moved to new package com.jrefinery.chart.axis (DG);
  43:  * 26-Mar-2003 : Implemented Serializable (DG);
  44:  * 05-Sep-2005 : Implemented hashCode(), thanks to Thomas Morgner (DG);
  45:  *
  46:  */
  47: 
  48: package org.jfree.chart.axis;
  49: 
  50: import java.io.Serializable;
  51: 
  52: /**
  53:  * Base class representing a tick unit.  This determines the spacing of the
  54:  * tick marks on an axis.
  55:  * <P>
  56:  * This class (and any subclasses) should be immutable, the reason being that
  57:  * ORDERED collections of tick units are maintained and if one instance can be
  58:  * changed, it may destroy the order of the collection that it belongs to.
  59:  * In addition, if the implementations are immutable, they can belong to
  60:  * multiple collections.
  61:  *
  62:  * @see ValueAxis
  63:  */
  64: public abstract class TickUnit implements Comparable, Serializable {
  65: 
  66:     /** For serialization. */
  67:     private static final long serialVersionUID = 510179855057013974L;
  68:     
  69:     /** The size of the tick unit. */
  70:     private double size;
  71: 
  72:     /**
  73:      * Constructs a new tick unit.
  74:      *
  75:      * @param size  the tick unit size.
  76:      */
  77:     public TickUnit(double size) {
  78:         this.size = size;
  79:     }
  80: 
  81:     /**
  82:      * Returns the size of the tick unit.
  83:      *
  84:      * @return The size of the tick unit.
  85:      */
  86:     public double getSize() {
  87:         return this.size;
  88:     }
  89: 
  90:     /**
  91:      * Converts the supplied value to a string.
  92:      * <P>
  93:      * Subclasses may implement special formatting by overriding this method.
  94:      *
  95:      * @param value  the data value.
  96:      *
  97:      * @return Value as string.
  98:      */
  99:     public String valueToString(double value) {
 100:         return String.valueOf(value);
 101:     }
 102: 
 103:     /**
 104:      * Compares this tick unit to an arbitrary object.
 105:      *
 106:      * @param object  the object to compare against.
 107:      *
 108:      * @return <code>1</code> if the size of the other object is less than this,
 109:      *      <code>0</code> if both have the same size and <code>-1</code> this
 110:      *      size is less than the others.
 111:      */
 112:     public int compareTo(Object object) {
 113: 
 114:         if (object instanceof TickUnit) {
 115:             TickUnit other = (TickUnit) object;
 116:             if (this.size > other.getSize()) {
 117:                 return 1;
 118:             }
 119:             else if (this.size < other.getSize()) {
 120:                 return -1;
 121:             }
 122:             else {
 123:                 return 0;
 124:             }
 125:         }
 126:         else {
 127:             return -1;
 128:         }
 129: 
 130:     }
 131: 
 132:     /**
 133:      * Tests this unit for equality with another object.
 134:      *
 135:      * @param obj  the object.
 136:      *
 137:      * @return <code>true</code> or <code>false</code>.
 138:      */
 139:     public boolean equals(Object obj) {
 140: 
 141:         if (obj == null) {
 142:             return false;
 143:         }
 144:         if (obj == this) {
 145:             return true;
 146:         }
 147:         if (obj instanceof TickUnit) {
 148:             TickUnit tu = (TickUnit) obj;
 149:             return this.size == tu.size;
 150:         }
 151:         return false;
 152: 
 153:     }
 154: 
 155:     /**
 156:      * Returns a hash code for this instance.
 157:      * 
 158:      * @return A hash code.
 159:      */
 160:     public int hashCode() {
 161:         final long temp = size != +0.0d ? Double.doubleToLongBits(size) : 0L;
 162:         return (int) (temp ^ (temp >>> 32));
 163:     }
 164: 
 165: }