001 package sale;
002
003 /**
004 * This class is an implementation of the {@link Time Time} interface.
005 *
006 * A Long value is used to represent the time.
007 *
008 * @author Sven Matznick
009 * @version 2.0 13/06/1999
010 * @since v2.0
011 */
012 public class Step extends Object implements Time {
013
014 /**
015 * ID for serialization.
016 */
017 private static final long serialVersionUID = -2380533186623780185L;
018
019 // variables
020 /**
021 * Current time.
022 *
023 * @serial
024 */
025 private Long m_lTime = new Long(0);
026
027 /**
028 * Default interval.
029 *
030 * @serial
031 */
032 private Long m_lDefaultInterval = new Long(1);
033
034 /**
035 * Creates a new step with default starting time 0.
036 */
037 public Step() {
038 } // default time already set
039
040 /**
041 * Creates a new step with the given long value as the starting time.
042 *
043 * @param lInitTime a Long: the initial time.
044 */
045 public Step(Long lInitTime) {
046 m_lTime = lInitTime;
047 }
048
049 /**
050 * Set the given Long as the new time value.
051 *
052 * @override Never
053 *
054 * @param oTime the new time value.
055 *
056 * @exception IllegalArgumentException if the given object is not convertible to a Long
057 */
058 public void setTime(Object oTime) throws IllegalArgumentException {
059 if (!(oTime instanceof Number)) {
060 throw new IllegalArgumentException("Parameter oTime has to be of class Number or a subclass.");
061 }
062 m_lTime = new Long(((Number)oTime).longValue());
063 }
064
065 /**
066 * Get the current time.
067 *
068 * @override Never
069 *
070 * @return a Long representing the current time.
071 */
072 public Object getTime() {
073 return (m_lTime);
074 }
075
076 /**
077 * Increase the time by the given interval.
078 *
079 * @override Never
080 *
081 * @param oInterval the interval to increase time by
082 *
083 * @exception IllegalArgumentException if the given object is not convertible to a Long
084 */
085 public void goAhead(Object oInterval) throws IllegalArgumentException {
086 if (!(oInterval instanceof Number)) {
087 throw new IllegalArgumentException("Parameter oInterval has to be of type Number.");
088 }
089 long lHelp = m_lTime.longValue();
090 long lInterval = ((Number)oInterval).longValue();
091 lHelp += lInterval;
092 m_lTime = new Long(lHelp);
093 }
094
095 /**
096 * Get the default time interval.
097 *
098 * @override Never
099 *
100 * @return a Long describing the default time interval of 1.
101 */
102 public Object getDefaultInterval() {
103 return (m_lDefaultInterval);
104 }
105
106 /**
107 * Create and return a time stamp.
108 *
109 * @override Never
110 *
111 * @param lStampNumber the number of the stamp
112 *
113 * @return a fresh time stamp.
114 */
115 public Comparable<String> getTimeStamp(long lStampNumber) {
116 String sReturn = ("000000000" + m_lTime.toString()).substring(m_lTime.toString().length());
117 sReturn = sReturn + ("000000000" +
118 Long.toString(lStampNumber)).substring(Long.toString(lStampNumber).length());
119
120 return sReturn;
121 }
122
123 /**
124 * Return the current time.
125 *
126 * @override Never
127 *
128 * @return a String describing the current time
129 */
130 public String toString() {
131 return m_lTime.toString();
132 }
133 }