S3PTaskList.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // S3PTaskList.cpp: implementation of the S3PTaskList class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "S3PTaskList.h"
  5. #include "S3PTask.h"
  6. #include "S3PResult.h"
  7. #include "S3PTaskListDAO.h"
  8. #include "S3PDBConnector.h"
  9. #include "S3PDBConnection.h"
  10. #include "regexpr2.h"
  11. using namespace std;
  12. using namespace regex;
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. S3PTaskList::~S3PTaskList()
  17. {
  18. Clear();
  19. }
  20. S3PTaskList::S3PTaskList(std::string cUserCode)
  21. {
  22. m_cUserCode = cUserCode;
  23. if ( Init() > 0 )
  24. {
  25. m_bInit = TRUE;
  26. }
  27. else
  28. {
  29. m_bInit = FALSE;
  30. }
  31. }
  32. int S3PTaskList::Init()
  33. {
  34. S3PDBConnection * pConn = S3PDBConnector::Instance()->ApplyDBConnection(def_ROLEDB);
  35. if (NULL == pConn)
  36. {
  37. return -1;
  38. }
  39. std::string strQuery = "select * from Task_List where ";
  40. ColumnAndValue w;
  41. w["cUserCode"] = m_cUserCode;
  42. S3PRow row("Task_List", &w, pConn);
  43. std::string strWhere;
  44. if (row.GetExpLikeWhereAnd(strWhere)<=0)
  45. {
  46. pConn->Close();
  47. return -2;
  48. }
  49. strQuery += strWhere + " order by iid";
  50. S3PTaskListDAO tasks(pConn);
  51. S3PResult result;
  52. if (tasks.Query(strQuery, result)<=0)
  53. {
  54. pConn->Close();
  55. return -3;
  56. }
  57. for(int i=0; i<result.size(); i++)
  58. {
  59. ColumnAndValue cav = result[i];
  60. S3PTask * pTask = new S3PTask(atoi(cav["iid"].c_str()));
  61. m_list.push_back(pTask);
  62. }
  63. pConn->Close();
  64. return 1;
  65. }
  66. S3PTask * S3PTaskList::operator [] (int i) const
  67. {
  68. if (!m_bInit)
  69. {
  70. return NULL;
  71. }
  72. return m_list[i];
  73. }
  74. int S3PTaskList::Size()
  75. {
  76. if (!m_bInit)
  77. {
  78. return 0;
  79. }
  80. return m_list.size();
  81. }
  82. int S3PTaskList::Reload()
  83. {
  84. Clear();
  85. if ( Init() > 0 )
  86. {
  87. m_bInit = TRUE;
  88. }
  89. else
  90. {
  91. m_bInit = FALSE;
  92. }
  93. return m_bInit;
  94. }
  95. void S3PTaskList::Clear()
  96. {
  97. std::vector<S3PTask*>::iterator i;
  98. for(i=m_list.begin(); i!=m_list.end(); i++)
  99. {
  100. delete (*i);
  101. }
  102. m_list.clear();
  103. }
  104. int S3PTaskList::Add(ColumnAndValue &cav)
  105. {
  106. if (!m_bInit)
  107. {
  108. return 0;
  109. }
  110. S3PTask * pTask = new S3PTask();
  111. if (pTask)
  112. {
  113. subst_results results;
  114. rpattern pat("^\s*cusercode\s*$", NOCASE);
  115. ColumnAndValue::iterator i;
  116. BOOL bFound = FALSE;
  117. for(i=cav.begin(); i!=cav.end() && !bFound; i++)
  118. {
  119. std::string key = i->first;
  120. rpattern_c::backref_type br = pat.match(key, results );
  121. if( br.matched )
  122. {
  123. bFound = TRUE;
  124. cav[key]=m_cUserCode;
  125. }
  126. }
  127. if (!bFound)
  128. {
  129. cav["cUserCode"] = m_cUserCode;
  130. }
  131. if (pTask->Add(cav)>0)
  132. {
  133. m_list.push_back(pTask);
  134. }
  135. else
  136. {
  137. delete pTask;
  138. return -2;
  139. }
  140. }
  141. else
  142. {
  143. if(pTask)
  144. {
  145. delete pTask;
  146. }
  147. return -1;
  148. }
  149. return 1;
  150. }
  151. int S3PTaskList::Delete(int idx)
  152. {
  153. if (!m_bInit)
  154. {
  155. return 0;
  156. }
  157. S3PTask * pTask = m_list[idx];
  158. pTask->Delete();
  159. delete pTask;
  160. m_list.erase(m_list.begin()+idx);
  161. return 1;
  162. }
  163. int S3PTaskList::DeleteAll()
  164. {
  165. if (!m_bInit)
  166. {
  167. return 0;
  168. }
  169. std::vector<S3PTask*>::iterator i;
  170. for(i=m_list.begin(); i!=m_list.end(); i++)
  171. {
  172. S3PTask *pTask = (*i);
  173. pTask->Delete();
  174. delete pTask;
  175. }
  176. m_list.clear();
  177. return 1;
  178. }