Skip to content

Commit

Permalink
Almost done
Browse files Browse the repository at this point in the history
  • Loading branch information
mdkf committed Aug 28, 2018
1 parent 13cfe0c commit 056699e
Show file tree
Hide file tree
Showing 10 changed files with 686 additions and 110 deletions.
10 changes: 4 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>3.19</version>
<version>3.20</version>
</parent>

<groupId>org.jenkinsci.plugins</groupId>
Expand All @@ -18,10 +18,8 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.javadoc.skip>true</maven.javadoc.skip>
<!--<jenkins.version>2.7.4</jenkins.version> -->
<jenkins.version>2.73.3</jenkins.version>
<java.level>8</java.level>
<findbugs.failOnError>false</findbugs.failOnError>
<jenkins.version>2.7.3</jenkins.version>
<java.level>7</java.level>
</properties>

<url>https://wiki.jenkins-ci.org/display/JENKINS/Managed+Script+Plugin</url>
Expand Down Expand Up @@ -68,7 +66,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-durable-task-step</artifactId>
<version>2.20</version>
<version>2.16</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public final class ManagedBatchScript extends FileMonitoringTask {
@DataBoundConstructor
public ManagedBatchScript(String script, String[] buildStepArgs) {
this.script = script;
this.buildStepArgs = buildStepArgs;
this.buildStepArgs = buildStepArgs.clone();
}

public String getScript() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,45 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.jenkinsci.plugins.managedscripts;

import hudson.Extension;
import hudson.model.Item;
import hudson.model.ItemGroup;
import hudson.util.FormValidation;
import hudson.util.ListBoxModel;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import org.jenkinsci.Symbol;
import org.jenkinsci.lib.configprovider.model.Config;
import org.jenkinsci.plugins.ManagedBatchScript.ManagedBatchScript;
import org.jenkinsci.plugins.configfiles.ConfigFiles;
import org.jenkinsci.plugins.durabletask.DurableTask;
import org.jenkinsci.plugins.managedscripts.WinBatchConfig.Arg;
import org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep;
import org.kohsuke.stapler.AncestorInPath;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;

/**
* A project that uses this builder can choose a build step from a list of
* predefined windows batch files that are used as command line scripts.
* <p>
*
* @author MFowler
* @author Michael DK Fowler
*/
public class ManagedBatchScriptStep extends DurableTaskStep{
public class ManagedBatchScriptStep extends DurableTaskStep {

private final String scriptId;
private String[] buildStepArgs;
private ScriptBuildStepArgs scriptBuildStepArgs;
private static final Logger LOGGER = Logger.getLogger(ManagedBatchScriptStep.class.getName());

public static class ArgValue {

public static class ArgValue implements Serializable {

public final String arg;

@DataBoundConstructor
Expand All @@ -43,6 +49,7 @@ public ArgValue(String arg) {
}

public static class ScriptBuildStepArgs {

public final boolean defineArgs;
public final ArgValue[] buildStepArgs;

Expand All @@ -52,7 +59,39 @@ public ScriptBuildStepArgs(boolean defineArgs, ArgValue[] buildStepArgs) {
this.buildStepArgs = buildStepArgs == null ? new ArgValue[0] : Arrays.copyOf(buildStepArgs, buildStepArgs.length);
}
}


/**
* The constructor used at form submission
*
* @param buildStepId the Id of the config file
* @param scriptBuildStepArgs whether to save the args and arg values (the
* boolean is required because of html form submission, which also sends
* hidden values)
*/
@DataBoundConstructor
public ManagedBatchScriptStep(String buildStepId) {
if (buildStepId == null) {
throw new IllegalArgumentException();
}
this.scriptId = buildStepId;
}

public ManagedBatchScriptStep(WinBatchBuildStep step) {
if (step == null) {
throw new IllegalArgumentException();
}
this.scriptId = step.getBuildStepId();
this.buildStepArgs = step.getBuildStepArgs();
if (this.buildStepArgs != null && this.buildStepArgs.length > 0) {
ArgValue[] args = new ArgValue[buildStepArgs.length];
for (int c = 0; c < buildStepArgs.length; c++) {
args[c] = new ArgValue(buildStepArgs[c]);
}
this.scriptBuildStepArgs = new ScriptBuildStepArgs(true, args);
}

}

public String getBuildStepId() {
return scriptId;
}
Expand All @@ -61,15 +100,15 @@ public String[] getBuildStepArgs() {
String[] args = buildStepArgs == null ? new String[0] : buildStepArgs;
return Arrays.copyOf(args, args.length);
}
public ScriptBuildStepArgs getScriptBuildStepArgs(){

public ScriptBuildStepArgs getScriptBuildStepArgs() {
return scriptBuildStepArgs;
}

@DataBoundSetter
public void setScriptBuildStepArgs(ScriptBuildStepArgs scriptBuildStepArgs){
this.scriptBuildStepArgs= scriptBuildStepArgs;
List<String> l = null;
public void setScriptBuildStepArgs(ScriptBuildStepArgs scriptBuildStepArgs) {
this.scriptBuildStepArgs = scriptBuildStepArgs;
List<String> l = null;
if (scriptBuildStepArgs != null && scriptBuildStepArgs.defineArgs
&& scriptBuildStepArgs.buildStepArgs != null) {
l = new ArrayList<>();
Expand All @@ -79,48 +118,39 @@ public void setScriptBuildStepArgs(ScriptBuildStepArgs scriptBuildStepArgs){
}
this.buildStepArgs = l == null ? null : l.toArray(new String[l.size()]);
}

@DataBoundConstructor
public ManagedBatchScriptStep(String buildStepId) {
if (buildStepId == null) {
throw new IllegalArgumentException();
}
this.scriptId = buildStepId;
}

public ManagedBatchScriptStep(WinBatchBuildStep step) {
if (step == null) {
throw new IllegalArgumentException();
}
this.scriptId = step.getBuildStepId();
this.buildStepArgs = step.getBuildStepArgs();
if (this.buildStepArgs!= null && this.buildStepArgs.length>0){
ArgValue[] args=new ArgValue[buildStepArgs.length];
for (int c=0; c<buildStepArgs.length;c++){
args[c]=new ArgValue(buildStepArgs[c]);
}
this.scriptBuildStepArgs=new ScriptBuildStepArgs(true,args);
}

}


// Overridden for better type safety.
@Override
protected DurableTask task() {
return new ManagedBatchScript(scriptId, buildStepArgs);
}


/**
* Descriptor for {@link ManagedBatchScriptStep}.
*/
@Symbol("managedbat")
@Extension
public static final class DescriptorImpl extends DurableTaskStepDescriptor {

@Override public String getDisplayName() {
return "Managed Windows Batch Script";
@Override
public String getFunctionName() {
return "managedbat";
}

@Override public String getFunctionName() {
return "managedbat";
/**
* This human readable name is used in the configuration screen.
*/
@Override
public String getDisplayName() {
return "Managed Windows Batch Script";
}


/**
* Return all batch files (templates) that the user can choose from when
* creating a build step. Ordered by name.
*
* @return A collection of batch files of type {@link WinBatchConfig}.
*/
public ListBoxModel doFillBuildStepIdItems(@AncestorInPath ItemGroup context) {
List<Config> configsInContext = ConfigFiles.getConfigsInContext(context, WinBatchConfig.WinBatchConfigProvider.class);
Collections.sort(configsInContext, new Comparator<Config>() {
Expand All @@ -136,6 +166,48 @@ public int compare(Config o1, Config o2) {
}
return items;
}
}

/**
* gets the argument description to be displayed on the screen when
* selecting a config in the dropdown
*
* @param configId the config id to get the arguments description for
* @return the description
*/
private String getArgsDescription(@AncestorInPath Item context, String configId) {
final WinBatchConfig config = ConfigFiles.getByIdOrNull(context, configId);
if (config != null) {
if (config.args != null && !config.args.isEmpty()) {
StringBuilder sb = new StringBuilder("Required arguments: ");
int i = 1;
for (Iterator<Arg> iterator = config.args.iterator(); iterator.hasNext(); i++) {
Arg arg = iterator.next();
sb.append(i).append(". ").append(arg.name);
if (iterator.hasNext()) {
sb.append(" | ");
}
}
return sb.toString();
} else {
return "No arguments required";
}
}
return "please select a valid script!";
}

/**
* validate that an existing config was chosen
*
* @param buildStepId the buildStepId
* @return
*/
public HttpResponse doCheckBuildStepId(StaplerRequest req, @AncestorInPath Item context, @QueryParameter String buildStepId) {
final WinBatchConfig config = ConfigFiles.getByIdOrNull(context, buildStepId);
if (config != null) {
return DetailLinkDescription.getDescription(req, context, buildStepId, getArgsDescription(context, buildStepId));
} else {
return FormValidation.error("you must select a valid batch file");
}
}
}
Loading

0 comments on commit 056699e

Please sign in to comment.