00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _DB_TASK_DISPATCHER_H_
00027 #define _DB_TASK_DISPATCHER_H_
00028
00029 #include <string>
00030 #include <map>
00031
00032 #include "plugin.h"
00033
00034 namespace db_planner {
00035 class DatabaseManager;
00036 class TaskRecord;
00037 }
00038
00039 namespace graspit_dbase_tasks {
00040
00041 class DBTask;
00042 class DBTaskDispatcher;
00043
00045 class DBTaskCreator
00046 {
00047 public:
00048 virtual DBTask* operator()(DBTaskDispatcher *disp, db_planner::DatabaseManager *mgr, db_planner::TaskRecord rec) = 0;
00049 };
00050
00052
00072 class DBTaskDispatcher : public Plugin
00073 {
00074 public:
00075 enum Status {READY, NO_TASK, ERROR, RUNNING, DONE};
00076 private:
00078 std::map<std::string,DBTaskCreator*> mTaskCreators;
00079
00081 db_planner::DatabaseManager *mDBMgr;
00082
00084 DBTask *mCurrentTask;
00085
00087 Status mStatus;
00088
00090 int mCompletedTasks;
00091
00093 int mMaxTasks;
00094
00096 int connect(std::string host, int port, std::string username,
00097 std::string password, std::string database);
00098
00099 public:
00100 DBTaskDispatcher();
00101 ~DBTaskDispatcher();
00102
00104 int init(int argc, char **argv);
00105
00107 void checkCurrentTask();
00108
00110 void startNewTask();
00111
00113 void registerTaskCreator(std::string task_name, DBTaskCreator* creator)
00114 {
00115 mTaskCreators[task_name] = creator;
00116 }
00117
00119 int mainLoop();
00120
00122 Status getStatus() const {return mStatus;}
00123 };
00124
00125 }
00126
00127 #endif