package art.servers.transactionsserver.controller; import art.library.model.transactions.scheduler.ScheduledTask; import art.library.model.transactions.scheduler.ScheduledTaskProcedureInterval; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import art.library.model.transactions.tutor.*; public class ControllerProceduresAuto extends Thread { public long lasttimestampPlsqlUpdate = 0; public ControllerProceduresAuto() { this.setName("Controller procedures"); } public void run() { while (isInterrupted() == false) { try { checkProcedures(); sleep(60000); } catch (Exception e) { } } } public void checkProcedures() { try { List lobject = art.servers.transactionsserver.Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(ScheduledTask.class.getName()); List lresult = new ArrayList(); long timestamp = System.currentTimeMillis(); for (Object object : lobject) { ScheduledTask task = (ScheduledTask)object; if (task.scheduledTask != null) { if (task.scheduledTask.procedure != null) { if (task.scheduledTask.procedure.isManual() == false) { if (task.scheduledTask.specificTimestamp > 0) { if ((timestamp <= task.scheduledTask.specificTimestamp) && (task.scheduledTask.specificTimestamp <= (timestamp + 30000L))) { lresult.add(task); } } else { timestamp = toScheduledTaskTimestamp(timestamp); if ((task.scheduledTask.weekly != null) && (task.scheduledTask.weekly.size() > 0)) { /** * Specific time interval every day of week * Timestamp 0 : Monday, 00:00:00 * Timestamp 86.400.000‬ : Tuesday, 00:00:00 * Null if not used */ for (ScheduledTaskProcedureInterval weekly : task.scheduledTask.weekly) { if ((weekly.from<=timestamp) && (timestamp<=weekly.to)) { lresult.add(task); break; } } } else { ScheduledTaskProcedureInterval interval = null; if (task.scheduledTask.interval != null) interval = task.scheduledTask.interval; if (task.scheduledTask.monthly != null) interval = task.scheduledTask.monthly; if (interval != null) { if ((interval.from<=timestamp) && (timestamp<=interval.to)) { lresult.add(task); break; } } } } } } } } for (ScheduledTask task : lresult) { new ControllerScheduledTask(task).start(); } } catch (Exception e) { } } private long toScheduledTaskTimestamp(long timestamp) { try { long sumvalue = 86400000; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(timestamp); int weekday = calendar.get(Calendar.DAY_OF_WEEK); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); int seconds = calendar.get(Calendar.SECOND); int milliseconds = calendar.get(Calendar.MILLISECOND); long day = 0; if (weekday == Calendar.MONDAY) day = 0; if (weekday == Calendar.TUESDAY) day = 1; if (weekday == Calendar.WEDNESDAY) day = 2; if (weekday == Calendar.THURSDAY) day = 3; if (weekday == Calendar.FRIDAY) day = 4; if (weekday == Calendar.SATURDAY) day = 5; if (weekday == Calendar.SUNDAY) day = 6; long result = day * sumvalue; result = result + (hour*60L*60000L) + (minutes*60000L) + (seconds*1000L) + milliseconds; return(result); } catch (Exception e) { } return(timestamp); } private class ControllerScheduledTask extends Thread { private ScheduledTask task = null; public ControllerScheduledTask (ScheduledTask task) { this.task = task; } public void run() { try { for (ProcedureElementInformation element : task.scheduledTask.procedure.lelement) { } } catch (Exception e) { e.printStackTrace(); } } } }