/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: org_firebirdsql_jdbc_FBDriver.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.scheduler.taskmanagers.databasedrivers; 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.database.queries.CreateTable; import com.uwyn.rife.database.queries.Insert; import com.uwyn.rife.database.queries.Update; import com.uwyn.rife.scheduler.Task; import com.uwyn.rife.scheduler.exceptions.FrequencyException; import com.uwyn.rife.scheduler.exceptions.TaskManagerException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; public class org_firebirdsql_jdbc_FBDriver extends generic { public org_firebirdsql_jdbc_FBDriver(Datasource datasource) { super(datasource); mCreateTableTask = new CreateTable(getDatasource()) .table(RifeConfig.Scheduler.getTableTask()) .column("id", int.class, CreateTable.NOTNULL) .column("tasktype", 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"); mAddTask = new Insert(getDatasource()) .into(mCreateTableTask.getTable()) .fieldParameter("id") .fieldParameter("tasktype") .fieldParameter("planned") .fieldParameter("frequency") .fieldParameter("busy"); mUpdateTask = new Update(getDatasource()) .table(mCreateTableTask.getTable()) .fieldParameter("tasktype") .fieldParameter("planned") .fieldParameter("frequency") .fieldParameter("busy") .whereParameter("id", "="); } public int addTask(final Task task) throws TaskManagerException { return _addTask(mGetTaskId, mAddTask, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setBean(task) .setString("tasktype", task.getType()); } }, task); } public boolean updateTask(final Task task) throws TaskManagerException { return _updateTask(mUpdateTask, new DbPreparedStatementHandler() { public void setParameters(DbPreparedStatement statement) { statement .setBean(task) .setString("tasktype", task.getType()); } }, task); } public Task getTask(int id) throws TaskManagerException { return _getTask(mGetTask, new FirebirdProcessTask(), id); } public Collection<Task> getTasksToProcess() throws TaskManagerException { return _getTasksToProcess(mGetTasksToProcess, new FirebirdProcessTask()); } public Collection<Task> getScheduledTasks() throws TaskManagerException { return _getScheduledTasks(mGetScheduledTasks, new FirebirdProcessTask()); } protected class FirebirdProcessTask extends ProcessTask { public boolean processRow(ResultSet resultSet) throws SQLException { assert resultSet != null; mTask = new Task(); mTask.setId(resultSet.getInt("id")); mTask.setType(resultSet.getString("tasktype")); mTask.setPlanned(resultSet.getLong("planned")); try { mTask.setFrequency(resultSet.getString("frequency")); } catch (FrequencyException e) { throw new SQLException(e.getMessage()); } mTask.setBusy(resultSet.getBoolean("busy")); mTask.setTaskManager(org_firebirdsql_jdbc_FBDriver.this); if (mCollection != null) { mCollection.add(mTask); } return true; } } }