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 18KB

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