package org.dcache.pool.repository; import java.io.Serializable; import java.text.DateFormat; public class StickyRecord implements Serializable { private static final long serialVersionUID = 8235126040387514086L; private static final DateFormat df = DateFormat.getInstance(); public static final long NON_EXPIRING = -1; private final String _owner; private final long _expire; public StickyRecord(String owner, long expire) { _owner = owner; _expire = expire; } public boolean isValid() { return isValidAt(System.currentTimeMillis()); } public boolean isValidAt(long time) { return isNonExpiring() || _expire > time; } private boolean isNonExpiring() { return _expire == NON_EXPIRING; } public long expire() { return _expire; } public String owner() { return _owner; } @Override public boolean equals(Object obj) { if( !(obj instanceof StickyRecord)) { return false; } StickyRecord other = (StickyRecord) obj; return other.owner().equals(_owner) && other.expire() == _expire; } @Override public int hashCode() { return _owner.hashCode(); } @Override public synchronized String toString() { String expiryLabel = isNonExpiring() ? "never expires" : "expires " + df.format(_expire); return _owner + " : " + expiryLabel; } }