]> source.dussan.org Git - sonarqube.git/blob
19a5d6e943cf0f37a3bdbd36ef112c7b0367ac97
[sonarqube.git] /
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.ce.task.projectanalysis.api.posttask;
21
22 import javax.annotation.CheckForNull;
23 import javax.annotation.concurrent.Immutable;
24 import org.sonar.api.ce.posttask.QualityGate;
25
26 import static com.google.common.base.Preconditions.checkArgument;
27 import static com.google.common.base.Preconditions.checkState;
28 import static java.util.Objects.requireNonNull;
29 import static org.sonar.api.ce.posttask.QualityGate.EvaluationStatus.NO_VALUE;
30
31 @Immutable
32 class ConditionImpl implements QualityGate.Condition {
33   private final QualityGate.EvaluationStatus status;
34   private final String metricKey;
35   private final QualityGate.Operator operator;
36   private final String errorThreshold;
37   private final boolean onLeakPeriod;
38   @CheckForNull
39   private final String value;
40
41   private ConditionImpl(Builder builder) {
42     requireNonNull(builder.status, "status can not be null");
43     requireNonNull(builder.metricKey, "metricKey can not be null");
44     requireNonNull(builder.operator, "operator can not be null");
45     requireNonNull(builder.errorThreshold, "errorThreshold can not be null");
46     verifyValue(builder);
47
48     this.status = builder.status;
49     this.metricKey = builder.metricKey;
50     this.operator = builder.operator;
51     this.errorThreshold = builder.errorThreshold;
52     this.onLeakPeriod = builder.metricKey.startsWith("new_");
53     this.value = builder.value;
54   }
55
56   private static void verifyValue(Builder builder) {
57     if (builder.status == NO_VALUE) {
58       checkArgument(builder.value == null, "value must be null when status is %s", NO_VALUE);
59     } else {
60       checkArgument(builder.value != null, "value can not be null when status is not %s", NO_VALUE);
61     }
62   }
63
64   public static Builder newBuilder() {
65     return new Builder();
66   }
67
68   public static class Builder {
69     private String metricKey;
70     private QualityGate.Operator operator;
71     private String errorThreshold;
72     @CheckForNull
73     private String value;
74     private QualityGate.EvaluationStatus status;
75
76     private Builder() {
77       // enforce use of static method
78     }
79
80     public Builder setMetricKey(String metricKey) {
81       this.metricKey = metricKey;
82       return this;
83     }
84
85     public Builder setOperator(QualityGate.Operator operator) {
86       this.operator = operator;
87       return this;
88     }
89
90     public Builder setErrorThreshold(String errorThreshold) {
91       this.errorThreshold = errorThreshold;
92       return this;
93     }
94
95     /**
96      * @deprecated in 7.6. This method has no longer any effect.
97      */
98     @Deprecated
99     public Builder setWarningThreshold(String warningThreshold) {
100       return this;
101     }
102
103     /**
104      * @deprecated in 7.6. This method has no longer any effect.
105      */
106     @Deprecated
107     public Builder setOnLeakPeriod(boolean onLeakPeriod) {
108       return this;
109     }
110
111     public Builder setValue(String value) {
112       this.value = value;
113       return this;
114     }
115
116     public Builder setStatus(QualityGate.EvaluationStatus status) {
117       this.status = status;
118       return this;
119     }
120
121     public ConditionImpl build() {
122       return new ConditionImpl(this);
123     }
124   }
125
126   @Override
127   public QualityGate.EvaluationStatus getStatus() {
128     return status;
129   }
130
131   @Override
132   public String getMetricKey() {
133     return metricKey;
134   }
135
136   @Override
137   public QualityGate.Operator getOperator() {
138     return operator;
139   }
140
141   @Override
142   public String getErrorThreshold() {
143     return errorThreshold;
144   }
145
146   @Deprecated
147   @Override
148   public String getWarningThreshold() {
149     return null;
150   }
151
152   /**
153    * @deprecated in 7.6. Conditions "on leak period" were removed. Use "New X" conditions instead.
154    */
155   @Deprecated
156   @Override
157   public boolean isOnLeakPeriod() {
158     return onLeakPeriod;
159   }
160
161   @Override
162   public String getValue() {
163     checkState(status != NO_VALUE, "There is no value when status is %s", NO_VALUE);
164
165     return value;
166   }
167
168   @Override
169   public String toString() {
170     return "ConditionImpl{" +
171       "status=" + status +
172       ", metricKey='" + metricKey + '\'' +
173       ", operator=" + operator +
174       ", errorThreshold='" + errorThreshold + '\'' +
175       ", value='" + value + '\'' +
176       '}';
177   }
178 }