diff --git a/pom.xml b/pom.xml index 643455c..18120fe 100644 --- a/pom.xml +++ b/pom.xml @@ -4,19 +4,19 @@ org.jenkins-ci.plugins plugin - 1.447 + 1.532.3 - + com.seitenbau.jenkins.plugins dynamicparameter hpi - 0.2.1-SNAPSHOT - + 0.2.1 + Jenkins Dynamic Parameter Plug-in This plugin allows build parameters with dynamically generated default values. - + Apache License diff --git a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BaseParameterDefinition.java b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BaseParameterDefinition.java index b8bde36..a635486 100644 --- a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BaseParameterDefinition.java +++ b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BaseParameterDefinition.java @@ -23,8 +23,9 @@ import hudson.remoting.VirtualChannel; import java.util.Collections; -import java.util.Map; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -142,7 +143,7 @@ public final String getScriptResultAsString(Map parameters) } @Override - public final ParameterValue createValue(StaplerRequest req, JSONObject jo) + public ParameterValue createValue(StaplerRequest req, JSONObject jo) { final JSONObject parameterJsonModel = new JSONObject(false); final Object value = jo.get("value"); @@ -181,7 +182,7 @@ private StringParameterValue createStringParameterValueFor(String name, String v * @return if the value is valid the same parameter value * @throws IllegalArgumentException if the value in not valid */ - protected StringParameterValue checkParameterValue(StringParameterValue value) + protected ParameterValue checkParameterValue(ParameterValue value) { return value; } @@ -235,7 +236,11 @@ private final Object executeScript(Map parameters) } } } - Callable call = prepareLocalCall(parameters); + + // for "local" scripts, expose the current Jenkins job as "currentJob" variable + Map p = new HashMap(parameters); + p.put("currentJob", JenkinsUtils.findCurrentProject(getUUID())); + Callable call = prepareLocalCall((Map)p); return call.call(); } catch (Throwable e) diff --git a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BooleanParameterDefinition.java b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BooleanParameterDefinition.java new file mode 100644 index 0000000..be8b2f0 --- /dev/null +++ b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/BooleanParameterDefinition.java @@ -0,0 +1,116 @@ +/* + * Copyright 2012 Seitenbau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.seitenbau.jenkins.plugins.dynamicparameter; + +import hudson.Extension; +import hudson.model.ParameterValue; +import hudson.model.BooleanParameterValue; + +import java.util.Collections; + +import net.sf.json.JSONObject; + +import org.jvnet.localizer.ResourceBundleHolder; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.StaplerRequest; + +/** Text parameter, with dynamically generated default value. */ +public class BooleanParameterDefinition extends ScriptParameterDefinition +{ + /** Serial version UID. */ + private static final long serialVersionUID = 3162331168133114084L; + + private final Boolean readonlyInputField; + + /** + * Constructor with the parameter which are injected by the jenkins runtime. + * + * @param name parameter name + * @param script script, which generates the parameter value + * @param description parameter description + * @param uuid identifier (optional) + * @param remote execute the script on a remote node + * @param readonlyInputField should the input field marked as read only true / false + * @param classPath the class path description + */ + @DataBoundConstructor + public BooleanParameterDefinition(String name, String script, String description, String uuid, + Boolean remote, Boolean readonlyInputField, String classPath) + { + super(name, script, description, uuid, remote, classPath); + this.readonlyInputField = readonlyInputField; + } + + + /** + * Execute the script and return the default value for this parameter. + * @return the default value generated by the script or {@code null} + */ + public final boolean getDefaultValue() + { + return Boolean.parseBoolean(getScriptResultAsString(Collections. emptyMap())); + } + + /** + * Return default parameter value - used by trigger mechanism. + */ + @Override + public ParameterValue getDefaultParameterValue() { + BooleanParameterValue booleanParameterValue = new BooleanParameterValue(getName(), getDefaultValue()); + return booleanParameterValue; + } + + /** + * Return a Parameter value object for a command line parameter. + */ + @Override + public ParameterValue createValue(String value) + { + BooleanParameterValue parameterValue = new BooleanParameterValue(getName(), Boolean.parseBoolean(value), getDescription()); + return checkParameterValue(parameterValue); + } + + @Override + public ParameterValue createValue(StaplerRequest req, JSONObject jo) + { + BooleanParameterValue value = req.bindJSON(BooleanParameterValue.class, jo); + value.setDescription(getDescription()); + return value; + } + + public final boolean isReadonlyInputField() + { + if(readonlyInputField == null) + { + return false; + } + return readonlyInputField; + } + + /** Parameter descriptor. */ + @Extension + public static final class DescriptorImpl extends BaseDescriptor + { + private static final String DISPLAY_NAME = "DisplayName"; + + @Override + public final String getDisplayName() + { + return ResourceBundleHolder.get(BooleanParameterDefinition.class).format(DISPLAY_NAME); + } + } + +} diff --git a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/ScriptParameterDefinition.java b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/ScriptParameterDefinition.java index a878996..3b2ccdc 100644 --- a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/ScriptParameterDefinition.java +++ b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/ScriptParameterDefinition.java @@ -51,11 +51,11 @@ public abstract class ScriptParameterDefinition extends BaseParameterDefinition private final String _script; /** Local class path. */ - private final FilePath _localBaseDirectory; - + private final String _localBaseDirectory; + /** Remote class path. */ private final String _remoteBaseDirectory; - + /** Class path. */ private final String _classPath; @@ -72,7 +72,7 @@ protected ScriptParameterDefinition(String name, String script, String descripti { super(name, description, uuid, remote); - _localBaseDirectory = new FilePath(DynamicParameterConfiguration.INSTANCE.getBaseDirectoryFile()); + _localBaseDirectory = DynamicParameterConfiguration.INSTANCE.getBaseDirectoryFile().toString(); _remoteBaseDirectory = DEFAULT_REMOTE_CLASSPATH; _classPath = classPath; _script = script; @@ -82,7 +82,7 @@ protected ScriptParameterDefinition(String name, String script, String descripti * Local class path directory. * @return directory on the local node */ - public final FilePath getLocalBaseDirectory() + public final String getLocalBaseDirectory() { return _localBaseDirectory; } @@ -149,7 +149,7 @@ private FilePath[] setupLocalClassPaths() for (int i = 0; i < localClassPaths.length; i++) { String path = paths[i]; - FilePath localClassPath = new FilePath(getLocalBaseDirectory(), path); + FilePath localClassPath = new FilePath(new FilePath(new File(getLocalBaseDirectory())), path); localClassPaths[i] = localClassPath; } return localClassPaths; @@ -174,7 +174,7 @@ private FilePath[] setupRemoteClassPaths(VirtualChannel channel) throws IOExcept { String path = paths[i]; - FilePath localClassPath = new FilePath(getLocalBaseDirectory(), path); + FilePath localClassPath = new FilePath(new FilePath(new File(getLocalBaseDirectory())), path); FilePath remoteClassPath = new FilePath(remoteBaseDirectory, path); localClassPath.copyRecursiveTo(remoteClassPath); diff --git a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/TextParameterDefinition.java b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/TextParameterDefinition.java new file mode 100644 index 0000000..c73f1a5 --- /dev/null +++ b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/TextParameterDefinition.java @@ -0,0 +1,117 @@ +/* + * Copyright 2012 Seitenbau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.seitenbau.jenkins.plugins.dynamicparameter; + +import hudson.Extension; +import hudson.model.ParameterValue; +import hudson.model.StringParameterValue; +import hudson.model.TextParameterValue; + +import java.util.Collections; + +import net.sf.json.JSONObject; + +import org.jvnet.localizer.ResourceBundleHolder; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.StaplerRequest; + +/** Text parameter, with dynamically generated default value. */ +public class TextParameterDefinition extends ScriptParameterDefinition +{ + /** Serial version UID. */ + private static final long serialVersionUID = 3162331168133114084L; + + private final Boolean readonlyInputField; + + /** + * Constructor with the parameter which are injected by the jenkins runtime. + * + * @param name parameter name + * @param script script, which generates the parameter value + * @param description parameter description + * @param uuid identifier (optional) + * @param remote execute the script on a remote node + * @param readonlyInputField should the input field marked as read only true / false + * @param classPath the class path description + */ + @DataBoundConstructor + public TextParameterDefinition(String name, String script, String description, String uuid, + Boolean remote, Boolean readonlyInputField, String classPath) + { + super(name, script, description, uuid, remote, classPath); + this.readonlyInputField = readonlyInputField; + } + + + /** + * Execute the script and return the default value for this parameter. + * @return the default value generated by the script or {@code null} + */ + public final String getDefaultValue() + { + return getScriptResultAsString(Collections. emptyMap()); + } + + /** + * Return default parameter value - used by trigger mechanism. + */ + @Override + public ParameterValue getDefaultParameterValue() { + TextParameterValue stringParameterValue = new TextParameterValue(getName(), getDefaultValue()); + return stringParameterValue; + } + + /** + * Return a Parameter value object for a command line parameter. + */ + @Override + public ParameterValue createValue(String value) + { + StringParameterValue parameterValue = new TextParameterValue(getName(), value, getDescription()); + return checkParameterValue(parameterValue); + } + + @Override + public ParameterValue createValue(StaplerRequest req, JSONObject jo) + { + TextParameterValue value = req.bindJSON(TextParameterValue.class, jo); + value.setDescription(getDescription()); + return value; + } + + public final boolean isReadonlyInputField() + { + if(readonlyInputField == null) + { + return false; + } + return readonlyInputField; + } + + /** Parameter descriptor. */ + @Extension + public static final class DescriptorImpl extends BaseDescriptor + { + private static final String DISPLAY_NAME = "DisplayName"; + + @Override + public final String getDisplayName() + { + return ResourceBundleHolder.get(TextParameterDefinition.class).format(DISPLAY_NAME); + } + } + +} diff --git a/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition.java b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition.java new file mode 100644 index 0000000..1914f9e --- /dev/null +++ b/src/main/java/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition.java @@ -0,0 +1,124 @@ +/* + * Copyright 2012 Seitenbau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.seitenbau.jenkins.plugins.dynamicparameter.scriptler; + +import hudson.Extension; +import hudson.model.ParameterValue; +import hudson.model.BooleanParameterValue; + +import java.util.Map; +import java.util.Set; + +import net.sf.json.JSONObject; + +import org.jenkinsci.plugins.scriptler.config.Script; +import org.jvnet.localizer.ResourceBundleHolder; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.StaplerRequest; + +import com.seitenbau.jenkins.plugins.dynamicparameter.util.JenkinsUtils; + +/** Text parameter, with dynamically generated default value. */ +public class ScriptlerBooleanParameterDefinition extends ScriptlerParameterDefinition +{ + /** Serial version UID. */ + private static final long serialVersionUID = 3473431531782581400L; + + private final Boolean readonlyInputField; + + /** + * Constructor. + * @param name parameter name + * @param description parameter description + * @param uuid identifier (optional) + * @param scriptlerScriptId Scriptler script id + * @param parameters script parameters + * @param remote execute the script on a remote node + */ + @DataBoundConstructor + public ScriptlerBooleanParameterDefinition(String name, String description, String uuid, + String scriptlerScriptId, ScriptParameter[] parameters, Boolean remote, Boolean readonlyInputField) + { + super(name, description, uuid, scriptlerScriptId, parameters, remote); + this.readonlyInputField = readonlyInputField; + } + + /** + * Return default parameter value - used by trigger mechanism. + */ + @Override + public ParameterValue getDefaultParameterValue() { + BooleanParameterValue booleanParameterValue = new BooleanParameterValue(getName(), getDefaultValue()); + return booleanParameterValue; + } + + /** + * Return a Parameter value object for a command line parameter. + */ + @Override + public ParameterValue createValue(String value) + { + BooleanParameterValue parameterValue = new BooleanParameterValue(getName(), Boolean.parseBoolean(value), getDescription()); + return checkParameterValue(parameterValue); + } + + @Override + public ParameterValue createValue(StaplerRequest req, JSONObject jo) + { + BooleanParameterValue value = req.bindJSON(BooleanParameterValue.class, jo); + value.setDescription(getDescription()); + return value; + } + + /** + * Execute the script and return the default value for this parameter. + * @return the default value generated by the script or {@code null} + */ + public final boolean getDefaultValue() + { + Map parameters = getParametersAsMap(); + return Boolean.parseBoolean(getScriptResultAsString(parameters)); + } + + public boolean isReadonlyInputField() + { + if(readonlyInputField == null) + { + return false; + } + return readonlyInputField; + } + + /** Parameter descriptor. */ + @Extension + public static final class DescriptorImpl extends ParameterDescriptor + { + private static final String DISPLAY_NAME = "DisplayName"; + + @Override + public final String getDisplayName() + { + return ResourceBundleHolder.get(ScriptlerBooleanParameterDefinition.class) + .format(DISPLAY_NAME); + } + + public Set + + diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition/config_de.properties b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition/config_de.properties new file mode 100644 index 0000000..d89506f --- /dev/null +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition/config_de.properties @@ -0,0 +1,26 @@ +# Copyright 2012 Seitenbau +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +Name=Name +Remote\ Script=Remote-Skript +Description=Beschreibung +WarnNoScript=Keine Skripte +Script=Skript +Parameter\ name=Parameter Name +Parameter\ value=Parameter Wert +Delete\ Parameter=Parameter Löschen +Add\ Parameter=Parameter Zufügen +View\ Script=Skript Anzeigen +Parameters=Parameter +Readonly\ Input\ Field=Eingabefeld kann nicht editiert werden diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition/index.jelly b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition/index.jelly new file mode 100644 index 0000000..2697166 --- /dev/null +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerBooleanParameterDefinition/index.jelly @@ -0,0 +1,30 @@ + + + +
+ + + + + + + +
+
+
diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerChoiceParameterDefinition/index.jelly b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerChoiceParameterDefinition/index.jelly index 1f563ad..a52df03 100644 --- a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerChoiceParameterDefinition/index.jelly +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerChoiceParameterDefinition/index.jelly @@ -32,19 +32,19 @@ limitations under the License. - + - + diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition.properties b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition.properties new file mode 100644 index 0000000..8663686 --- /dev/null +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition.properties @@ -0,0 +1,15 @@ +# Copyright 2012 Seitenbau +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +DisplayName=Dynamic Text Parameter (Scriptler) diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/config.jelly b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/config.jelly new file mode 100644 index 0000000..d56423d --- /dev/null +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/config.jelly @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/config_de.properties b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/config_de.properties new file mode 100644 index 0000000..d89506f --- /dev/null +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/config_de.properties @@ -0,0 +1,26 @@ +# Copyright 2012 Seitenbau +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +Name=Name +Remote\ Script=Remote-Skript +Description=Beschreibung +WarnNoScript=Keine Skripte +Script=Skript +Parameter\ name=Parameter Name +Parameter\ value=Parameter Wert +Delete\ Parameter=Parameter Löschen +Add\ Parameter=Parameter Zufügen +View\ Script=Skript Anzeigen +Parameters=Parameter +Readonly\ Input\ Field=Eingabefeld kann nicht editiert werden diff --git a/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/index.jelly b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/index.jelly new file mode 100644 index 0000000..bb2abb2 --- /dev/null +++ b/src/main/resources/com/seitenbau/jenkins/plugins/dynamicparameter/scriptler/ScriptlerTextParameterDefinition/index.jelly @@ -0,0 +1,30 @@ + + + +
+ + + + + + + +
+
+