001    package sale;
002    
003    import sale.events.*;
004    import java.io.Serializable;
005    
006    /**
007             * An object that is to be able to do the time management for your application has to implement this interface.
008     *
009     * <p>It is intended and therefore strongly recommended, that for higher flexibility implementations
010     * of this interface use an object implementing the {@link Time Time} interface to hold the current time and
011     * delegate most of the functionality to that object.</p>
012     *
013     * @author Stephan Gambke
014     * @version 2.0 11/06/1999
015     * @since v2.0
016     */
017    public interface Timer extends Serializable {
018    
019        /**
020         * Set the current time.
021         *
022         * <p>This method should call the equivalent method of the {@link Time Time} object and fire a
023         * <code>timeSet</code> event.</p>
024         *
025         * <p>Of course, <code>IllegalArgumentException</code>s thrown by the {@link Time Time} object must be
026         * forwarded to the calling method.</p>
027         *
028         * @override Always
029         *
030         * @param oTime the time to be set
031         *
032         * @exception IllegalArgumentException if the time does not meet the time object's class or format
033         * requirements
034         *
035         * @see sale.events.TimerListener#onTimeSet
036         */
037        public void setTime(Object oTime) throws IllegalArgumentException;
038    
039        /**
040         * Get the current time.
041         *
042         * <p>This method should call the equivalent method of the {@link Time Time} object.</p>
043         *
044         * @override Always
045         *
046         * @return an Object representing the current time
047         */
048        public Object getTime();
049    
050        /**
051         * Set the interval to be used by {@link #goAhead goAhead()}.
052         *
053         * <p>An <code>IllegalArgumentException</code> is not yet thrown because the new interval is only stored.</p>
054         *
055         * <p>This method should fire an <code>intervalSet</code> event.</p>
056         *
057         * @override Always
058         *
059         * @param oInterval the interval to be set
060         *
061         * @see sale.events.TimerListener#onIntervalSet
062         */
063        public void setInterval(Object oInterval);
064    
065        /**
066         * Get the current interval for calls to {@link #goAhead goAhead()}.
067         *
068         * @override Always
069         *
070         * @return an Object representing the interval
071         */
072        public Object getInterval();
073    
074        /**
075         * Adds a listener for {@link TimerEvent TimerEvents} fired by this timer.
076         *
077         * @override Always
078         *
079         * @param tlListener the listener to be added
080         *
081         * @see sale.events.TimerListener
082         */
083        public void addTimerListener(TimerListener tlListener);
084    
085        /**
086         * Removes a listener for {@link TimerEvent TimerEvents}.
087         *
088         * @override Always
089         *
090         * @param tlListener the listener to be removed
091         *
092         * @see sale.events.TimerListener
093         */
094        public void removeTimerListener(TimerListener tlListener);
095    
096        /**
097         * Increases the current time by an interval.
098         *
099         * <p>This method should call the equivalent method at the {@link Time Time} object passing the interval
100         * set by through {@link #setInterval setInterval()}. If no interval has been set yet, the {@link Time Time}
101         * object's {@link Time#getDefaultInterval getDefaultInterval()} method can be used to get a valid default.</p>
102         *
103         * <p>Additionally, a <code>goneAhead</code> event should be fired.</p>
104         *
105         * <p>This method forwards <code>IllegalArgumentExceptions</code> thrown by the Time object's
106         * {@link Time#goAhead goAhead()} method to the calling method.</p>
107         *
108         * @override Always
109         *
110         * @exception IllegalArgumentException if the interval does not meet the time object's class or format
111         * requirements
112         *
113         * @see sale.events.TimerListener#onGoneAhead
114         */
115        public void goAhead() throws IllegalArgumentException;
116    
117        /**
118         * Create and return a fresh time stamp.
119         *
120         * <p>This method should call the {@link Time Time} object's {@link Time#getTimeStamp getTimeStamp()}
121         * method passing a <code>long</code> value representing the number of the time stamp in this time period.
122         *
123         * @override Always
124         */
125        public Comparable getTimeStamp();
126    }