001    package sale;
002    
003    import java.io.Serializable;
004    
005    /**
006     * Interface used by implementations of the {@link Timer Timer} interface.
007     *
008     * <p>So, it is possible for a timer to deal with different time formats.</p>
009     *
010     * @author Stephan Gambke
011     * @version 2.0 11/06/1999
012     * @since v2.0
013     */
014    public interface Time extends Serializable {
015    
016        /**
017         * Set the time.
018         *
019         * @override Always
020         *
021         * @param oTime the time to be set
022         *
023         * @exception IllegalArgumentException if the time does not meet the time object's class or format
024         * requirements
025         */
026        public void setTime(Object oTime) throws IllegalArgumentException;
027    
028        /**
029         * Get the current time.
030         *
031         * <p>The returned object should have a useful {@link java.lang.Object#toString toString()} method, so that
032         * the time can be printed in a meaningful way.</p>
033         *
034         * @override Always
035         *
036         * @return an object representing the current time.
037         */
038        public Object getTime();
039    
040        /**
041         * Increases the current time by the given interval.
042         *
043         * @override Always
044         *
045         * @param oInterval the interval
046         *
047         * @exception IllegalArgumentException if the interval does not meet the time object's class or format
048         * requirements
049         */
050        public void goAhead(Object oInterval) throws IllegalArgumentException;
051    
052        /**
053         * Get the default interval to be used by timers.
054         *
055         * <p>This method is required for calls of {@link Timer#goAhead Timer.goAhead()} before the
056         * {@link Timer#setInterval Timer.setInterval()} method was called.</p>
057         *
058         * @override Always
059         *
060         * @return an object representing a valid interval for this Time object
061         */
062        public Object getDefaultInterval();
063    
064        /**
065         * Create and return a time stamp.
066         *
067         * <p>The returned time stamps have to be in a natural order that is identical to the order of creation.
068         * A good idea would be a String consisting of the time in a correctly sortable format followed by a value
069         * representing the stamp number in this time interval.</p>
070         *
071         * <p>More formally two time stamps <i>a</i> and <i>b</i> must fulfil the following conditions:</p>
072         *
073         * <ul>
074         *   <li><code><i>a</i>.compareTo (<i>b</i>) &lt; 0</code> iff <i>a</i> was obtained before <i>b</i>.</li>
075         *   <li><code><i>a</i>.compareTo (<i>b</i>) &gt; 0</code> iff <i>a</i> was obtained after <i>b</i>.</li>
076         *   <li><code><i>a</i>.compareTo (<i>b</i>) == 0</code> iff <i>a</i> was obtained at the same time as
077         *       <i>b</i>, i.e. iff <code><i>a</i> == <i>b</i></code>.</li>
078         * </ul>
079         *
080         * @override Always
081         *
082         * @param lStampNumber the number of the stamp
083         *
084         * @return a time stamp that fulfills the above conditions.
085         */
086        public Comparable<String> getTimeStamp(long lStampNumber);
087    }