/* * Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") * $Id: generic.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.scheduler.taskmanagers.databasedrivers; import com.uwyn.rife.database.queries.*; import com.uwyn.rife.config.RifeConfig; import com.uwyn.rife.database.Datasource; import com.uwyn.rife.database.DbPreparedStatement; import com.uwyn.rife.database.DbPreparedStatementHandler; import com.uwyn.rife.scheduler.Task; import com.uwyn.rife.scheduler.exceptions.TaskManagerException; import com.uwyn.rife.scheduler.taskmanagers.DatabaseTasks; import java.util.Collection; public class generic extends DatabaseTasks { protected CreateSequence mCreateSequenceTask = null; protected CreateTable mCreateTableTask = null; protected DropSequence mDropSequenceTask = null; protected DropTable mDropTableTask = null; protected SequenceValue mGetTaskId = null; protected Insert mAddTask = null; protected Select mGetTask = null; protected Select mGetTasksToProcess = null; protected Select mGetScheduledTasks = null; protected Update mUpdateTask = null; protected Delete mRemoveTask = null; protected Update mActivateTask = null; protected Update mDesactivateTask = null; public generic(Datasource datasource) { super(datasource); mCreateSequenceTask = new CreateSequence(getDatasource()) .name(RifeConfig.Scheduler.getSequenceTask()); mCreateTableTask = new CreateTable(getDatasource()) .table(RifeConfig.Scheduler.getTableTask()) .column("id", int.class, CreateTable.NOTNULL) .column("type", String.class, RifeConfig.Scheduler.getTaskTypeMaximumLength(), CreateTable.NOTNULL) .column("planned", long.class, CreateTable.NOTNULL) .column("frequency", String.class, RifeConfig.Scheduler.getTaskFrequencyMaximumLength(), CreateTable.NULL) .column("busy", boolean.class) .defaultValue("busy", false) .primaryKey(RifeConfig.Scheduler.getTableTask().toUpperCase()+"_PK", "id"); mDropSequenceTask = new DropSequence(getDatasource()) .name(mCreateSequenceTask.getName()); mDropTableTask = new DropTable(getDatasource()) .table(mCreateTableTask.getTable()); mGetTaskId = new SequenceValue(getDatasource()) .name(mCreateSequenceTask.getName()) .next(); mAddTask = new Insert(getDatasource()) .into(mCreateTableTask.getTable()) .fieldParameter("id") .fieldParameter("type") .fieldParameter("planned") .fieldParameter("frequency") .fieldParameter("busy"); mGetTask = new Select(getDatasource()) .from(mCreateTableTask.getTable()) .whereParameter("id", "="); mGetTasksToProcess = new Select(getDatasource()) .from(mCreateTableTask.getTable()) .whereParameter("planned", "<") .whereAnd("busy", "=", false); mGetScheduledTasks = new Select(getDatasource()) .from(mCreateTableTask.getTable()) .whereParameter("planned", ">=") .whereAnd("busy", "=", false); mUpdateTask = new Update(getDatasource()) .table(mCreateTableTask.getTable()) .fieldParameter("type") .fieldParameter("planned") .fieldParameter("frequency") .fieldParameter("busy") .whereParameter("id", "="); mRemoveTask = new Delete(getDatasource()) .from(mCreateTableTask.getTable()) .whereParameter("id", "="); mActivateTask = new Update(getDatasource()) .table(mCreateTableTask.getTable()) .field("busy", true) .whereParameter("id", "="); mDesactivateTask = new Update(getDatasource()) .table(mCreateTableTask.getTable()) .field("busy", false) .whereParameter("id", "="); } public boolean install() throws TaskManagerException { return _install(mCreateSequenceTask, mCreateTableTask); } public boolean remove() throws TaskManagerException { return _remove(mDropSequenceTask, mDropTableTask); } public int addTask(final Task task) throws TaskManagerException { return _addTask(mGetTaskId, mAddTask, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setBean(task); } }, task); } public boolean updateTask(final Task task) throws TaskManagerException { return _updateTask(mUpdateTask, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setBean(task); } }, task); } public Task getTask(int id) throws TaskManagerException { return _getTask(mGetTask, new ProcessTask(), id); } public Collection<Task> getTasksToProcess() throws TaskManagerException { return _getTasksToProcess(mGetTasksToProcess, new ProcessTask()); } public Collection<Task> getScheduledTasks() throws TaskManagerException { return _getScheduledTasks(mGetScheduledTasks, new ProcessTask()); } public boolean removeTask(int id) throws TaskManagerException { return _removeTask(mRemoveTask, id); } public boolean rescheduleTask(Task task, long interval, String frequency) throws TaskManagerException { return _rescheduleTask(task, interval, frequency); } public boolean concludeTask(Task task) throws TaskManagerException { return _concludeTask(task); } public boolean activateTask(int id) throws TaskManagerException { return _activateTask(mActivateTask, id); } public boolean deactivateTask(int id) throws TaskManagerException { return _desactivateTask(mDesactivateTask, id); } }