]> source.dussan.org Git - sonarqube.git/blob
69302fcbfcda34462d87520b3ed46ac8b0bfe7f6
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2022 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.component;
21
22 import java.util.EnumSet;
23 import java.util.List;
24 import java.util.Set;
25 import javax.annotation.CheckForNull;
26
27 public interface Component {
28   enum Type {
29     PROJECT(0), DIRECTORY(2), FILE(3), VIEW(0), SUBVIEW(1), PROJECT_VIEW(2);
30
31     private static final Set<Type> REPORT_TYPES = EnumSet.of(PROJECT, DIRECTORY, FILE);
32     private static final Set<Type> VIEWS_TYPES = EnumSet.of(VIEW, SUBVIEW, PROJECT_VIEW);
33
34     private final int depth;
35
36     Type(int depth) {
37       this.depth = depth;
38     }
39
40     public int getDepth() {
41       return depth;
42     }
43
44     public boolean isDeeperThan(Type otherType) {
45       return this.getDepth() > otherType.getDepth();
46     }
47
48     public boolean isHigherThan(Type otherType) {
49       return this.getDepth() < otherType.getDepth();
50     }
51
52     public boolean isReportType() {
53       return REPORT_TYPES.contains(this);
54     }
55
56     public boolean isViewsType() {
57       return VIEWS_TYPES.contains(this);
58     }
59   }
60
61   /**
62    * On a branch, CHANGED and ADDED are relative to the previous analysis.
63    * On a pull request, these are relative to the base branch.
64    */
65   enum Status {
66     UNAVAILABLE, SAME, CHANGED, ADDED
67   }
68
69   Type getType();
70
71   Status getStatus();
72
73   /**
74    * Returns the component uuid
75    */
76   String getUuid();
77
78   /**
79    * Returns the key as it will be displayed in the ui.
80    * If legacy branch feature is used, the key will contain the branch name
81    * If new branch feature is used, the key will not contain the branch name
82    */
83   String getKey();
84
85   /**
86    * The component long name. For files and directories this is the project relative path.
87    */
88   String getName();
89
90   /**
91    * Get component old relative path.
92    */
93   String getOldName();
94
95   /**
96    * The component short name. For files and directories this is the parent relative path (ie filename for files). For projects and view this is the same as {@link #getName()}
97    */
98   String getShortName();
99
100   /**
101    * The optional description of the component.
102    */
103   @CheckForNull
104   String getDescription();
105
106   List<Component> getChildren();
107
108   /**
109    * Returns the attributes specific to components of type {@link Type#PROJECT}.
110    *
111    * @throws IllegalStateException when the component's type is not {@link Type#PROJECT}.
112    */
113   ProjectAttributes getProjectAttributes();
114
115   /**
116    * Returns the attributes specific to components of type {@link Type#PROJECT}, {@link Type#MODULE},
117    * {@link Type#DIRECTORY} or {@link Type#FILE}.
118    *
119    * @throws IllegalStateException when the component's type is neither {@link Type#PROJECT}, {@link Type#MODULE},
120    *         {@link Type#DIRECTORY} nor {@link Type#FILE}.
121    */
122   ReportAttributes getReportAttributes();
123
124   /**
125    * The attributes of the Component if it's type is File.
126    *
127    * @throws IllegalStateException if the Component's type is not {@link Type#FILE}
128    */
129   FileAttributes getFileAttributes();
130
131   /**
132    * The attributes of the Component if it's type is {@link Type#PROJECT_VIEW}.
133    *
134    * @throws IllegalStateException if the Component's type is not {@link Type#PROJECT_VIEW}
135    */
136   ProjectViewAttributes getProjectViewAttributes();
137
138   /**
139    * The attributes of the Component if it's type is {@link Type#SUBVIEW}.
140    *
141    * @throws IllegalStateException if the Component's type is not {@link Type#SUBVIEW}
142    */
143   SubViewAttributes getSubViewAttributes();
144
145   /**
146    * The attributes of the Component if it's type is {@link Type#VIEW}.
147    *
148    * @throws IllegalStateException if the Component's type is not {@link Type#VIEW}
149    */
150   ViewAttributes getViewAttributes();
151 }