001 /* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-2006, 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 * FixedMillisecond.java 029 * --------------------- 030 * (C) Copyright 2002-2006 by Object Refinery Limited. 031 * 032 * Original Author: David Gilbert (for Object Refinery Limited); 033 * Contributor(s): -; 034 * 035 * $Id: FixedMillisecond.java,v 1.4.2.2 2006/10/06 14:00:13 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 19-Mar-2002 : Version 1, based on original Millisecond implementation (DG); 040 * 24-Jun-2002 : Removed unnecessary imports (DG); 041 * 10-Sep-2002 : Added getSerialIndex() method (DG); 042 * 07-Oct-2002 : Fixed errors reported by Checkstyle (DG); 043 * 13-Mar-2003 : Moved to com.jrefinery.data.time package and implemented 044 * Serializable (DG); 045 * 21-Oct-2003 : Added hashCode() method (DG); 046 * ------------- JFREECHART 1.0.x --------------------------------------------- 047 * 06-Oct-2006 : Added peg() method (DG); 048 * 049 */ 050 051 package org.jfree.data.time; 052 053 import java.io.Serializable; 054 import java.util.Calendar; 055 import java.util.Date; 056 057 /** 058 * Wrapper for a <code>java.util.Date</code> object that allows it to be used 059 * as a {@link RegularTimePeriod}. This class is immutable, which is a 060 * requirement for all {@link RegularTimePeriod} subclasses. 061 */ 062 public class FixedMillisecond extends RegularTimePeriod 063 implements Serializable { 064 065 /** For serialization. */ 066 private static final long serialVersionUID = 7867521484545646931L; 067 068 /** The millisecond. */ 069 private Date time; 070 071 /** 072 * Constructs a millisecond based on the current system time. 073 */ 074 public FixedMillisecond() { 075 this(new Date()); 076 } 077 078 /** 079 * Constructs a millisecond. 080 * 081 * @param millisecond the millisecond (same encoding as java.util.Date). 082 */ 083 public FixedMillisecond(long millisecond) { 084 this(new Date(millisecond)); 085 } 086 087 /** 088 * Constructs a millisecond. 089 * 090 * @param time the time. 091 */ 092 public FixedMillisecond(Date time) { 093 this.time = time; 094 } 095 096 /** 097 * Returns the date/time. 098 * 099 * @return The date/time. 100 */ 101 public Date getTime() { 102 return this.time; 103 } 104 105 /** 106 * This method is overridden to do nothing. 107 * 108 * @param calendar ignored 109 * 110 * @since 1.0.3 111 */ 112 public void peg(Calendar calendar) { 113 // nothing to do 114 } 115 116 /** 117 * Returns the millisecond preceding this one. 118 * 119 * @return The millisecond preceding this one. 120 */ 121 public RegularTimePeriod previous() { 122 RegularTimePeriod result = null; 123 long t = this.time.getTime(); 124 if (t != Long.MIN_VALUE) { 125 result = new FixedMillisecond(t - 1); 126 } 127 return result; 128 } 129 130 /** 131 * Returns the millisecond following this one. 132 * 133 * @return The millisecond following this one. 134 */ 135 public RegularTimePeriod next() { 136 RegularTimePeriod result = null; 137 long t = this.time.getTime(); 138 if (t != Long.MAX_VALUE) { 139 result = new FixedMillisecond(t + 1); 140 } 141 return result; 142 } 143 144 /** 145 * Tests the equality of this object against an arbitrary Object. 146 * 147 * @param object the object to compare 148 * 149 * @return A boolean. 150 */ 151 public boolean equals(Object object) { 152 if (object instanceof FixedMillisecond) { 153 FixedMillisecond m = (FixedMillisecond) object; 154 return this.time.equals(m.getTime()); 155 } 156 else { 157 return false; 158 } 159 160 } 161 162 /** 163 * Returns a hash code for this object instance. 164 * 165 * @return A hash code. 166 */ 167 public int hashCode() { 168 return this.time.hashCode(); 169 } 170 171 /** 172 * Returns an integer indicating the order of this Millisecond object 173 * relative to the specified 174 * object: negative == before, zero == same, positive == after. 175 * 176 * @param o1 the object to compare. 177 * 178 * @return negative == before, zero == same, positive == after. 179 */ 180 public int compareTo(Object o1) { 181 182 int result; 183 long difference; 184 185 // CASE 1 : Comparing to another Second object 186 // ------------------------------------------- 187 if (o1 instanceof FixedMillisecond) { 188 FixedMillisecond t1 = (FixedMillisecond) o1; 189 difference = this.time.getTime() - t1.time.getTime(); 190 if (difference > 0) { 191 result = 1; 192 } 193 else { 194 if (difference < 0) { 195 result = -1; 196 } 197 else { 198 result = 0; 199 } 200 } 201 } 202 203 // CASE 2 : Comparing to another TimePeriod object 204 // ----------------------------------------------- 205 else if (o1 instanceof RegularTimePeriod) { 206 // more difficult case - evaluate later... 207 result = 0; 208 } 209 210 // CASE 3 : Comparing to a non-TimePeriod object 211 // --------------------------------------------- 212 else { 213 // consider time periods to be ordered after general objects 214 result = 1; 215 } 216 217 return result; 218 219 } 220 221 /** 222 * Returns the first millisecond of the time period. 223 * 224 * @return The first millisecond of the time period. 225 */ 226 public long getFirstMillisecond() { 227 return this.time.getTime(); 228 } 229 230 231 /** 232 * Returns the first millisecond of the time period. 233 * 234 * @param calendar the calendar. 235 * 236 * @return The first millisecond of the time period. 237 */ 238 public long getFirstMillisecond(Calendar calendar) { 239 return this.time.getTime(); 240 } 241 242 /** 243 * Returns the last millisecond of the time period. 244 * 245 * @return The last millisecond of the time period. 246 */ 247 public long getLastMillisecond() { 248 return this.time.getTime(); 249 } 250 251 /** 252 * Returns the last millisecond of the time period. 253 * 254 * @param calendar the calendar. 255 * 256 * @return The last millisecond of the time period. 257 */ 258 public long getLastMillisecond(Calendar calendar) { 259 return this.time.getTime(); 260 } 261 262 /** 263 * Returns the millisecond closest to the middle of the time period. 264 * 265 * @return The millisecond closest to the middle of the time period. 266 */ 267 public long getMiddleMillisecond() { 268 return this.time.getTime(); 269 } 270 271 /** 272 * Returns the millisecond closest to the middle of the time period. 273 * 274 * @param calendar the calendar. 275 * 276 * @return The millisecond closest to the middle of the time period. 277 */ 278 public long getMiddleMillisecond(Calendar calendar) { 279 return this.time.getTime(); 280 } 281 282 /** 283 * Returns a serial index number for the millisecond. 284 * 285 * @return The serial index number. 286 */ 287 public long getSerialIndex() { 288 return this.time.getTime(); 289 } 290 291 }