/** * Generates the runs of the scheduled action which have been missed since the file was last * opened. * * @param scheduledAction Scheduled action for transaction * @return Number of transaction instances generated */ private int generateMissedScheduledTransactions(ScheduledAction scheduledAction) { // if this scheduled action should not be run for any reason, return immediately if (scheduledAction.getActionType() != ScheduledAction.ActionType.TRANSACTION || !scheduledAction.isEnabled() || !scheduledAction.shouldAutoCreate() || (scheduledAction.getEndTime() > 0 && scheduledAction.getEndTime() > System.currentTimeMillis()) || (scheduledAction.getTotalFrequency() > 0 && scheduledAction.getExecutionCount() >= scheduledAction.getTotalFrequency())) { return 0; } long lastRuntime = scheduledAction.getStartTime(); if (scheduledAction.getLastRun() > 0) { lastRuntime = scheduledAction.getLastRun(); } int generatedTransactionCount = 0; long period = scheduledAction.getPeriod(); final String actionUID = scheduledAction.getActionUID(); while ((lastRuntime = lastRuntime + period) <= System.currentTimeMillis()) { for (Transaction templateTransaction : mTemplateTransactions) { if (templateTransaction.getUID().equals(actionUID)) { Transaction transaction = new Transaction(templateTransaction, true); transaction.setTime(lastRuntime); transaction.setScheduledActionUID(scheduledAction.getUID()); mTransactionList.add(transaction); scheduledAction.setExecutionCount(scheduledAction.getExecutionCount() + 1); ++generatedTransactionCount; break; } } } scheduledAction.setLastRun(lastRuntime); return generatedTransactionCount; }