package hudson.plugins.skype;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Notifier;
import hudson.tasks.Publisher;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.StaplerRequest;
/**
* Skype Build Error
*
* @author udagawa
*/
public class SkypeBuildErrorPublisher extends Notifier {
private static final Logger LOGGER = Logger
.getLogger(SkypeBuildErrorPublisher.class.getName());
private SkypeBuildErrorPublisher(final String chatName,
final String errorStringPattern) {
_chatName = chatName;
_errorStringPattern = errorStringPattern;
}
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.STEP;
}
@Override
public boolean perform(final AbstractBuild<?, ?> build,
final Launcher launcher, final BuildListener listener)
throws InterruptedException, IOException {
if (StringUtils.isBlank(getChatName())) {
LOGGER.log(Level.WARNING, "you must specify chat name.");
return false;
}
final SkypeHelper helper = new SkypeHelper();
final SkypeConfig config = helper.createBinding(build, launcher,
listener);
config.chatName = getChatName();
config.errorStringPattern = getErrorStringPattern();
helper.executeScript(SCRIPT_NAME_DEFAULT, config);
return true;
}
private static final String SCRIPT_NAME_DEFAULT = "skypeBuildError.groovy";
private final String _chatName;
private String _errorStringPattern;
public String getChatName() {
return _chatName;
}
public String getErrorStringPattern() {
if (StringUtils.isBlank(_errorStringPattern)) {
_errorStringPattern = SkypeConfig.DEFAULT_ERROR_STRING_PATTERN;
}
return _errorStringPattern;
}
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
private final String DISPLAY_NAME = "Skype Build Error";
private final String PARAMETER_CHAT_NAME = "skype.chatNameBuildError";
private final String PARAMETER_ERROR_STRING_PATTERN = "skype.errorStringPattern";
public DescriptorImpl() {
super(SkypeBuildErrorPublisher.class);
load();
}
@Override
public String getDisplayName() {
return DISPLAY_NAME;
}
@Override
public String getHelpFile() {
return "/plugin/skype/help/skype.html";
}
public String getDefaultErrorStringPattern() {
return SkypeConfig.DEFAULT_ERROR_STRING_PATTERN;
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
@Override
public SkypeBuildErrorPublisher newInstance(StaplerRequest req, JSONObject formData)
throws FormException {
return new SkypeBuildErrorPublisher(req
.getParameter(PARAMETER_CHAT_NAME), req
.getParameter(PARAMETER_ERROR_STRING_PATTERN));
}
}
}