-
Notifications
You must be signed in to change notification settings - Fork 724
/
GHSearchBuilder.java
63 lines (54 loc) · 1.47 KB
/
GHSearchBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package org.kohsuke.github;
import org.apache.commons.lang3.StringUtils;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
/**
* Base class for various search builders.
*
* @param <T>
* the type parameter
* @author Kohsuke Kawaguchi
*/
public abstract class GHSearchBuilder<T> extends GHQueryBuilder<T> {
protected final List<String> terms = new ArrayList<String>();
/**
* Data transfer object that receives the result of search.
*/
private final Class<? extends SearchResult<T>> receiverType;
GHSearchBuilder(GitHub root, Class<? extends SearchResult<T>> receiverType) {
super(root);
this.receiverType = receiverType;
req.withUrlPath(getApiUrl());
req.rateLimit(RateLimitTarget.SEARCH);
}
/**
* Search terms.
*
* @param term
* the term
* @return the gh query builder
*/
public GHQueryBuilder<T> q(String term) {
terms.add(term);
return this;
}
/**
* Performs the search.
*/
@Override
public PagedSearchIterable<T> list() {
req.set("q", StringUtils.join(terms, " "));
try {
return new PagedSearchIterable<>(root, req.build(), receiverType);
} catch (MalformedURLException e) {
throw new GHException("", e);
}
}
/**
* Gets api url.
*
* @return the api url
*/
protected abstract String getApiUrl();
}