public Trigger createTrigger( Activation item, WorkingMemory wm ) {
long timestamp = ((InternalWorkingMemory) wm).getTimerService().getCurrentTime();
String[] calendarNames = item.getRule().getCalendars();
Calendars calendars = ((InternalWorkingMemory) wm).getCalendars();
long timeSinceLastFire = 0;
ScheduledAgendaItem schItem = ( ScheduledAgendaItem ) item;
if ( schItem.getJobHandle() != null ) {
DefaultJobHandle jh = ( DefaultJobHandle) schItem.getJobHandle();
IntervalTrigger preTrig = ( IntervalTrigger ) jh.getTimerJobInstance().getTrigger();
if ( preTrig.hasNextFireTime() != null ) {
timeSinceLastFire = timestamp - preTrig.getLastFireTime().getTime();
}
}
long newDelay = (delay != null ? evalDelay( item, wm ) : 0) - timeSinceLastFire;
if ( newDelay < 0 ) {
newDelay = 0;
}
return new IntervalTrigger( timestamp,
this.startTime,
this.endTime,
this.repeatLimit,
newDelay,
period != null ? evalPeriod( item, wm ) : 0,
calendarNames,
calendars );
}