/* * Copyright: Almende B.V. (2014), Rotterdam, The Netherlands * License: The Apache Software License, Version 2.0 */ package com.almende.dht; import com.fasterxml.jackson.databind.node.ObjectNode; /** * The Class TimedValue. */ public class TimedValue implements Comparable<TimedValue> { private ObjectNode value; private long storedTime; private long expirationDuration; /** * Instantiates a new timed value. */ public TimedValue() {} /** * Instantiates a new timed value. * * @param value * the value */ public TimedValue(ObjectNode value) { this.value = value; this.storedTime = System.currentTimeMillis(); this.expirationDuration = Constants.EXPIRE; } /** * Gets the value. * * @return the value */ public ObjectNode getValue() { return value; } /** * Sets the value. (Only for de-serialization, use store() instead!) * * @param value * the new value */ public void setValue(ObjectNode value) { this.value = value; } /** * Gets the stored time. * * @return the stored time */ public long getStoredTime() { return storedTime; } /** * Sets the stored time. * * @param storedTime * the new stored time */ public void setStoredTime(long storedTime) { this.storedTime = storedTime; } /** * Gets the expiration duration. * * @return the expiration duration */ public long getExpirationDuration() { return expirationDuration; } /** * Sets the expiration duration. * * @param expirationDuration * the new expiration duration */ public void setExpirationDuration(final long expirationDuration) { this.expirationDuration = expirationDuration; } /** * Sets the value and updates the storedTime. * * @param value * the new value * @param storedTime * the stored time (needed to be able to use Hypertime) */ public void store(final ObjectNode value, final long storedTime) { this.storedTime = storedTime; this.value = value; } /** * Store. * * @param value * the value */ public void store(final ObjectNode value) { store(value, System.currentTimeMillis()); } /** * Get remaining expire duration. * * @return the amount of ms until this value is expired. */ public long getTtl() { return this.storedTime + this.expirationDuration - System.currentTimeMillis(); } @Override public boolean equals(final Object o) { if (o == null) { return false; } if (!(o instanceof TimedValue)) { return false; } TimedValue other = (TimedValue) o; if (this.value.equals(other.value)) { return true; } else { return false; } } @Override public int hashCode() { return this.value.hashCode(); } @Override // Newest first public int compareTo(TimedValue o) { return ((storedTime == o.storedTime) ? 0 : (storedTime < o.storedTime ? 1 : -1)); } }