    001    /* ===========================================================
    002     * JFreeChart : a free chart library for the Java(tm) platform
    003     * ===========================================================
    004     *
    005     * (C) Copyright 2000-2011, 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     * [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     * Timeline.java
    029     * -------------
    030     * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.
    031     *
    032     * Original Author:  Bill Kelemen;
    033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
    034     *
    035     * Changes
    036     * -------
    037     * 23-May-2003 : Version 1 (BK);
    038     * 09-Sep-2003 : Changed some method and parameter names (DG);
    039     * 02-Feb-2007 : Removed author tags all over JFreeChart sources (DG);
    040     *
    041     */
    042
    043    package org.jfree.chart.axis;
    044
    045    import java.util.Date;
    046
    047    /**
    048     * An interface that defines the contract for a Timeline.
    049     * <P>
    050     * A Timeline will present a series of values to be used for an axis. Each
    051     * Timeline must provide transformation methods between domain values and
    052     * timeline values. In theory many transformations are possible. This interface
    053     * has been implemented completely in
    054     * {@link org.jfree.chart.axis.SegmentedTimeline}.
    055     * <P>
    056     * A timeline can be used as parameter to a
    057     * {@link org.jfree.chart.axis.DateAxis} to define the values that this axis
    058     * supports. As an example, the {@link org.jfree.chart.axis.SegmentedTimeline}
    059     * implements a timeline formed by segments of equal length (ex. days, hours,
    060     * minutes) where some segments can be included in the timeline and others
    061     * excluded. Therefore timelines like "working days" or "working hours" can be
    062     * created where non-working days or non-working hours respectively can be
    063     * removed from the timeline, and therefore from the axis. This creates a smooth
    064     * plot with equal separation between all included segments.
    065     * <P>
    066     * Because Timelines were created mainly for Date related axis, values are
    067     * represented as longs instead of doubles. In this case, the domain value is
    068     * just the number of milliseconds since January 1, 1970, 00:00:00 GMT as
    069     * defined by the getTime() method of {@link java.util.Date}.
    070     *
    071     * @see org.jfree.chart.axis.SegmentedTimeline
    072     * @see org.jfree.chart.axis.DateAxis
    073     */
    074    public interface Timeline {
    075
    076        /**
    077         * Translates a millisecond (as defined by java.util.Date) into an index
    078         * along this timeline.
    079         *
    080         * @param millisecond  the millisecond.
    081         *
    082         * @return A timeline value.
    083         */
    084        long toTimelineValue(long millisecond);
    085
    086        /**
    087         * Translates a date into a value on this timeline.
    088         *
    089         * @param date  the date.
    090         *
    091         * @return A timeline value
    092         */
    093        long toTimelineValue(Date date);
    094
    095        /**
    096         * Translates a value relative to this timeline into a domain value. The
    097         * domain value obtained by this method is not always the same domain value
    098         * that could have been supplied to
    099         * translateDomainValueToTimelineValue(domainValue).
    100         * This is because the original tranformation may not be complete
    101         * reversable.
    102         *
    103         * @see org.jfree.chart.axis.SegmentedTimeline
    104         *
    105         * @param timelineValue  a timeline value.
    106         *
    107         * @return A domain value.
    108         */
    109        long toMillisecond(long timelineValue);
    110
    111        /**
    112         * Returns <code>true</code> if a value is contained in the timeline values.
    113         *
    114         * @param millisecond  the millisecond.
    115         *
    116         * @return <code>true</code> if value is contained in the timeline and
    117         *         <code>false</code> otherwise.
    118         */
    119        boolean containsDomainValue(long millisecond);
    120
    121        /**
    122         * Returns <code>true</code> if a date is contained in the timeline values.
    123         *
    124         * @param date  the date to verify.
    125         *
    126         * @return <code>true</code> if value is contained in the timeline and
    127         *         <code>false</code>  otherwise.
    128         */
    129        boolean containsDomainValue(Date date);
    130
    131        /**
    132         * Returns <code>true</code> if a range of values are contained in the
    133         * timeline.
    134         *
    135         * @param fromMillisecond  the start of the range to verify.
    136         * @param toMillisecond  the end of the range to verify.
    137         *
    138         * @return <code>true</code> if the range is contained in the timeline or
    139         *         <code>false</code> otherwise
    140         */
    141        boolean containsDomainRange(long fromMillisecond, long toMillisecond);
    142
    143        /**
    144         * Returns <code>true</code> if a range of dates are contained in the
    145         * timeline.
    146         *
    147         * @param fromDate  the start of the range to verify.
    148         * @param toDate  the end of the range to verify.
    149         *
    150         * @return <code>true</code> if the range is contained in the timeline or
    151         *         <code>false</code> otherwise
    152         */
    153        boolean containsDomainRange(Date fromDate, Date toDate);
    154
    155    }