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     * DateRange.java
029     * --------------
030     * (C) Copyright 2002-2007, by Object Refinery Limited and Contributors.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   Bill Kelemen;
034     *
035     * Changes
036     * -------
037     * 22-Apr-2002 : Version 1 based on code by Bill Kelemen (DG);
038     * 07-Oct-2002 : Fixed errors reported by Checkstyle (DG);
039     * 23-Sep-2003 : Minor Javadoc update (DG);
040     *
041     */
042    
043    package org.jfree.data.time;
044    
045    import java.io.Serializable;
046    import java.text.DateFormat;
047    import java.util.Date;
048    
049    import org.jfree.data.Range;
050    
051    /**
052     * A range specified in terms of two <code>java.util.Date</code> objects.  
053     * Instances of this class are immutable.
054     */
055    public class DateRange extends Range implements Serializable {
056    
057        /** For serialization. */
058        private static final long serialVersionUID = -4705682568375418157L;
059        
060        /** The lower bound for the range. */
061        private Date lowerDate;
062    
063        /** The upper bound for the range. */
064        private Date upperDate;
065    
066        /**
067         * Default constructor.
068         */
069        public DateRange() {
070            this(new Date(0), new Date(1));
071        }
072    
073        /**
074         * Constructs a new range.
075         *
076         * @param lower  the lower bound (<code>null</code> not permitted).
077         * @param upper  the upper bound (<code>null</code> not permitted).
078         */
079        public DateRange(Date lower, Date upper) {
080    
081            super(lower.getTime(), upper.getTime());
082            this.lowerDate = lower;
083            this.upperDate = upper;
084    
085        }
086    
087        /**
088         * Constructs a new range using two values that will be interpreted as 
089         * "milliseconds since midnight GMT, 1-Jan-1970".
090         *
091         * @param lower  the lower (oldest) date.
092         * @param upper  the upper (most recent) date.
093         */
094        public DateRange(double lower, double upper) {
095            super(lower, upper);
096            this.lowerDate = new Date((long) lower);
097            this.upperDate = new Date((long) upper);
098        }
099    
100        /**
101         * Constructs a new range that is based on another {@link Range}.  The 
102         * other range does not have to be a {@link DateRange}.  If it is not, the 
103         * upper and lower bounds are evaluated as milliseconds since midnight 
104         * GMT, 1-Jan-1970.
105         *
106         * @param other  the other range (<code>null</code> not permitted).
107         */
108        public DateRange(Range other) {
109            this(other.getLowerBound(), other.getUpperBound());
110        }
111    
112        /**
113         * Returns the lower (earlier) date for the range.
114         *
115         * @return The lower date for the range.
116         */
117        public Date getLowerDate() {
118            return this.lowerDate;
119        }
120    
121        /**
122         * Returns the upper (later) date for the range.
123         *
124         * @return The upper date for the range.
125         */
126        public Date getUpperDate() {
127            return this.upperDate;
128        }
129        
130        /**
131         * Returns a string representing the date range (useful for debugging).
132         * 
133         * @return A string representing the date range.
134         */
135        public String toString() {
136            DateFormat df = DateFormat.getDateTimeInstance();
137            return "[" + df.format(this.lowerDate) + " --> " 
138                + df.format(this.upperDate) + "]";
139        }
140    
141    }