package org.jenkinsci.plugins.github.status.sources.misc;
import hudson.Extension;
import hudson.model.Result;
import hudson.model.Run;
import hudson.util.ListBoxModel;
import org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult;
import org.kohsuke.github.GHCommitState;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import javax.annotation.Nonnull;
import static hudson.model.Result.FAILURE;
import static hudson.model.Result.SUCCESS;
import static hudson.model.Result.UNSTABLE;
import static hudson.model.Result.fromString;
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;
/**
* if run result better than or equal to selected
*
* @author lanwen (Merkushev Kirill)
* @since 1.19.0
*/
public class BetterThanOrEqualBuildResult extends ConditionalResult {
private String result;
@DataBoundConstructor
public BetterThanOrEqualBuildResult() {
}
@DataBoundSetter
public void setResult(String result) {
this.result = result;
}
public String getResult() {
return result;
}
/**
* @return matches if run result better than or equal to selected
*/
@Override
public boolean matches(@Nonnull Run<?, ?> run) {
return defaultIfNull(run.getResult(), Result.NOT_BUILT).isBetterOrEqualTo(fromString(trimToEmpty(result)));
}
/**
* Convenient way to reuse logic of checking for the build status
*
* @param result to check against
* @param state state to set
* @param msg message to set. Can contain env vars
*
* @return new instance of this conditional result
*/
public static BetterThanOrEqualBuildResult betterThanOrEqualTo(Result result, GHCommitState state, String msg) {
BetterThanOrEqualBuildResult conditional = new BetterThanOrEqualBuildResult();
conditional.setResult(result.toString());
conditional.setState(state.name());
conditional.setMessage(msg);
return conditional;
}
@Extension
public static class BetterThanOrEqualBuildResultDescriptor extends ConditionalResultDescriptor {
private static final Result[] SUPPORTED_RESULTS = {SUCCESS, UNSTABLE, FAILURE};
@Override
public String getDisplayName() {
return "result better than or equal to";
}
@SuppressWarnings("unused")
public ListBoxModel doFillResultItems() {
ListBoxModel items = new ListBoxModel();
for (Result supported : SUPPORTED_RESULTS) {
items.add(supported.toString());
}
return items;
}
}
}