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 * StandardTickUnitSource.java 029 * --------------------------- 030 * (C) Copyright 2003-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.DecimalFormat; 041 042/** 043 * A source that can used by the {@link NumberAxis} class to obtain a 044 * suitable {@link TickUnit}. Instances of this class are {@link Serializable} 045 * from version 1.0.7 onwards. Cloning is not supported, because instances 046 * are immutable. 047 */ 048public class StandardTickUnitSource implements TickUnitSource, Serializable { 049 050 /** Constant for log(10.0). */ 051 private static final double LOG_10_VALUE = Math.log(10.0); 052 053 /** 054 * Default constructor. 055 */ 056 public StandardTickUnitSource() { 057 super(); 058 } 059 060 /** 061 * Returns a tick unit that is larger than the supplied unit. 062 * 063 * @param unit the unit ({@code null} not permitted). 064 * 065 * @return A tick unit that is larger than the supplied unit. 066 */ 067 @Override 068 public TickUnit getLargerTickUnit(TickUnit unit) { 069 double x = unit.getSize(); 070 double log = Math.log(x) / LOG_10_VALUE; 071 double higher = Math.ceil(log); 072 return new NumberTickUnit(Math.pow(10, higher), 073 new DecimalFormat("0.0E0")); 074 } 075 076 /** 077 * Returns the tick unit in the collection that is greater than or equal 078 * to (in size) the specified unit. 079 * 080 * @param unit the unit ({@code null} not permitted). 081 * 082 * @return A unit from the collection. 083 */ 084 @Override 085 public TickUnit getCeilingTickUnit(TickUnit unit) { 086 return getLargerTickUnit(unit); 087 } 088 089 /** 090 * Returns the tick unit in the collection that is greater than or equal 091 * to the specified size. 092 * 093 * @param size the size. 094 * 095 * @return A unit from the collection. 096 */ 097 @Override 098 public TickUnit getCeilingTickUnit(double size) { 099 double log = Math.log(size) / LOG_10_VALUE; 100 double higher = Math.ceil(log); 101 return new NumberTickUnit(Math.pow(10, higher), 102 new DecimalFormat("0.0E0")); 103 } 104 105 /** 106 * Tests this instance for equality with an arbitrary object. 107 * 108 * @param obj the object ({@code null} permitted). 109 * 110 * @return A boolean. 111 */ 112 @Override 113 public boolean equals(Object obj) { 114 if (obj == this) { 115 return true; 116 } 117 return (obj instanceof StandardTickUnitSource); 118 } 119 120 /** 121 * Returns a hash code for this instance. 122 * 123 * @return A hash code. 124 */ 125 @Override 126 public int hashCode() { 127 return 0; 128 } 129 130}