diff options
Diffstat (limited to 'src/main/java/org/jenkinsci/plugins/activemq/ActiveMqBuildTrigger.java')
-rw-r--r-- | src/main/java/org/jenkinsci/plugins/activemq/ActiveMqBuildTrigger.java | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqBuildTrigger.java b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqBuildTrigger.java new file mode 100644 index 0000000..f3a2a79 --- /dev/null +++ b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqBuildTrigger.java @@ -0,0 +1,101 @@ +package org.jenkinsci.plugins.activemq; + +import hudson.Extension; +import hudson.model.BuildableItem; +import hudson.model.Item; +import hudson.triggers.Trigger; +import hudson.triggers.TriggerDescriptor; +import hudson.util.FormValidation; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.QueryParameter; +import org.mvel2.MVEL; +import org.slf4j.Logger; + +import java.io.Serializable; +import java.util.Map; + +import static java.util.Collections.singletonMap; +import static org.apache.commons.lang.StringUtils.trimToNull; +import static org.jenkinsci.plugins.activemq.ActiveMqClient.BuildRequest; +import static org.mvel2.MVEL.compileExpression; +import static org.slf4j.LoggerFactory.getLogger; + +public class ActiveMqBuildTrigger extends Trigger<BuildableItem> { + + private static final Logger log = getLogger(ActiveMqBuildTrigger.class); + + private String mvel; + + private transient Serializable compiledMvel; + + // parameters['jobName'] == 'fast-build' + @DataBoundConstructor + public ActiveMqBuildTrigger(String mvel) { + log.info("ActiveMqBuildTrigger.ActiveMqBuildTrigger"); + setMvel_(mvel); + } + + public String getMvel() { + log.info("ActiveMqBuildTrigger.getMvel"); + return mvel; + } + + private void setMvel_(String mvel) { + mvel = trimToNull(mvel); + if (mvel == null) { + this.mvel = null; + this.compiledMvel = null; + return; + } + + try { + compiledMvel = compileExpression(mvel); + this.mvel = mvel; + } catch (Exception e) { + log.warn("Unable to compile MVEL", e); + } + } + +// public FormValidation doCheckMvel(@QueryParameter String mvel) { +// mvel = trimToNull(mvel); +// if (mvel == null) { +// return FormValidation.ok(); +// } +// try { +// compileExpression(mvel); +// return FormValidation.ok(); +// } catch (Exception e) { +// log.info("Unable to compile MVEL: " + mvel, e); +// return FormValidation.error(e, "Unable to compile MVEL"); +// } +// } + +// public Serializable getCompiledMvel() { +// return compiledMvel; +// } + + public boolean matches(BuildRequest req) { + if (compiledMvel == null) { + return false; + } + + Map<String, Map<String, String>> context = singletonMap("parameters", req.parameters); + Boolean b = MVEL.executeExpression(compiledMvel, context, Boolean.class); + + return b != null && b; + } + + @Extension + public static class DescriptorImpl extends TriggerDescriptor { + + @Override + public boolean isApplicable(Item item) { + return item instanceof BuildableItem; + } + + @Override + public String getDisplayName() { + return "ActiveMQ Trigger"; + } + } +} |