forked from morficus/Parameterized-Remote-Trigger-Plugin
-
Notifications
You must be signed in to change notification settings - Fork 141
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
1,092 additions
and
754 deletions.
There are no files selected for viewing
256 changes: 89 additions & 167 deletions
256
src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java
Large diffs are not rendered by default.
Oops, something went wrong.
118 changes: 118 additions & 0 deletions
118
...ain/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/parameters2/FileParameters.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
package org.jenkinsci.plugins.ParameterizedRemoteTrigger.parameters2; | ||
|
||
import static java.nio.charset.StandardCharsets.UTF_8; | ||
import static java.util.stream.Collectors.joining; | ||
|
||
import javax.annotation.Nonnull; | ||
import java.io.BufferedReader; | ||
import java.io.IOException; | ||
import java.io.InputStreamReader; | ||
import java.util.Map; | ||
import java.util.Objects; | ||
|
||
import org.jenkinsci.Symbol; | ||
import org.jenkinsci.plugins.ParameterizedRemoteTrigger.BuildContext; | ||
import org.kohsuke.stapler.DataBoundConstructor; | ||
import org.kohsuke.stapler.DataBoundSetter; | ||
|
||
import hudson.AbortException; | ||
import hudson.Extension; | ||
import hudson.FilePath; | ||
|
||
public class FileParameters extends JobParameters { | ||
|
||
private static final long serialVersionUID = 3614172320192170597L; | ||
|
||
@Extension | ||
public static final FileParametersDescriptor DESCRIPTOR = new FileParametersDescriptor(); | ||
|
||
private String filePath; | ||
|
||
@DataBoundConstructor | ||
public FileParameters() { | ||
this.filePath = null; | ||
} | ||
|
||
public FileParameters(String filePath) { | ||
this.filePath = filePath; | ||
} | ||
|
||
@DataBoundSetter | ||
public void setFilePath(final String filePath) { | ||
this.filePath = filePath; | ||
} | ||
|
||
public String getFilePath() { | ||
return filePath; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "(" + getClass().getSimpleName() + ") " + filePath; | ||
} | ||
|
||
@Override | ||
public FileParametersDescriptor getDescriptor() { | ||
return DESCRIPTOR; | ||
} | ||
|
||
@Override | ||
public Map<String, String> getParametersMap(final BuildContext context) throws AbortException { | ||
final String parametersAsString = readParametersFile(context); | ||
return JobParameters.parseStringParameters(parametersAsString); | ||
} | ||
|
||
private String readParametersFile(final BuildContext context) throws AbortException { | ||
if (context.workspace == null) { | ||
throw new AbortException("Workspace is null but parameter file is used. Looks like this step was started with \"agent: none\""); | ||
} | ||
|
||
BufferedReader reader = null; | ||
try { | ||
final FilePath absoluteFilePath = context.workspace.child(getFilePath()); | ||
context.logger.printf("Loading parameters from file %s%n", absoluteFilePath.getRemote()); | ||
|
||
reader = new BufferedReader(new InputStreamReader(absoluteFilePath.read(), UTF_8)); | ||
return reader.lines().collect(joining("\n")); | ||
|
||
} catch (final InterruptedException | IOException e) { | ||
context.logger.printf("[WARNING] Failed loading parameters: %s%n", e.getMessage()); | ||
return ""; | ||
|
||
} finally { | ||
try { | ||
if (reader != null) { | ||
reader.close(); | ||
} | ||
} catch (final IOException ex) { | ||
ex.printStackTrace(); | ||
} | ||
} | ||
} | ||
|
||
@Symbol("FileParameters") | ||
public static class FileParametersDescriptor extends ParametersDescriptor { | ||
@Nonnull | ||
@Override | ||
public String getDisplayName() { | ||
return "File parameters"; | ||
} | ||
} | ||
|
||
@Override | ||
public boolean equals(final Object o) { | ||
if (this == o) { | ||
return true; | ||
} | ||
if (o == null || getClass() != o.getClass()) { | ||
return false; | ||
} | ||
final FileParameters that = (FileParameters) o; | ||
return Objects.equals(filePath, that.filePath); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(filePath); | ||
} | ||
} |
82 changes: 82 additions & 0 deletions
82
...main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/parameters2/JobParameters.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
package org.jenkinsci.plugins.ParameterizedRemoteTrigger.parameters2; | ||
|
||
import static java.util.stream.Collectors.toMap; | ||
|
||
import java.io.Serializable; | ||
import java.util.AbstractMap; | ||
import java.util.Arrays; | ||
import java.util.Map; | ||
import java.util.Map.Entry; | ||
import java.util.function.Predicate; | ||
|
||
import org.jenkinsci.plugins.ParameterizedRemoteTrigger.BuildContext; | ||
|
||
import hudson.AbortException; | ||
import hudson.DescriptorExtensionList; | ||
import hudson.model.AbstractDescribableImpl; | ||
import hudson.model.Descriptor; | ||
import jenkins.model.Jenkins; | ||
|
||
public abstract class JobParameters extends AbstractDescribableImpl<JobParameters> implements Serializable, Cloneable { | ||
|
||
private static final DescriptorExtensionList<JobParameters, ParametersDescriptor> ALL = | ||
DescriptorExtensionList.createDescriptorList(Jenkins.getInstance(), JobParameters.class); | ||
|
||
public static DescriptorExtensionList<JobParameters, ParametersDescriptor> all() { | ||
return ALL; | ||
} | ||
|
||
public static JobParameters migrateOldParameters(final String parameters, final String parameterFile) { | ||
if (parameterFile != null) { | ||
return new FileParameters(parameterFile); | ||
} | ||
|
||
if (parameters != null) { | ||
return new StringParameters(parameters); | ||
} | ||
|
||
return new MapParameters(); | ||
} | ||
|
||
public static Map<String, String> parseStringParameters(final String parametersAsString) { | ||
return Arrays.stream(parametersAsString.split("\\n")) | ||
.filter(not(JobParameters::isBlankLine)) | ||
.filter(not(JobParameters::isCommentedLine)) | ||
.filter(JobParameters::containsEqualSign) | ||
.map(JobParameters::splitParameterLine) | ||
.collect(toMap(Entry::getKey, Entry::getValue)); | ||
} | ||
|
||
private static <T> Predicate<T> not(Predicate<T> t) { | ||
return t.negate(); | ||
} | ||
|
||
private static boolean isBlankLine(String line) { | ||
return line.trim().isEmpty(); | ||
} | ||
|
||
private static boolean isCommentedLine(String line) { | ||
return line.trim().startsWith("#"); | ||
} | ||
|
||
private static boolean containsEqualSign(String line) { | ||
return line.contains("="); | ||
} | ||
|
||
private static Entry<String, String> splitParameterLine(String line) { | ||
final int firstIndexOfEqualSign = line.indexOf("="); | ||
return new AbstractMap.SimpleEntry<>( | ||
line.substring(0, firstIndexOfEqualSign), | ||
line.substring(firstIndexOfEqualSign + 1) | ||
); | ||
} | ||
|
||
public static abstract class ParametersDescriptor extends Descriptor<JobParameters> { } | ||
|
||
public abstract Map<String, String> getParametersMap(final BuildContext context) throws AbortException; | ||
|
||
@Override | ||
public JobParameters clone() throws CloneNotSupportedException { | ||
return (JobParameters) super.clone(); | ||
} | ||
} |
86 changes: 86 additions & 0 deletions
86
src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/parameters2/MapParameter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
package org.jenkinsci.plugins.ParameterizedRemoteTrigger.parameters2; | ||
|
||
import javax.annotation.Nonnull; | ||
import java.io.Serializable; | ||
import java.util.Objects; | ||
|
||
import org.jenkinsci.Symbol; | ||
import org.kohsuke.stapler.DataBoundConstructor; | ||
import org.kohsuke.stapler.DataBoundSetter; | ||
|
||
import hudson.Extension; | ||
import hudson.model.AbstractDescribableImpl; | ||
import hudson.model.Descriptor; | ||
|
||
public class MapParameter extends AbstractDescribableImpl<MapParameter> implements Cloneable, Serializable { | ||
|
||
@Extension | ||
public static final MapParameterDescriptor DESCRIPTOR = new MapParameterDescriptor(); | ||
|
||
private String name; | ||
private String value; | ||
|
||
@DataBoundConstructor | ||
public MapParameter() { | ||
this("", ""); | ||
} | ||
|
||
public MapParameter(String name, String value) { | ||
this.name = name; | ||
this.value = value; | ||
} | ||
|
||
@DataBoundSetter | ||
public void setName(String name) { | ||
this.name = name; | ||
} | ||
|
||
@DataBoundSetter | ||
public void setValue(String value) { | ||
this.value = value; | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public String getValue() { | ||
return value; | ||
} | ||
|
||
@Override | ||
public MapParameter clone() throws CloneNotSupportedException { | ||
return (MapParameter) super.clone(); | ||
} | ||
|
||
@Override | ||
public Descriptor<MapParameter> getDescriptor() { | ||
return DESCRIPTOR; | ||
} | ||
|
||
@Symbol("MapParameter") | ||
public static class MapParameterDescriptor extends Descriptor<MapParameter> { | ||
@Nonnull | ||
@Override | ||
public String getDisplayName() { | ||
return "Map parameter"; | ||
} | ||
} | ||
|
||
@Override | ||
public boolean equals(final Object o) { | ||
if (this == o) { | ||
return true; | ||
} | ||
if (o == null || getClass() != o.getClass()) { | ||
return false; | ||
} | ||
final MapParameter that = (MapParameter) o; | ||
return Objects.equals(name, that.name) && Objects.equals(value, that.value); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(name, value); | ||
} | ||
} |
101 changes: 101 additions & 0 deletions
101
...main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/parameters2/MapParameters.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package org.jenkinsci.plugins.ParameterizedRemoteTrigger.parameters2; | ||
|
||
import static java.util.stream.Collectors.toMap; | ||
|
||
import edu.umd.cs.findbugs.annotations.NonNull; | ||
|
||
import javax.annotation.Nonnull; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Objects; | ||
|
||
import org.jenkinsci.Symbol; | ||
import org.jenkinsci.plugins.ParameterizedRemoteTrigger.BuildContext; | ||
import org.kohsuke.stapler.DataBoundConstructor; | ||
import org.kohsuke.stapler.DataBoundSetter; | ||
|
||
import hudson.Extension; | ||
|
||
public class MapParameters extends JobParameters { | ||
|
||
private static final long serialVersionUID = 3614172320192170597L; | ||
|
||
@Extension | ||
public static final MapParametersDescriptor DESCRIPTOR = new MapParametersDescriptor(); | ||
|
||
private final List<MapParameter> parameters = new ArrayList<>(); | ||
|
||
@DataBoundConstructor | ||
public MapParameters() {} | ||
|
||
public MapParameters(@NonNull Map<String, String> parametersMap) { | ||
setParametersMap(parametersMap); | ||
} | ||
|
||
@DataBoundSetter | ||
public void setParameters(final List<MapParameter> parameters) { | ||
this.parameters.clear(); | ||
if (parameters != null) { | ||
this.parameters.addAll(parameters); | ||
} | ||
} | ||
|
||
public void setParametersMap(final Map<String, String> parametersMap) { | ||
this.parameters.clear(); | ||
if (parametersMap != null) { | ||
parametersMap | ||
.entrySet() | ||
.stream() | ||
.map(entry -> new MapParameter(entry.getKey(), entry.getValue())) | ||
.forEach(parameters::add); | ||
} | ||
} | ||
|
||
public List<MapParameter> getParameters() { | ||
return parameters; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "(" + getClass().getSimpleName() + ") " + parameters; | ||
} | ||
|
||
@Override | ||
public MapParametersDescriptor getDescriptor() { | ||
return DESCRIPTOR; | ||
} | ||
|
||
@Override | ||
public Map<String, String> getParametersMap(final BuildContext context) { | ||
return parameters | ||
.stream() | ||
.collect(toMap(MapParameter::getName, MapParameter::getValue)); | ||
} | ||
|
||
@Symbol("MapParameters") | ||
public static class MapParametersDescriptor extends ParametersDescriptor { | ||
@Nonnull | ||
@Override | ||
public String getDisplayName() { | ||
return "Map parameters"; | ||
} | ||
} | ||
|
||
@Override | ||
public boolean equals(final Object o) { | ||
if (this == o) { | ||
return true; | ||
} | ||
if (o == null || getClass() != o.getClass()) { | ||
return false; | ||
} | ||
final MapParameters that = (MapParameters) o; | ||
return Objects.equals(parameters, that.parameters); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(parameters); | ||
} | ||
} |
Oops, something went wrong.