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.

ProjectDao.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2023 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.project;
  21. import java.util.Collections;
  22. import java.util.List;
  23. import java.util.Optional;
  24. import java.util.Set;
  25. import javax.annotation.Nullable;
  26. import org.sonar.api.utils.System2;
  27. import org.sonar.db.Dao;
  28. import org.sonar.db.DbSession;
  29. import org.sonar.db.audit.AuditPersister;
  30. import org.sonar.db.audit.model.ComponentNewValue;
  31. import static org.sonar.db.DatabaseUtils.executeLargeInputs;
  32. public class ProjectDao implements Dao {
  33. private final System2 system2;
  34. private final AuditPersister auditPersister;
  35. public ProjectDao(System2 system2, AuditPersister auditPersister) {
  36. this.system2 = system2;
  37. this.auditPersister = auditPersister;
  38. }
  39. public void insert(DbSession session, ProjectDto project) {
  40. this.insert(session, project, false);
  41. }
  42. public void insert(DbSession session, ProjectDto project, boolean track) {
  43. if (track) {
  44. auditPersister.addComponent(session, new ComponentNewValue(project));
  45. }
  46. mapper(session).insert(project);
  47. }
  48. public Optional<ProjectDto> selectProjectByKey(DbSession session, String key) {
  49. return Optional.ofNullable(mapper(session).selectProjectByKey(key));
  50. }
  51. public Optional<ProjectDto> selectApplicationByKey(DbSession session, String key) {
  52. return Optional.ofNullable(mapper(session).selectApplicationByKey(key));
  53. }
  54. public Optional<ProjectDto> selectProjectOrAppByKey(DbSession session, String key) {
  55. return Optional.ofNullable(mapper(session).selectProjectOrAppByKey(key));
  56. }
  57. public List<ProjectDto> selectAllApplications(DbSession session) {
  58. return mapper(session).selectAllApplications();
  59. }
  60. public List<ProjectDto> selectProjectsByKeys(DbSession session, Set<String> keys) {
  61. if (keys.isEmpty()) {
  62. return Collections.emptyList();
  63. }
  64. return mapper(session).selectProjectsByKeys(keys);
  65. }
  66. public List<ProjectDto> selectApplicationsByKeys(DbSession session, Set<String> keys) {
  67. if (keys.isEmpty()) {
  68. return Collections.emptyList();
  69. }
  70. return executeLargeInputs(keys, partition -> mapper(session).selectApplicationsByKeys(partition));
  71. }
  72. public List<ProjectDto> selectProjects(DbSession session) {
  73. return mapper(session).selectProjects();
  74. }
  75. public Optional<ProjectDto> selectByUuid(DbSession session, String uuid) {
  76. return Optional.ofNullable(mapper(session).selectByUuid(uuid));
  77. }
  78. public List<ProjectDto> selectAll(DbSession session) {
  79. return mapper(session).selectAll();
  80. }
  81. public List<ProjectDto> selectByUuids(DbSession session, Set<String> uuids) {
  82. if (uuids.isEmpty()) {
  83. return Collections.emptyList();
  84. }
  85. return executeLargeInputs(uuids, partition -> mapper(session).selectByUuids(partition));
  86. }
  87. public void updateVisibility(DbSession session, String uuid, boolean isPrivate) {
  88. mapper(session).updateVisibility(uuid, isPrivate, system2.now());
  89. }
  90. public void updateTags(DbSession session, ProjectDto project) {
  91. mapper(session).updateTags(project);
  92. }
  93. public void update(DbSession session, ProjectDto project) {
  94. auditPersister.updateComponent(session, new ComponentNewValue(project));
  95. mapper(session).update(project);
  96. }
  97. private static ProjectMapper mapper(DbSession session) {
  98. return session.getMapper(ProjectMapper.class);
  99. }
  100. public List<String> selectAllProjectUuids(DbSession session) {
  101. return mapper(session).selectAllProjectUuids();
  102. }
  103. public Set<String> selectProjectUuidsAssociatedToDefaultQualityProfileByLanguage(DbSession session, String language) {
  104. Set<String> languageFilters = Set.of(language + "=%", "%;" + language + "=%");
  105. return mapper(session).selectProjectUuidsAssociatedToDefaultQualityProfileByLanguage(languageFilters);
  106. }
  107. public void updateNcloc(DbSession dbSession, String projectUuid, long ncloc) {
  108. mapper(dbSession).updateNcloc(projectUuid, ncloc);
  109. }
  110. public long getNclocSum(DbSession dbSession) {
  111. return getNclocSum(dbSession, null);
  112. }
  113. public long getNclocSum(DbSession dbSession, @Nullable String projectUuidToExclude) {
  114. return Optional.ofNullable(mapper(dbSession).getNclocSum(projectUuidToExclude)).orElse(0L);
  115. }
  116. }