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<Object> lobject = art.servers.transactionsserver.Shared.controllerDatabase.getTimelessPersistance().get(0).getObject(ScheduledTask.class.getName());
|
|
List<ScheduledTask> lresult = new ArrayList<ScheduledTask>();
|
|
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();
|
}
|
}
|
}
|
}
|