Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package net.hurstfrost.hudson.speaks;
  
  import hudson.Extension;
  import hudson.Functions;
  import hudson.Launcher;
  import hudson.Util;
 
 
 
 
 import  com.sun.speech.freetts.Voice;
 import  com.sun.speech.freetts.VoiceManager;

Notifier that makes Hudson speak using FreeTTS.

Author(s):
Edward Hurst-Frost
 
 public class HudsonSpeaksNotifier extends Notifier {
 
 	public String getProjectTemplate() {
 	}
 
 	public void setProjectTemplate(String template) {
 		if (StringUtils.isEmpty(template) || template.trim().equals(getDescriptor().getAnnouncementTemplate())) {
 			 = null;
 		} else {
 			 = template;
 		}
 	}
 
 	public HudsonSpeaksNotifier() {
 		// Default constructor
 	}
 
 	}
 	
 	}
 
 	public boolean perform(final AbstractBuild<?, ?> buildfinal Launcher launcherfinal BuildListener listener) {
 		JellyContext jellyContext = new JellyContext();
 		jellyContext.setVariable("build"build);
 		jellyContext.setVariable("duration"getDuration(build));
 
 		String announcementMessage;
 		try {
 			announcementMessage = getAnnouncementMessage(jellyContexttemplate);
 		} catch (Exception e) {
 			listener.getLogger().println("Hudson failed to interpret your announcement teamplate '" + template + "' : " + e.toString());
 			return true;
 		}
 		
 		if (!StringUtils.isEmpty(announcementMessage)) {
 			listener.getLogger().println("Hudson speaks '" + announcementMessage + "'");
 			try {
 				say(announcementMessage);
 			} catch (Exception e) {
 				listener.getLogger().println("Hudson failed to speak '" + announcementMessage + "' : " + e.toString());
 			}
 		}
 
 		return true;
 	}
 
 	private static void say(String announcementMessage) {
 		VoiceManager voiceManager = VoiceManager.getInstance();
 		Voice helloVoice = voiceManager.getVoice("kevin16");
 		helloVoice.allocate();
 		helloVoice.speak(announcementMessage);
		helloVoice.deallocate();
	}
	private static String getAnnouncementMessage(JellyContext jellyContextString templatethrows JellyExceptionIOException {
		StringWriter writer = new StringWriter();
		final XMLOutput xmlOutput = XMLOutput.createXMLOutput(writer);
		final String script = "<?xml version=\"1.0\"?>\n<j:jelly trim=\"false\" xmlns:j=\"jelly:core\" xmlns:x=\"jelly:xml\" xmlns:html=\"jelly:html\">" + template + "</j:jelly>";
		byte[] bytes;
		try {
			bytes = script.getBytes("UTF-8");
catch (Exception e) {
			// Probably never happens
			bytes = script.getBytes();
		}
		jellyContext.runScript(new InputSource(new ByteArrayInputStream(bytes)), xmlOutput);
		xmlOutput.flush();
		xmlOutput.close();
		return writer.toString().trim();
	}
	private String getDuration(final AbstractBuild<?, ?> build) {
		String durationString = build.getTimestampString();
		durationString = durationString.replaceAll(" sec"" seconds");
		durationString = durationString.replaceAll(" ms"" milli seconds");
		durationString = durationString.replaceAll(" min"" minutes");
		return durationString;
	}
	public static final class HudsonSpeaksDescriptor extends BuildStepDescriptor<Publisher> {
		public static final String DEFAULT_TEMPLATE = "<j:choose>\n"+
		"<j:when test=\"${build.result!='SUCCESS' || build.project.lastBuild.result!='SUCCESS'}\">\n"+
		"Your attention please. Project ${build.project.name}, build number ${build.number}: ${build.result} in ${duration}.\n"+
		"<j:if test=\"${build.result!='SUCCESS'}\"> Get fixing those bugs team!</j:if>\n" +
		"</j:when>\n"+
		"<j:otherwise><!-- Say nothing --></j:otherwise>\n"+
		"</j:choose>";
		}
		public boolean isApplicable(Class<? extends AbstractProjectjobType) {
			return true;
		}
		public boolean configure(final StaplerRequest reqJSONObject json) {
			 = json.optString("announcementTemplate");
			if (StringUtils.isEmpty()) {
			}
			return true;
			// return super.configure(req, json);
		}
		public String getDisplayName() {
			return "Hudson Speaks!";
		}
            req.bindParameters(m,"speaks_");
			return m;
		}
			if (StringUtils.isEmpty(testPhrase)) {
				return FormValidation.errorWithMarkup("<p>Please enter a phrase for Hudson to speak.</p>");
			}
			try {
				say(testPhrase);
catch (Exception e) {
				return FormValidation.errorWithMarkup("<p>Hudson failed to speak</p><pre>" + Util.escape(Functions.printThrowable(e)) + "</pre>");
			}
			return FormValidation.ok("Hudson said '" + testPhrase + "' successfully.");
		}
		}
		public void setAnnouncementTemplate(String newTemplate) {
			this. = StringUtils.isEmpty(newTemplate)?:newTemplate;
		}
	}
New to GrepCode? Check out our FAQ X