package org.ovirt.engine.core.dal.dbbroker.auditloghandling; import org.ovirt.engine.core.compat.StringHelper; public abstract class TimeoutBase implements java.io.Serializable { private static final long serialVersionUID = -4969034051659487755L; private static java.util.HashMap<String, TimeoutBase> mHandler = new java.util.HashMap<String, TimeoutBase>(); private static Object mLock = new Object(); private boolean mUseTimeout; private java.util.Date mEndTime = new java.util.Date(0); public boolean getUseTimout() { return mUseTimeout; } public void setUseTimout(boolean value) { mUseTimeout = value; } public java.util.Date getEndTime() { return mEndTime; } public void setEndTime(java.util.Date value) { mUseTimeout = true; mEndTime = value; } private String timeoutObjectId = ""; protected abstract String getKey(); private String getkeyForCheck() { return StringHelper.EqOp(getTimeoutObjectId(), "") ? getKey() : String.format("%1$s_%2$s", getKey(), getTimeoutObjectId()); } public String getTimeoutObjectId() { return timeoutObjectId; } public void setTimeoutObjectId(String value) { timeoutObjectId = value; } public boolean getLegal() { boolean returnValue = true; if (getUseTimout()) { synchronized (mLock) { String keyForCheck = getkeyForCheck(); TimeoutBase timeoutBase = mHandler.get(keyForCheck); if (timeoutBase != null) { // not first try. check if timeout passed if (System.currentTimeMillis() < timeoutBase.getEndTime().getTime()) { returnValue = false; } else { // timeout over. Clean data mHandler.remove(keyForCheck); } } else { // first try, add value mHandler.put(keyForCheck, this); } } } return returnValue; } }