001package org.javasimon.callback.timeline;
002
003import org.javasimon.utils.SimonUtils;
004
005/**
006 * Time range and associated data.
007 *
008 * @author gerald
009 */
010public class TimeRange {
011        /**
012         * Beginning of the time range
013         */
014        private final long startTimestamp;
015
016        /**
017         * Ending of the time range
018         */
019        private final long endTimestamp;
020
021        /**
022         * Timestamp of last change
023         */
024        protected long lastTimestamp;
025
026        /**
027         * Main constructor.
028         *
029         * @param startTimestamp Beginning of the time range
030         * @param endTimestamp Ending of the time range
031         */
032        protected TimeRange(long startTimestamp, long endTimestamp) {
033                this.startTimestamp = startTimestamp;
034                this.endTimestamp = endTimestamp;
035        }
036
037        public long getStartTimestamp() {
038                return startTimestamp;
039        }
040
041        public long getEndTimestamp() {
042                return endTimestamp;
043        }
044
045        /**
046         * Indicates whether this time range contains given timestamp.
047         *
048         * @param timestampInMs Timestamp express in milliseconds
049         */
050        public boolean containsTimestamp(long timestampInMs) {
051                return timestampInMs >= startTimestamp && timestampInMs <= endTimestamp;
052        }
053
054        protected StringBuilder toStringBuilder(StringBuilder stringBuilder) {
055                return stringBuilder.append(getClass().getSimpleName())
056                        .append(" start=").append(SimonUtils.presentTimestamp(startTimestamp))
057                        .append(" end=").append(SimonUtils.presentTimestamp(endTimestamp));
058        }
059
060        @Override
061        public String toString() {
062                return toStringBuilder(new StringBuilder()).toString();
063        }
064
065}