You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DbClient.java 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2021 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.db;
  21. import java.util.IdentityHashMap;
  22. import java.util.Map;
  23. import org.sonar.db.alm.pat.AlmPatDao;
  24. import org.sonar.db.alm.setting.AlmSettingDao;
  25. import org.sonar.db.alm.setting.ProjectAlmSettingDao;
  26. import org.sonar.db.ce.CeActivityDao;
  27. import org.sonar.db.ce.CeQueueDao;
  28. import org.sonar.db.ce.CeScannerContextDao;
  29. import org.sonar.db.ce.CeTaskCharacteristicDao;
  30. import org.sonar.db.ce.CeTaskInputDao;
  31. import org.sonar.db.ce.CeTaskMessageDao;
  32. import org.sonar.db.component.AnalysisPropertiesDao;
  33. import org.sonar.db.component.ApplicationProjectsDao;
  34. import org.sonar.db.component.BranchDao;
  35. import org.sonar.db.component.ComponentDao;
  36. import org.sonar.db.component.ComponentKeyUpdaterDao;
  37. import org.sonar.db.component.ProjectLinkDao;
  38. import org.sonar.db.component.SnapshotDao;
  39. import org.sonar.db.duplication.DuplicationDao;
  40. import org.sonar.db.es.EsQueueDao;
  41. import org.sonar.db.event.EventComponentChangeDao;
  42. import org.sonar.db.event.EventDao;
  43. import org.sonar.db.issue.IssueChangeDao;
  44. import org.sonar.db.issue.IssueDao;
  45. import org.sonar.db.mapping.ProjectMappingsDao;
  46. import org.sonar.db.measure.LiveMeasureDao;
  47. import org.sonar.db.measure.MeasureDao;
  48. import org.sonar.db.measure.custom.CustomMeasureDao;
  49. import org.sonar.db.metric.MetricDao;
  50. import org.sonar.db.newcodeperiod.NewCodePeriodDao;
  51. import org.sonar.db.notification.NotificationQueueDao;
  52. import org.sonar.db.permission.AuthorizationDao;
  53. import org.sonar.db.permission.GroupPermissionDao;
  54. import org.sonar.db.permission.UserPermissionDao;
  55. import org.sonar.db.permission.template.PermissionTemplateCharacteristicDao;
  56. import org.sonar.db.permission.template.PermissionTemplateDao;
  57. import org.sonar.db.plugin.PluginDao;
  58. import org.sonar.db.project.ProjectDao;
  59. import org.sonar.db.property.InternalComponentPropertiesDao;
  60. import org.sonar.db.property.InternalPropertiesDao;
  61. import org.sonar.db.property.PropertiesDao;
  62. import org.sonar.db.purge.PurgeDao;
  63. import org.sonar.db.qualitygate.ProjectQgateAssociationDao;
  64. import org.sonar.db.qualitygate.QualityGateConditionDao;
  65. import org.sonar.db.qualitygate.QualityGateDao;
  66. import org.sonar.db.qualityprofile.ActiveRuleDao;
  67. import org.sonar.db.qualityprofile.DefaultQProfileDao;
  68. import org.sonar.db.qualityprofile.QProfileChangeDao;
  69. import org.sonar.db.qualityprofile.QProfileEditGroupsDao;
  70. import org.sonar.db.qualityprofile.QProfileEditUsersDao;
  71. import org.sonar.db.qualityprofile.QualityProfileDao;
  72. import org.sonar.db.qualityprofile.QualityProfileExportDao;
  73. import org.sonar.db.rule.RuleDao;
  74. import org.sonar.db.rule.RuleRepositoryDao;
  75. import org.sonar.db.schemamigration.SchemaMigrationDao;
  76. import org.sonar.db.source.FileSourceDao;
  77. import org.sonar.db.user.GroupDao;
  78. import org.sonar.db.user.GroupMembershipDao;
  79. import org.sonar.db.user.RoleDao;
  80. import org.sonar.db.user.SamlMessageIdDao;
  81. import org.sonar.db.user.SessionTokensDao;
  82. import org.sonar.db.user.UserDao;
  83. import org.sonar.db.user.UserDismissedMessagesDao;
  84. import org.sonar.db.user.UserGroupDao;
  85. import org.sonar.db.user.UserPropertiesDao;
  86. import org.sonar.db.user.UserTokenDao;
  87. import org.sonar.db.webhook.WebhookDao;
  88. import org.sonar.db.webhook.WebhookDeliveryDao;
  89. public class DbClient {
  90. private final Database database;
  91. private final MyBatis myBatis;
  92. private final DBSessions dbSessions;
  93. private final SchemaMigrationDao schemaMigrationDao;
  94. private final AuthorizationDao authorizationDao;
  95. private final QualityProfileDao qualityProfileDao;
  96. private final QualityProfileExportDao qualityProfileExportDao;
  97. private final PropertiesDao propertiesDao;
  98. private final AlmSettingDao almSettingDao;
  99. private final AlmPatDao almPatDao;
  100. private final ProjectAlmSettingDao projectAlmSettingDao;
  101. private final InternalComponentPropertiesDao internalComponentPropertiesDao;
  102. private final InternalPropertiesDao internalPropertiesDao;
  103. private final SnapshotDao snapshotDao;
  104. private final ComponentDao componentDao;
  105. private final ComponentKeyUpdaterDao componentKeyUpdaterDao;
  106. private final MeasureDao measureDao;
  107. private final UserDao userDao;
  108. private final UserGroupDao userGroupDao;
  109. private final UserTokenDao userTokenDao;
  110. private final UserPropertiesDao userPropertiesDao;
  111. private final GroupMembershipDao groupMembershipDao;
  112. private final RoleDao roleDao;
  113. private final GroupPermissionDao groupPermissionDao;
  114. private final PermissionTemplateDao permissionTemplateDao;
  115. private final PermissionTemplateCharacteristicDao permissionTemplateCharacteristicDao;
  116. private final IssueDao issueDao;
  117. private final IssueChangeDao issueChangeDao;
  118. private final CeActivityDao ceActivityDao;
  119. private final CeQueueDao ceQueueDao;
  120. private final CeTaskInputDao ceTaskInputDao;
  121. private final CeTaskCharacteristicDao ceTaskCharacteristicsDao;
  122. private final CeScannerContextDao ceScannerContextDao;
  123. private final CeTaskMessageDao ceTaskMessageDao;
  124. private final FileSourceDao fileSourceDao;
  125. private final ProjectLinkDao projectLinkDao;
  126. private final EventDao eventDao;
  127. private final EventComponentChangeDao eventComponentChangeDao;
  128. private final PurgeDao purgeDao;
  129. private final QualityGateDao qualityGateDao;
  130. private final QualityGateConditionDao gateConditionDao;
  131. private final ProjectQgateAssociationDao projectQgateAssociationDao;
  132. private final DuplicationDao duplicationDao;
  133. private final NotificationQueueDao notificationQueueDao;
  134. private final CustomMeasureDao customMeasureDao;
  135. private final MetricDao metricDao;
  136. private final GroupDao groupDao;
  137. private final RuleDao ruleDao;
  138. private final RuleRepositoryDao ruleRepositoryDao;
  139. private final ActiveRuleDao activeRuleDao;
  140. private final QProfileChangeDao qProfileChangeDao;
  141. private final UserPermissionDao userPermissionDao;
  142. private final DefaultQProfileDao defaultQProfileDao;
  143. private final EsQueueDao esQueueDao;
  144. private final PluginDao pluginDao;
  145. private final BranchDao branchDao;
  146. private final AnalysisPropertiesDao analysisPropertiesDao;
  147. private final QProfileEditUsersDao qProfileEditUsersDao;
  148. private final QProfileEditGroupsDao qProfileEditGroupsDao;
  149. private final LiveMeasureDao liveMeasureDao;
  150. private final WebhookDao webhookDao;
  151. private final WebhookDeliveryDao webhookDeliveryDao;
  152. private final ProjectMappingsDao projectMappingsDao;
  153. private final NewCodePeriodDao newCodePeriodDao;
  154. private final ProjectDao projectDao;
  155. private final SessionTokensDao sessionTokensDao;
  156. private final SamlMessageIdDao samlMessageIdDao;
  157. private final UserDismissedMessagesDao userDismissedMessagesDao;
  158. private final ApplicationProjectsDao applicationProjectsDao;
  159. public DbClient(Database database, MyBatis myBatis, DBSessions dbSessions, Dao... daos) {
  160. this.database = database;
  161. this.myBatis = myBatis;
  162. this.dbSessions = dbSessions;
  163. Map<Class, Dao> map = new IdentityHashMap<>();
  164. for (Dao dao : daos) {
  165. map.put(dao.getClass(), dao);
  166. }
  167. almSettingDao = getDao(map, AlmSettingDao.class);
  168. almPatDao = getDao(map, AlmPatDao.class);
  169. projectAlmSettingDao = getDao(map, ProjectAlmSettingDao.class);
  170. schemaMigrationDao = getDao(map, SchemaMigrationDao.class);
  171. authorizationDao = getDao(map, AuthorizationDao.class);
  172. qualityProfileDao = getDao(map, QualityProfileDao.class);
  173. qualityProfileExportDao = getDao(map, QualityProfileExportDao.class);
  174. propertiesDao = getDao(map, PropertiesDao.class);
  175. internalPropertiesDao = getDao(map, InternalPropertiesDao.class);
  176. snapshotDao = getDao(map, SnapshotDao.class);
  177. componentDao = getDao(map, ComponentDao.class);
  178. componentKeyUpdaterDao = getDao(map, ComponentKeyUpdaterDao.class);
  179. measureDao = getDao(map, MeasureDao.class);
  180. userDao = getDao(map, UserDao.class);
  181. userGroupDao = getDao(map, UserGroupDao.class);
  182. userTokenDao = getDao(map, UserTokenDao.class);
  183. userPropertiesDao = getDao(map, UserPropertiesDao.class);
  184. groupMembershipDao = getDao(map, GroupMembershipDao.class);
  185. roleDao = getDao(map, RoleDao.class);
  186. groupPermissionDao = getDao(map, GroupPermissionDao.class);
  187. permissionTemplateDao = getDao(map, PermissionTemplateDao.class);
  188. permissionTemplateCharacteristicDao = getDao(map, PermissionTemplateCharacteristicDao.class);
  189. issueDao = getDao(map, IssueDao.class);
  190. issueChangeDao = getDao(map, IssueChangeDao.class);
  191. ceActivityDao = getDao(map, CeActivityDao.class);
  192. ceQueueDao = getDao(map, CeQueueDao.class);
  193. ceTaskInputDao = getDao(map, CeTaskInputDao.class);
  194. ceTaskCharacteristicsDao = getDao(map, CeTaskCharacteristicDao.class);
  195. ceScannerContextDao = getDao(map, CeScannerContextDao.class);
  196. ceTaskMessageDao = getDao(map, CeTaskMessageDao.class);
  197. fileSourceDao = getDao(map, FileSourceDao.class);
  198. projectLinkDao = getDao(map, ProjectLinkDao.class);
  199. eventDao = getDao(map, EventDao.class);
  200. eventComponentChangeDao = getDao(map, EventComponentChangeDao.class);
  201. purgeDao = getDao(map, PurgeDao.class);
  202. qualityGateDao = getDao(map, QualityGateDao.class);
  203. gateConditionDao = getDao(map, QualityGateConditionDao.class);
  204. projectQgateAssociationDao = getDao(map, ProjectQgateAssociationDao.class);
  205. duplicationDao = getDao(map, DuplicationDao.class);
  206. notificationQueueDao = getDao(map, NotificationQueueDao.class);
  207. customMeasureDao = getDao(map, CustomMeasureDao.class);
  208. metricDao = getDao(map, MetricDao.class);
  209. groupDao = getDao(map, GroupDao.class);
  210. ruleDao = getDao(map, RuleDao.class);
  211. ruleRepositoryDao = getDao(map, RuleRepositoryDao.class);
  212. activeRuleDao = getDao(map, ActiveRuleDao.class);
  213. qProfileChangeDao = getDao(map, QProfileChangeDao.class);
  214. userPermissionDao = getDao(map, UserPermissionDao.class);
  215. defaultQProfileDao = getDao(map, DefaultQProfileDao.class);
  216. esQueueDao = getDao(map, EsQueueDao.class);
  217. pluginDao = getDao(map, PluginDao.class);
  218. branchDao = getDao(map, BranchDao.class);
  219. analysisPropertiesDao = getDao(map, AnalysisPropertiesDao.class);
  220. qProfileEditUsersDao = getDao(map, QProfileEditUsersDao.class);
  221. qProfileEditGroupsDao = getDao(map, QProfileEditGroupsDao.class);
  222. liveMeasureDao = getDao(map, LiveMeasureDao.class);
  223. webhookDao = getDao(map, WebhookDao.class);
  224. webhookDeliveryDao = getDao(map, WebhookDeliveryDao.class);
  225. projectMappingsDao = getDao(map, ProjectMappingsDao.class);
  226. internalComponentPropertiesDao = getDao(map, InternalComponentPropertiesDao.class);
  227. newCodePeriodDao = getDao(map, NewCodePeriodDao.class);
  228. projectDao = getDao(map, ProjectDao.class);
  229. sessionTokensDao = getDao(map, SessionTokensDao.class);
  230. samlMessageIdDao = getDao(map, SamlMessageIdDao.class);
  231. userDismissedMessagesDao = getDao(map, UserDismissedMessagesDao.class);
  232. applicationProjectsDao = getDao(map, ApplicationProjectsDao.class);
  233. }
  234. public DbSession openSession(boolean batch) {
  235. return dbSessions.openSession(batch);
  236. }
  237. public Database getDatabase() {
  238. return database;
  239. }
  240. public AlmSettingDao almSettingDao() {
  241. return almSettingDao;
  242. }
  243. public AlmPatDao almPatDao() {
  244. return almPatDao;
  245. }
  246. public ApplicationProjectsDao applicationProjectsDao() {
  247. return applicationProjectsDao;
  248. }
  249. public ProjectAlmSettingDao projectAlmSettingDao() {
  250. return projectAlmSettingDao;
  251. }
  252. public SchemaMigrationDao schemaMigrationDao() {
  253. return schemaMigrationDao;
  254. }
  255. public AuthorizationDao authorizationDao() {
  256. return authorizationDao;
  257. }
  258. public IssueDao issueDao() {
  259. return issueDao;
  260. }
  261. public IssueChangeDao issueChangeDao() {
  262. return issueChangeDao;
  263. }
  264. public QualityProfileDao qualityProfileDao() {
  265. return qualityProfileDao;
  266. }
  267. public QualityProfileExportDao qualityProfileExportDao() {
  268. return qualityProfileExportDao;
  269. }
  270. public PropertiesDao propertiesDao() {
  271. return propertiesDao;
  272. }
  273. public InternalPropertiesDao internalPropertiesDao() {
  274. return internalPropertiesDao;
  275. }
  276. public SnapshotDao snapshotDao() {
  277. return snapshotDao;
  278. }
  279. public AnalysisPropertiesDao analysisPropertiesDao() {
  280. return analysisPropertiesDao;
  281. }
  282. public ComponentDao componentDao() {
  283. return componentDao;
  284. }
  285. public ProjectDao projectDao() {
  286. return projectDao;
  287. }
  288. public ComponentKeyUpdaterDao componentKeyUpdaterDao() {
  289. return componentKeyUpdaterDao;
  290. }
  291. public MeasureDao measureDao() {
  292. return measureDao;
  293. }
  294. public UserDao userDao() {
  295. return userDao;
  296. }
  297. public UserGroupDao userGroupDao() {
  298. return userGroupDao;
  299. }
  300. public UserTokenDao userTokenDao() {
  301. return userTokenDao;
  302. }
  303. public UserPropertiesDao userPropertiesDao() {
  304. return userPropertiesDao;
  305. }
  306. public GroupMembershipDao groupMembershipDao() {
  307. return groupMembershipDao;
  308. }
  309. public RoleDao roleDao() {
  310. return roleDao;
  311. }
  312. public GroupPermissionDao groupPermissionDao() {
  313. return groupPermissionDao;
  314. }
  315. public PermissionTemplateDao permissionTemplateDao() {
  316. return permissionTemplateDao;
  317. }
  318. public PermissionTemplateCharacteristicDao permissionTemplateCharacteristicDao() {
  319. return permissionTemplateCharacteristicDao;
  320. }
  321. public CeActivityDao ceActivityDao() {
  322. return ceActivityDao;
  323. }
  324. public CeQueueDao ceQueueDao() {
  325. return ceQueueDao;
  326. }
  327. public CeTaskInputDao ceTaskInputDao() {
  328. return ceTaskInputDao;
  329. }
  330. public CeTaskCharacteristicDao ceTaskCharacteristicsDao() {
  331. return ceTaskCharacteristicsDao;
  332. }
  333. public CeScannerContextDao ceScannerContextDao() {
  334. return ceScannerContextDao;
  335. }
  336. public CeTaskMessageDao ceTaskMessageDao() {
  337. return ceTaskMessageDao;
  338. }
  339. public FileSourceDao fileSourceDao() {
  340. return fileSourceDao;
  341. }
  342. public ProjectLinkDao projectLinkDao() {
  343. return projectLinkDao;
  344. }
  345. public EventDao eventDao() {
  346. return eventDao;
  347. }
  348. public EventComponentChangeDao eventComponentChangeDao() {
  349. return eventComponentChangeDao;
  350. }
  351. public PurgeDao purgeDao() {
  352. return purgeDao;
  353. }
  354. public QualityGateDao qualityGateDao() {
  355. return qualityGateDao;
  356. }
  357. public QualityGateConditionDao gateConditionDao() {
  358. return gateConditionDao;
  359. }
  360. public ProjectQgateAssociationDao projectQgateAssociationDao() {
  361. return projectQgateAssociationDao;
  362. }
  363. public DuplicationDao duplicationDao() {
  364. return duplicationDao;
  365. }
  366. public NotificationQueueDao notificationQueueDao() {
  367. return notificationQueueDao;
  368. }
  369. public CustomMeasureDao customMeasureDao() {
  370. return customMeasureDao;
  371. }
  372. public MetricDao metricDao() {
  373. return metricDao;
  374. }
  375. public GroupDao groupDao() {
  376. return groupDao;
  377. }
  378. public RuleDao ruleDao() {
  379. return ruleDao;
  380. }
  381. public RuleRepositoryDao ruleRepositoryDao() {
  382. return ruleRepositoryDao;
  383. }
  384. public ActiveRuleDao activeRuleDao() {
  385. return activeRuleDao;
  386. }
  387. public QProfileChangeDao qProfileChangeDao() {
  388. return qProfileChangeDao;
  389. }
  390. public UserPermissionDao userPermissionDao() {
  391. return userPermissionDao;
  392. }
  393. public DefaultQProfileDao defaultQProfileDao() {
  394. return defaultQProfileDao;
  395. }
  396. public EsQueueDao esQueueDao() {
  397. return esQueueDao;
  398. }
  399. public PluginDao pluginDao() {
  400. return pluginDao;
  401. }
  402. public BranchDao branchDao() {
  403. return branchDao;
  404. }
  405. public QProfileEditUsersDao qProfileEditUsersDao() {
  406. return qProfileEditUsersDao;
  407. }
  408. public QProfileEditGroupsDao qProfileEditGroupsDao() {
  409. return qProfileEditGroupsDao;
  410. }
  411. public LiveMeasureDao liveMeasureDao() {
  412. return liveMeasureDao;
  413. }
  414. protected <K extends Dao> K getDao(Map<Class, Dao> map, Class<K> clazz) {
  415. return (K) map.get(clazz);
  416. }
  417. // should be removed. Still used by some old DAO in sonar-server
  418. public MyBatis getMyBatis() {
  419. return myBatis;
  420. }
  421. public WebhookDao webhookDao() {
  422. return webhookDao;
  423. }
  424. public WebhookDeliveryDao webhookDeliveryDao() {
  425. return webhookDeliveryDao;
  426. }
  427. public ProjectMappingsDao projectMappingsDao() {
  428. return projectMappingsDao;
  429. }
  430. public InternalComponentPropertiesDao internalComponentPropertiesDao() {
  431. return internalComponentPropertiesDao;
  432. }
  433. public NewCodePeriodDao newCodePeriodDao() {
  434. return newCodePeriodDao;
  435. }
  436. public SessionTokensDao sessionTokensDao() {
  437. return sessionTokensDao;
  438. }
  439. public SamlMessageIdDao samlMessageIdDao() {
  440. return samlMessageIdDao;
  441. }
  442. public UserDismissedMessagesDao userDismissedMessagesDao() {
  443. return userDismissedMessagesDao;
  444. }
  445. }