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 ); }