Skip to content

Commit d77def8

Browse files
committed
Add support for pagination of component search result.
1 parent 55c927a commit d77def8

File tree

1 file changed

+47
-38
lines changed

1 file changed

+47
-38
lines changed

src/main/java/qubexplorer/server/SonarQube.java

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.LinkedList;
1010
import java.util.List;
1111
import java.util.Map;
12-
import java.util.stream.Collectors;
1312
import javax.ws.rs.WebApplicationException;
1413
import javax.ws.rs.client.WebTarget;
1514
import javax.ws.rs.core.GenericType;
@@ -70,9 +69,9 @@ public String getServerUrl() {
7069
public Version getVersion(UserCredentials userCredentials) {
7170
return new Version(getServerStatus(userCredentials).getVersion());
7271
}
73-
72+
7473
public ServerStatus getServerStatus(UserCredentials userCredentials) {
75-
WebTarget systemStatusTarget=getSystemStatusTarget(userCredentials);
74+
WebTarget systemStatusTarget = getSystemStatusTarget(userCredentials);
7675
return systemStatusTarget.request(MediaType.APPLICATION_JSON).get(ServerStatus.class);
7776
}
7877

@@ -81,7 +80,7 @@ public List<RadarIssue> getIssues(UserCredentials auth, ResourceKey projectKey,
8180
if (!existsProject(auth, projectKey)) {
8281
throw new NoSuchProjectException(projectKey);
8382
}
84-
Map<String, List<String>> params=new HashMap<>();
83+
Map<String, List<String>> params = new HashMap<>();
8584
params.put("componentKeys", Arrays.asList(projectKey.toString()));
8685
params.put("ps", Arrays.asList(String.valueOf(MAX_SUPPORTED_PAGE_SIZE)));
8786
params.put("statuses", Arrays.asList("OPEN"));
@@ -93,19 +92,19 @@ public List<RadarIssue> getIssues(UserCredentials auth, ResourceKey projectKey,
9392

9493
private List<RadarIssue> getIssues(UserCredentials userCredentials, Map<String, List<String>> params) {
9594
try {
96-
WebTarget issuesTarget=getIssuesTarget(userCredentials);
95+
WebTarget issuesTarget = getIssuesTarget(userCredentials);
9796
for (Map.Entry<String, List<String>> entry : params.entrySet()) {
98-
issuesTarget=issuesTarget.queryParam(entry.getKey(), (Object[])entry.getValue().toArray(new String[0]));
97+
issuesTarget = issuesTarget.queryParam(entry.getKey(), (Object[]) entry.getValue().toArray(new String[0]));
9998
}
100-
IssuesSearchResult issuesSearchResult;
99+
IssuesSearchResult issuesSearchResult;
101100
List<RadarIssue> issues = new LinkedList<>();
102101
Map<String, Rule> rulesCache = new HashMap<>();
103102
int pageIndex = 1;
104103
do {
105104
issuesSearchResult = issuesTarget.queryParam("p", pageIndex).request(MediaType.APPLICATION_JSON).get(IssuesSearchResult.class);
106105
for (RadarIssue issue : issuesSearchResult.getIssues()) {
107106
Rule rule = searchInCacheOrLoadFromServer(rulesCache, issue.ruleKey(), userCredentials);
108-
RadarIssue radarIssue=new RadarIssue();
107+
RadarIssue radarIssue = new RadarIssue();
109108
radarIssue.setComponentKey(issue.componentKey());
110109
radarIssue.setCreationDate(issue.creationDate());
111110
radarIssue.setKey(issue.key());
@@ -160,16 +159,21 @@ public Rule getRule(UserCredentials userCredentials, String ruleKey) {
160159
public List<ResourceKey> getProjectsKeys(UserCredentials userCredentials) {
161160
try {
162161
List<ResourceKey> keys = new ArrayList<>();
163-
if(getVersion(userCredentials).compareTo(6, 3) >= 0) {
164-
WebTarget componentsTarget= getProjectComponentsTarget(userCredentials);
165-
ComponentSearchResult searchResult = componentsTarget.request(MediaType.APPLICATION_JSON).get(ComponentSearchResult.class);
166-
List<Component> components=searchResult.getComponents();
167-
components.forEach((c) -> {
168-
keys.add(ResourceKey.valueOf(c.getKey()));
162+
if (getVersion(userCredentials).compareTo(6, 3) >= 0) {
163+
WebTarget componentsTarget = getProjectComponentsTarget(userCredentials);
164+
ComponentSearchResult searchResult;
165+
int pageIndex = 1;
166+
do {
167+
searchResult = componentsTarget.queryParam("p", pageIndex).request(MediaType.APPLICATION_JSON).get(ComponentSearchResult.class);
168+
searchResult.getComponents().forEach((c) -> {
169+
keys.add(ResourceKey.valueOf(c.getKey()));
170+
});
171+
pageIndex++;
172+
} while (searchResult.getPaging().getTotalNumberOfResults() != null && pageIndex <= searchResult.getPaging().getTotalPageCount());
173+
} else {
174+
WebTarget resourcesTarget = getProjectsTarget(userCredentials);
175+
List<Resource> resources = resourcesTarget.request(MediaType.APPLICATION_JSON).get(new GenericType<List<Resource>>() {
169176
});
170-
}else{
171-
WebTarget resourcesTarget= getProjectsTarget(userCredentials);
172-
List<Resource> resources=resourcesTarget.request(MediaType.APPLICATION_JSON).get(new GenericType<List<Resource>>() {});
173177
resources.forEach((r) -> {
174178
keys.add(ResourceKey.valueOf(r.getKey()));
175179
});
@@ -191,16 +195,21 @@ private static boolean isError401(WebApplicationException ex) {
191195
public List<SonarQubeProjectConfiguration> getProjects(UserCredentials userCredentials) {
192196
try {
193197
List<SonarQubeProjectConfiguration> projects = new ArrayList<>();
194-
if(getVersion(userCredentials).compareTo(6, 3) >= 0) {
195-
WebTarget componentsTarget= getProjectComponentsTarget(userCredentials);
196-
ComponentSearchResult searchResult = componentsTarget.request(MediaType.APPLICATION_JSON).get(ComponentSearchResult.class);
197-
List<Component> components=searchResult.getComponents();
198-
components.forEach((c) -> {
199-
projects.add(new GenericSonarQubeProjectConfiguration(c.getName(), ResourceKey.valueOf(c.getKey()), c.getVersion()));
198+
if (getVersion(userCredentials).compareTo(6, 3) >= 0) {
199+
WebTarget componentsTarget = getProjectComponentsTarget(userCredentials);
200+
ComponentSearchResult searchResult;
201+
int pageIndex = 1;
202+
do {
203+
searchResult = componentsTarget.queryParam("p", pageIndex).request(MediaType.APPLICATION_JSON).get(ComponentSearchResult.class);
204+
searchResult.getComponents().forEach((c) -> {
205+
projects.add(new GenericSonarQubeProjectConfiguration(c.getName(), ResourceKey.valueOf(c.getKey()), c.getVersion()));
206+
});
207+
pageIndex++;
208+
} while (searchResult.getPaging().getTotalNumberOfResults() != null && pageIndex <= searchResult.getPaging().getTotalPageCount());
209+
} else {
210+
WebTarget resourcesTarget = getProjectsTarget(userCredentials);
211+
List<Resource> resources = resourcesTarget.request(MediaType.APPLICATION_JSON).get(new GenericType<List<Resource>>() {
200212
});
201-
}else{
202-
WebTarget resourcesTarget= getProjectsTarget(userCredentials);
203-
List<Resource> resources = resourcesTarget.request(MediaType.APPLICATION_JSON).get(new GenericType<List<Resource>>() {});
204213
resources.forEach((r) -> {
205214
projects.add(new GenericSonarQubeProjectConfiguration(r.getName(), ResourceKey.valueOf(r.getKey()), r.getVersion()));
206215
});
@@ -230,7 +239,7 @@ public <T extends Classifier> ClassifierSummary<T> getSummary(ClassifierType<T>
230239
throw new NoSuchProjectException(resourceKey);
231240
}
232241
SimpleClassifierSummary<T> simpleSummary = new SimpleClassifierSummary<>();
233-
List<T> values=classifierType.getValues();
242+
List<T> values = classifierType.getValues();
234243
for (T classifier : values) {
235244
List<IssueFilter> tempFilters = new LinkedList<>();
236245
tempFilters.add(classifier.createFilter());
@@ -245,38 +254,38 @@ public <T extends Classifier> ClassifierSummary<T> getSummary(ClassifierType<T>
245254

246255
private WebTarget getProjectsTarget(UserCredentials userCredentials) {
247256
ResteasyClient client = getClient(userCredentials);
248-
return client.target(serverUrl+"/api/resources");
257+
return client.target(serverUrl + "/api/resources");
249258
}
250-
259+
251260
private WebTarget getProjectComponentsTarget(UserCredentials userCredentials) {
252261
ResteasyClient client = getClient(userCredentials);
253-
return client.target(serverUrl+"/api/components/search").queryParam("qualifiers", "TRK");
262+
return client.target(serverUrl + "/api/components/search").queryParam("qualifiers", "TRK");
254263
}
255264

256265
private WebTarget getRulesTarget(UserCredentials userCredentials) {
257266
ResteasyClient client = getClient(userCredentials);
258-
return client.target(serverUrl+"/api/rules/show");
267+
return client.target(serverUrl + "/api/rules/show");
259268
}
260-
269+
261270
private WebTarget getIssuesTarget(UserCredentials userCredentials) {
262271
ResteasyClient client = getClient(userCredentials);
263-
return client.target(serverUrl+"/api/issues/search");
272+
return client.target(serverUrl + "/api/issues/search");
264273
}
265274

266275
private WebTarget getSystemStatusTarget(UserCredentials userCredentials) {
267276
ResteasyClient client = getClient(userCredentials);
268-
return client.target(serverUrl+"/api/system/status");
277+
return client.target(serverUrl + "/api/system/status");
269278
}
270-
279+
271280
private ResteasyClient getClient(UserCredentials userCredentials) {
272-
ClientHttpEngine httpEngine=new ApacheHttpClient4Engine(createHttpClient());
281+
ClientHttpEngine httpEngine = new ApacheHttpClient4Engine(createHttpClient());
273282
ResteasyClient client = new ResteasyClientBuilder().httpEngine(httpEngine).build();
274-
if(userCredentials != null) {
283+
if (userCredentials != null) {
275284
client.register(new BasicAuthentication(userCredentials.getUsername(), PassEncoder.decodeAsString(userCredentials.getPassword())));
276285
}
277286
return client;
278287
}
279-
288+
280289
private HttpClient createHttpClient() {
281290
final ProxySettings proxySettings = getProxySettings();
282291
DefaultHttpClient httpClient = new DefaultHttpClient();

0 commit comments

Comments
 (0)