]> source.dussan.org Git - sonarqube.git/blob
e91d1fc8c4a4b8ae2c3c363daee2774522f110a7
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2017 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.server.computation.task.projectanalysis.component;
21
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25 import javax.annotation.CheckForNull;
26 import org.sonar.db.DbClient;
27 import org.sonar.db.DbSession;
28 import org.sonar.db.component.ComponentDto;
29 import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder;
30
31 import static org.sonar.db.component.ComponentDto.removeBranchFromKey;
32
33 /**
34  * Cache a map between component keys and uuids in the merge branch
35  */
36 public class MergeBranchComponentUuids {
37   private final AnalysisMetadataHolder analysisMetadataHolder;
38   private final DbClient dbClient;
39   private Map<String, String> uuidsByKey;
40   private String mergeBranchName;
41
42   public MergeBranchComponentUuids(AnalysisMetadataHolder analysisMetadataHolder, DbClient dbClient) {
43     this.analysisMetadataHolder = analysisMetadataHolder;
44     this.dbClient = dbClient;
45   }
46
47   private void lazyInit() {
48     if (uuidsByKey == null) {
49       String mergeBranchUuid = analysisMetadataHolder.getBranch().get().getMergeBranchUuid().get();
50
51       uuidsByKey = new HashMap<>();
52       try (DbSession dbSession = dbClient.openSession(false)) {
53
54         List<ComponentDto> components = dbClient.componentDao().selectByProjectUuid(mergeBranchUuid, dbSession);
55         for (ComponentDto dto : components) {
56           uuidsByKey.put(dto.getKey(), dto.uuid());
57         }
58
59         mergeBranchName = dbClient.branchDao().selectByUuid(dbSession, mergeBranchUuid).get().getKey();
60       }
61     }
62   }
63
64   public String getMergeBranchName() {
65     lazyInit();
66     return mergeBranchName;
67   }
68
69   @CheckForNull
70   public String getUuid(String dbKey) {
71     lazyInit();
72     String cleanComponentKey = removeBranchFromKey(dbKey);
73     return uuidsByKey.get(cleanComponentKey);
74   }
75 }