package net.i2p.router;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
* with no warranty of any kind, either expressed or implied.
* It probably won't make your computer catch on fire, or eat
* your children, but it might. Use at your own risk.
*
*/
import java.util.concurrent.atomic.AtomicLong;
/**
* Base implementation of a Job
*
* For use by the router only. Not to be used by applications or plugins.
*/
public abstract class JobImpl implements Job {
private final RouterContext _context;
private final JobTiming _timing;
private static final AtomicLong _idSrc = new AtomicLong();
private final long _id;
//private Exception _addedBy;
private volatile long _madeReadyOn;
public JobImpl(RouterContext context) {
_context = context;
_timing = new JobTiming(context);
_id = _idSrc.incrementAndGet();
}
public long getJobId() { return _id; }
public JobTiming getTiming() { return _timing; }
public final RouterContext getContext() { return _context; }
@Override
public String toString() {
StringBuilder buf = new StringBuilder(128);
buf.append(getClass().getSimpleName());
buf.append(": Job ").append(_id).append(": ").append(getName());
return buf.toString();
}
/**
* @deprecated
* As of 0.8.1, this is a noop, as it just adds classes to the log manager
* class list for no good reason. Logging in jobs is almost always
* set explicitly rather than by class name.
*/
@Deprecated
void addedToQueue() {
//if (_context.logManager().getLog(getClass()).shouldLog(Log.DEBUG))
// _addedBy = new Exception();
}
/**
* @deprecated
* @return null always
*/
@Deprecated
public Exception getAddedBy() { return null; }
public long getMadeReadyOn() { return _madeReadyOn; }
public void madeReady() { _madeReadyOn = _context.clock().now(); }
public void dropped() {}
/**
* Warning - only call this from runJob() or if Job is not already queued,
* or else it gets the job queue out of order.
*/
protected void requeue(long delayMs) {
getTiming().setStartAfter(_context.clock().now() + delayMs);
_context.jobQueue().addJob(this);
}
}