/*
 *  TimeStampedValue, wrapper class for values marked with a timestamp.
 *  Copyright (C) 2004 - 2011 Achim Westermann.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 * 
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 * 
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  If you modify or optimize the code in a useful way please let me know.
 *  Achim.Westermann@gmx.de
 *
 */
package info.monitorenter.util;

import java.util.Map;

/**
 * Simple wrapper around a time in ms and a value Object.
 * 

* * The key is the time in ms and may be used in a Map. * {@link #compareTo(TimeStampedValue)} compares the key. * * @author Achim Westermann * * @version $Revision: 1.11 $ */ public final class TimeStampedValue implements Map.Entry, Comparable { /** * The time stamp (difference, measured in milliseconds, between the current * time and midnight, January 1, 1970 UTC). */ private final long m_key; /** The time stamp value. */ private Object m_value; /** * Creates an instance with the given timestamp key and the value to time * stamp. *

* * @param key * the time stamp (difference, measured in milliseconds, between the * current time and midnight, January 1, 1970 UTC). * * @param value * the value to time stamp. */ public TimeStampedValue(final long key, final Object value) { this.m_key = key; this.m_value = value; } /** * Creates an instance for the given value that is time stamped with the * current time. *

* * @param value * the value to time stamp. * * @see System#currentTimeMillis() */ public TimeStampedValue(final Object value) { this(System.currentTimeMillis(), value); } /** * Compares the given {@link TimeStampedValue} to this by the internal * {@link #getTime()}. *

* * @param obj * the object to compare this to. * * @return see interface. * * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(final TimeStampedValue obj) { int result; if (this.m_key < obj.m_key) { result = -1; } else if (this.m_key == obj.m_key) { result = 0; } else { result = 1; } return result; } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (this.getClass() != obj.getClass()) { return false; } final TimeStampedValue other = (TimeStampedValue) obj; if (this.m_key != other.m_key) { return false; } if (this.m_value == null) { if (other.m_value != null) { return false; } } else if (!this.m_value.equals(other.m_value)) { return false; } return true; } /** * Returns the {@link Long} that marks the time stamp (difference, measured in * milliseconds, between the current time and midnight, January 1, 1970 UTC). * * @return the {@link Long} that marks the time stamp (difference, measured in * milliseconds, between the current time and midnight, January 1, * 1970 UTC). * * @see java.util.Map.Entry#getKey() */ public Long getKey() { return new Long(this.m_key); } /** * Returns the time stamp (difference, measured in milliseconds, between the * current time and midnight, January 1, 1970 UTC). *

* * @return the time stamp (difference, measured in milliseconds, between the * current time and midnight, January 1, 1970 UTC). * */ public long getTime() { return this.m_key; } /** * Returns the time stamp. *

* * @return the time stamp. * * @see java.util.Map.Entry#getValue() */ public Object getValue() { return this.m_value; } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (this.m_key ^ (this.m_key >>> 32)); result = prime * result + ((this.m_value == null) ? 0 : this.m_value.hashCode()); return result; } /** * Returns whether the internal time stamp marks a time in the past or not. *

* * For normal a time stamp represents a value regarded at a time. But it is * also thinkable to mark a value for expiration in the future. This method * returns true if the internal time- representing key is smaller than the * actual time. *

* * @return true if the internal time stamp marks a moment in the past, false * else. */ public boolean isPast() { return this.m_key < System.currentTimeMillis(); } /** * Assigns a different value to the timestamp. *

* * @param value * the new value to be marked with this timestamp. * * @return the previous value that was contained. * * @see java.util.Map.Entry#setValue(java.lang.Object) */ public Object setValue(final Object value) { final Object ret = this.m_value; this.m_value = value; return ret; } }

Ads help maintain this website.