package hudson.plugins.jira; import static ch.lambdaj.Lambda.filter; import static hudson.plugins.jira.JiraVersionMatcher.hasName; import static org.apache.commons.lang.StringUtils.isEmpty; import static org.hamcrest.Matchers.equalTo; import java.util.List; import hudson.model.BuildListener; import hudson.model.Result; import hudson.model.Run; import hudson.model.TaskListener; import hudson.plugins.jira.model.JiraVersion; /** * Performs an action which creates new jira version. */ class VersionCreator { static boolean perform(JiraSite site, String jiraVersion, String jiraProjectKey, Run<?, ?> build, TaskListener listener) { String realVersion = null; String realProjectKey = null; try { realVersion = build.getEnvironment(listener).expand(jiraVersion); realProjectKey = build.getEnvironment(listener).expand(jiraProjectKey); if (isEmpty(realVersion)) { throw new IllegalArgumentException("No version specified"); } if (isEmpty(realProjectKey)) { throw new IllegalArgumentException("No project specified"); } List<JiraVersion> sameNamedVersions = filter(hasName(equalTo(realVersion)), site.getVersions(realProjectKey)); if (sameNamedVersions.size() == 0) { listener.getLogger().println(Messages.JiraVersionCreator_CreatingVersion(realVersion, realProjectKey)); site.addVersion(realVersion, realProjectKey); } else { listener.getLogger().println(Messages.JiraVersionCreator_VersionExists(realVersion, realProjectKey)); } } catch (Exception e) { e.printStackTrace( listener.fatalError("Unable to add version %s to JIRA project %s", realVersion, realProjectKey, e)); if (listener instanceof BuildListener) ((BuildListener) listener).finished(Result.FAILURE); return false; } return true; } }