/** * */ package org.drools.grid.timer.impl; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.Serializable; import java.util.Date; import java.util.UUID; import org.drools.time.Job; import org.drools.time.JobContext; import org.drools.time.JobHandle; import org.drools.time.Trigger; public class ScheduledJob implements Externalizable { private static final long serialVersionUID = 510l; private String id; private UuidJobHandle jobHandle; private Class jobClass; private Serializable trigger; private Date nextFireTime; private ScheduledJobConfiguration configuration; private Serializable ctx; public ScheduledJob() { } public ScheduledJob(UuidJobHandle jobHandle, final Job job, final JobContext context, final Trigger trigger) { this.jobHandle = jobHandle; this.id = jobHandle.getUuid().toString(); this.jobClass = job.getClass(); this.ctx = (Serializable) context; this.trigger = (Serializable) trigger; this.nextFireTime = trigger.hasNextFireTime(); } /** * @param jhandle * @param timestamp * @param behavior * @param behaviorContext */ public ScheduledJob(UuidJobHandle jobHandle, final Job job, final JobContext context, final Trigger trigger, final ScheduledJobConfiguration conf) { this( jobHandle, job, context, trigger ); this.configuration = conf; } public JobHandle getJobHandle() { if ( this.jobHandle == null ) { // it's transient on persistence, so restore on demand this.jobHandle = new UuidJobHandle( UUID.fromString( this.id ) ); } return this.jobHandle; } public Job getJob() { try { return (Job) jobClass.newInstance(); } catch ( Exception e ) { throw new RuntimeException( e ); } } public String getId() { return this.id; } public Date getNextFireTime() { return this.nextFireTime; } public Trigger getTrigger() { return (Trigger) trigger; } public JobContext getJobContext() { return (JobContext) ctx; } public ScheduledJobConfiguration getConfiguration() { return configuration; } public void setConfiguration(ScheduledJobConfiguration configuration) { this.configuration = configuration; } public String toString() { return "ScheduledJob( job=" + jobClass.getName() + " trigger=" + trigger + " context=" + ctx + " )"; } public void writeExternal(ObjectOutput out) throws IOException { out.writeUTF( this.id ); out.writeUTF( this.jobClass.getCanonicalName() ); out.writeObject( this.trigger ); out.writeLong( this.nextFireTime.getTime() ); out.writeObject( this.ctx ); out.writeObject( this.configuration ); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { this.id = in.readUTF(); this.jobClass = (Class) Class.forName( in.readUTF() ); this.trigger = (Serializable) in.readObject(); this.nextFireTime = new Date( in.readLong() ); this.ctx = (Serializable) in.readObject(); this.configuration = (ScheduledJobConfiguration) in.readObject(); } }