-
Notifications
You must be signed in to change notification settings - Fork 36
/
GitHubStatusChecksProperties.java
89 lines (72 loc) · 2.97 KB
/
GitHubStatusChecksProperties.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package io.jenkins.plugins.checks.github.status;
import edu.hm.hafner.util.VisibleForTesting;
import hudson.Extension;
import hudson.model.Job;
import hudson.plugins.git.GitSCM;
import io.jenkins.plugins.checks.github.SCMFacade;
import io.jenkins.plugins.checks.status.AbstractStatusChecksProperties;
import jenkins.plugins.git.GitSCMSource;
import org.jenkinsci.plugins.github_branch_source.GitHubSCMSource;
import java.util.Optional;
import java.util.stream.Stream;
/**
* Implementing {@link io.jenkins.plugins.checks.status.AbstractStatusChecksProperties} to retrieve properties
* from jobs with {@link GitHubSCMSource}, {@link GitSCM}, or {@link GitSCMSource}.
*/
@Extension
public class GitHubStatusChecksProperties extends AbstractStatusChecksProperties {
private static final GitHubStatusChecksConfigurations DEFAULT_CONFIGURATION
= new DefaultGitHubStatusChecksConfigurations();
private final SCMFacade scmFacade;
/**
* Default Constructor.
*/
public GitHubStatusChecksProperties() {
this(new SCMFacade());
}
@VisibleForTesting
GitHubStatusChecksProperties(final SCMFacade facade) {
super();
this.scmFacade = facade;
}
@Override
public boolean isApplicable(final Job<?, ?> job) {
return scmFacade.findGitHubSCMSource(job).isPresent() || scmFacade.findGitSCM(job).isPresent();
}
@Override
public String getName(final Job<?, ?> job) {
return getConfigurations(job).orElse(DEFAULT_CONFIGURATION).getName();
}
@Override
public boolean isSkipped(final Job<?, ?> job) {
return getConfigurations(job).orElse(DEFAULT_CONFIGURATION).isSkip();
}
@Override
public boolean isUnstableBuildNeutral(final Job<?, ?> job) {
return getConfigurations(job).orElse(DEFAULT_CONFIGURATION).isUnstableBuildNeutral();
}
@Override
public boolean isSuppressLogs(final Job<?, ?> job) {
return getConfigurations(job).orElse(DEFAULT_CONFIGURATION).isSuppressLogs();
}
@Override
public boolean isSkipProgressUpdates(Job<?, ?> job) {
return getConfigurations(job).orElse(DEFAULT_CONFIGURATION).isSkipProgressUpdates();
}
private Optional<GitHubStatusChecksConfigurations> getConfigurations(final Job<?, ?> job) {
Optional<GitHubSCMSource> gitHubSCMSource = scmFacade.findGitHubSCMSource(job);
if (gitHubSCMSource.isPresent()) {
return getConfigurations(gitHubSCMSource.get().getTraits().stream());
}
Optional<GitSCM> gitSCM = scmFacade.findGitSCM(job);
if (gitSCM.isPresent()) {
return getConfigurations(gitSCM.get().getExtensions().stream());
}
return Optional.empty();
}
private Optional<GitHubStatusChecksConfigurations> getConfigurations(final Stream<?> stream) {
return stream.filter(t -> t instanceof GitHubStatusChecksConfigurations)
.findFirst()
.map(t -> (GitHubStatusChecksConfigurations) t);
}
}