]> source.dussan.org Git - sonarqube.git/blob
5a6b5dd74b2ea01feceb67427df2991fe56ff3ea
[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.analysis;
21
22 import com.google.common.collect.ImmutableMap;
23 import java.util.Map;
24 import java.util.Optional;
25 import javax.annotation.CheckForNull;
26 import javax.annotation.Nullable;
27
28 import org.sonar.db.component.BranchType;
29 import org.sonar.server.computation.util.InitializedProperty;
30 import org.sonar.server.qualityprofile.QualityProfile;
31
32 import static com.google.common.base.Preconditions.checkState;
33 import static java.util.Objects.requireNonNull;
34
35 public class AnalysisMetadataHolderImpl implements MutableAnalysisMetadataHolder {
36
37   private final InitializedProperty<Organization> organization = new InitializedProperty<>();
38   private final InitializedProperty<String> uuid = new InitializedProperty<>();
39   private final InitializedProperty<Long> analysisDate = new InitializedProperty<>();
40   private final InitializedProperty<Boolean> incrementalAnalysis = new InitializedProperty<>();
41   private final InitializedProperty<Analysis> baseProjectSnapshot = new InitializedProperty<>();
42   private final InitializedProperty<Boolean> crossProjectDuplicationEnabled = new InitializedProperty<>();
43   private final InitializedProperty<Branch> branch = new InitializedProperty<>();
44   private final InitializedProperty<Project> project = new InitializedProperty<>();
45   private final InitializedProperty<Integer> rootComponentRef = new InitializedProperty<>();
46   private final InitializedProperty<Map<String, QualityProfile>> qProfilesPerLanguage = new InitializedProperty<>();
47   private final InitializedProperty<Map<String, ScannerPlugin>> pluginsByKey = new InitializedProperty<>();
48
49   @Override
50   public MutableAnalysisMetadataHolder setOrganization(Organization organization) {
51     checkState(!this.organization.isInitialized(), "Organization has already been set");
52     requireNonNull(organization, "Organization can't be null");
53     this.organization.setProperty(organization);
54     return this;
55   }
56
57   @Override
58   public Organization getOrganization() {
59     checkState(organization.isInitialized(), "Organization has not been set");
60     return organization.getProperty();
61   }
62
63   @Override
64   public MutableAnalysisMetadataHolder setUuid(String s) {
65     checkState(!uuid.isInitialized(), "Analysis uuid has already been set");
66     requireNonNull(s, "Analysis uuid can't be null");
67     this.uuid.setProperty(s);
68     return this;
69   }
70
71   @Override
72   public String getUuid() {
73     checkState(uuid.isInitialized(), "Analysis uuid has not been set");
74     return this.uuid.getProperty();
75   }
76
77   @Override
78   public MutableAnalysisMetadataHolder setAnalysisDate(long date) {
79     checkState(!analysisDate.isInitialized(), "Analysis date has already been set");
80     this.analysisDate.setProperty(date);
81     return this;
82   }
83
84   @Override
85   public long getAnalysisDate() {
86     checkState(analysisDate.isInitialized(), "Analysis date has not been set");
87     return this.analysisDate.getProperty();
88   }
89
90   @Override
91   public boolean hasAnalysisDateBeenSet() {
92     return analysisDate.isInitialized();
93   }
94
95   @Override
96   public boolean isFirstAnalysis() {
97     return getBaseAnalysis() == null;
98   }
99
100   @Override
101   public MutableAnalysisMetadataHolder setIncrementalAnalysis(boolean isIncrementalAnalysis) {
102     checkState(!incrementalAnalysis.isInitialized(), "Incremental analysis flag has already been set");
103     this.incrementalAnalysis.setProperty(isIncrementalAnalysis);
104     return this;
105   }
106
107   @Override
108   public boolean isIncrementalAnalysis() {
109     checkState(incrementalAnalysis.isInitialized(), "Incremental analysis flag has not been set");
110     return this.incrementalAnalysis.getProperty();
111   }
112
113   @Override
114   public MutableAnalysisMetadataHolder setBaseAnalysis(@Nullable Analysis baseAnalysis) {
115     checkState(!this.baseProjectSnapshot.isInitialized(), "Base project snapshot has already been set");
116     this.baseProjectSnapshot.setProperty(baseAnalysis);
117     return this;
118   }
119
120   @Override
121   @CheckForNull
122   public Analysis getBaseAnalysis() {
123     checkState(baseProjectSnapshot.isInitialized(), "Base project snapshot has not been set");
124     return baseProjectSnapshot.getProperty();
125   }
126
127   @Override
128   public MutableAnalysisMetadataHolder setCrossProjectDuplicationEnabled(boolean isCrossProjectDuplicationEnabled) {
129     checkState(!this.crossProjectDuplicationEnabled.isInitialized(), "Cross project duplication flag has already been set");
130     this.crossProjectDuplicationEnabled.setProperty(isCrossProjectDuplicationEnabled);
131     return this;
132   }
133
134   @Override
135   public boolean isCrossProjectDuplicationEnabled() {
136     checkState(crossProjectDuplicationEnabled.isInitialized(), "Cross project duplication flag has not been set");
137     return crossProjectDuplicationEnabled.getProperty();
138   }
139
140   @Override
141   public MutableAnalysisMetadataHolder setBranch(@Nullable Branch branch) {
142     checkState(!this.branch.isInitialized(), "Branch has already been set");
143     this.branch.setProperty(branch);
144     return this;
145   }
146
147   @Override
148   public Optional<Branch> getBranch() {
149     checkState(branch.isInitialized(), "Branch has not been set");
150     return Optional.ofNullable(branch.getProperty());
151   }
152
153   @Override
154   public MutableAnalysisMetadataHolder setProject(Project project) {
155     checkState(!this.project.isInitialized(), "Project has already been set");
156     this.project.setProperty(project);
157     return this;
158   }
159
160   @Override
161   public Project getProject() {
162     checkState(project.isInitialized(), "Project has not been set");
163     return project.getProperty();
164   }
165
166   @Override
167   public MutableAnalysisMetadataHolder setRootComponentRef(int rootComponentRef) {
168
169     checkState(!this.rootComponentRef.isInitialized(), "Root component ref has already been set");
170     this.rootComponentRef.setProperty(rootComponentRef);
171     return this;
172   }
173
174   @Override
175   public int getRootComponentRef() {
176     checkState(rootComponentRef.isInitialized(), "Root component ref has not been set");
177     return rootComponentRef.getProperty();
178   }
179
180   @Override
181   public MutableAnalysisMetadataHolder setQProfilesByLanguage(Map<String, QualityProfile> qprofilesByLanguage) {
182     checkState(!this.qProfilesPerLanguage.isInitialized(), "QProfiles by language has already been set");
183     this.qProfilesPerLanguage.setProperty(ImmutableMap.copyOf(qprofilesByLanguage));
184     return this;
185   }
186
187   @Override
188   public Map<String, QualityProfile> getQProfilesByLanguage() {
189     checkState(qProfilesPerLanguage.isInitialized(), "QProfiles by language has not been set");
190     return qProfilesPerLanguage.getProperty();
191   }
192
193   @Override
194   public MutableAnalysisMetadataHolder setScannerPluginsByKey(Map<String, ScannerPlugin> pluginsByKey) {
195     checkState(!this.pluginsByKey.isInitialized(), "Plugins by key has already been set");
196     this.pluginsByKey.setProperty(ImmutableMap.copyOf(pluginsByKey));
197     return this;
198   }
199
200   @Override
201   public Map<String, ScannerPlugin> getScannerPluginsByKey() {
202     checkState(pluginsByKey.isInitialized(), "Plugins by key has not been set");
203     return pluginsByKey.getProperty();
204   }
205
206   public boolean isShortLivingBranch() {
207     checkState(this.branch.isInitialized(), "Branch has not been set");
208     Branch prop = branch.getProperty();
209     return prop != null && prop.getType() == BranchType.SHORT;
210   }
211
212 }