package se.bjurr.sbcc;
import static com.google.common.collect.Lists.newArrayList;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import java.io.UnsupportedEncodingException;
import java.util.List;
import se.bjurr.sbcc.data.SbccChangeSet;
import se.bjurr.sbcc.settings.SbccSettings;
import com.atlassian.applinks.api.ApplicationLinkService;
import com.atlassian.applinks.api.CredentialsRequiredException;
import com.atlassian.sal.api.net.ResponseException;
import com.google.common.annotations.VisibleForTesting;
public class JqlValidator {
private final SbccSettings settings;
private final SbccRenderer renderer;
private final ApplicationLinkService applicationLinkService;
private static JiraClient jiraClient = new JiraClient();
public JqlValidator(
ApplicationLinkService applicationLinkService, SbccSettings settings, SbccRenderer renderer) {
this.settings = settings;
this.renderer = renderer;
this.applicationLinkService = applicationLinkService;
}
public List<String> validateJql(SbccChangeSet sbccChangeSet)
throws CredentialsRequiredException, UnsupportedEncodingException, ResponseException {
List<String> failingJqls = newArrayList();
if (!settings.shouldCheckJql()) {
return failingJqls;
}
if (settings.getCommitRegexp().isPresent()) {
for (String renderedJqlQUery :
renderer.renderAll(
SbccRenderer.SBCCVariable.REGEXP,
settings.getCommitRegexp().get(),
sbccChangeSet,
settings.getJqlCheckQuery())) {
if (addJqlQuery(failingJqls, renderedJqlQUery)) {
return newArrayList();
}
}
} else {
if (addJqlQuery(failingJqls, renderer.render(settings.getJqlCheckQuery()))) {
return newArrayList();
}
}
return failingJqls;
}
private Boolean addJqlQuery(List<String> failingJqls, String renderedJqlQUery)
throws CredentialsRequiredException, UnsupportedEncodingException, ResponseException {
if (jiraClient.getNumberOfJqlResults(applicationLinkService, renderedJqlQUery) > 0) {
return TRUE;
}
failingJqls.add(renderedJqlQUery);
return FALSE;
}
@VisibleForTesting
public static void setJiraClient(JiraClient jiraClient) {
JqlValidator.jiraClient = jiraClient;
}
}