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 Test Error
*
* @author udagawa
*/
public class SkypeTestErrorPublisher extends Notifier {
private static final Logger LOGGER = Logger
.getLogger(SkypeTestErrorPublisher.class.getName());
private SkypeTestErrorPublisher(final String chatName,
final String unitTestPattern,
final String testFilePattern) {
_chatName = chatName;
_unitTestPattern = unitTestPattern;
_testFilePattern = testFilePattern;
}
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 true;
}
final SkypeHelper helper = new SkypeHelper();
final SkypeConfig config = helper.createBinding(build, launcher,
listener);
config.chatName = getChatName();
config.unitTestPattern = getUnitTestPattern();
config.testFilePattern = getTestFilePattern();
helper.executeScript(SCRIPT_NAME_DEFAULT, config);
return true;
}
private static final String SCRIPT_NAME_DEFAULT = "skypeTestError.groovy";
private final String _chatName;
public String getChatName() {
return _chatName;
}
private String _unitTestPattern;
public String getUnitTestPattern() {
if (StringUtils.isBlank(_unitTestPattern)) {
_unitTestPattern = SkypeConfig.DEFAULT_UNITTEST_PATTERN;
}
return _unitTestPattern;
}
private String _testFilePattern;
public String getTestFilePattern() {
if (StringUtils.isBlank(_testFilePattern)) {
_testFilePattern = SkypeConfig.DEFAULT_TEST_FILE_PATTERN;
}
return _testFilePattern;
}
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
private final String DISPLAY_NAME = "Skype Test Error";
private final String PARAMETER_CHAT_NAME = "skype.chatNameTestError";
private final String PARAMETER_UNITTEST_PATTERN = "skype.unitTestPattern";
private final String PARAMETER_TEST_FILE_PATTERN = "skype.testFilePattern";
public DescriptorImpl() {
super(SkypeTestErrorPublisher.class);
load();
}
@Override
public String getDisplayName() {
return DISPLAY_NAME;
}
@Override
public String getHelpFile() {
return "/plugin/skype/help/skype.html";
}
public String getDefaultUnitTestPattern() {
return SkypeConfig.DEFAULT_UNITTEST_PATTERN;
}
public String getDefaultTestFilePattern() {
return SkypeConfig.DEFAULT_TEST_FILE_PATTERN;
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
@Override
public SkypeTestErrorPublisher newInstance(StaplerRequest req, JSONObject formData)
throws FormException {
return new SkypeTestErrorPublisher(
req.getParameter(PARAMETER_CHAT_NAME),
req.getParameter(PARAMETER_UNITTEST_PATTERN),
req.getParameter(PARAMETER_TEST_FILE_PATTERN)
);
}
}
}