Skip to content

Commit

Permalink
Adding defaultValue #35
Browse files Browse the repository at this point in the history
 * Also making regexpFilter optional.
 * Making expressionType optional and defaulting to JSONPath.
 * Found stacktrace in log when JSONPath does not match, avoiding that now.
  • Loading branch information
tomasbjerre committed Feb 6, 2018
1 parent a87bb57 commit 429a3e2
Show file tree
Hide file tree
Showing 9 changed files with 209 additions and 66 deletions.
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Generic Webhook Plugin Changelog
Changelog of Generic Webhook Plugin.
## Unreleased
### GitHub [#35](https://github.com/jenkinsci/generic-webhook-trigger-plugin/issues/35) Add defaultValue attribute to GenericVariables *enhancement*

**Adding defaultValue #35**

* Also making regexpFilter optional.
* Making expressionType optional and defaulting to JSONPath.
* Found stacktrace in log when JSONPath does not match, avoiding that now.

[78747111ca8b976](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/78747111ca8b976) Tomas Bjerre *2018-02-06 19:42:21*


### No issue

**Doc**


[a87bb57241904a5](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/a87bb57241904a5) Tomas Bjerre *2018-02-06 18:35:46*


## 1.24 (2018-02-05 20:06:59)
### GitHub [#32](https://github.com/jenkinsci/generic-webhook-trigger-plugin/issues/32) Do not show received payload in Jenkins job *enhancement*

Expand Down
15 changes: 11 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,9 @@ job('Generic Job Example') {
genericVariable {
key("VARIABLE_FROM_POST")
value("\$.something")
expressionType("JSONPath")
regexpFilter("")
expressionType("JSONPath") //Optional, defaults to JSONPath
regexpFilter("") //Optional, defaults to empty string
defaultValue("") //Optional, defaults to empty string
}
}
genericRequestVariables {
Expand Down Expand Up @@ -155,8 +156,14 @@ node {
pipelineTriggers([
[$class: 'GenericTrigger',
genericVariables: [
[expressionType: 'JSONPath', key: 'reference', value: '$.ref'],
[expressionType: 'JSONPath', key: 'before', value: '$.before']
[key: 'reference', value: '$.ref'],
[
key: 'before',
value: '$.before',
expressionType: 'JSONPath', //Optional, defaults to JSONPath
regexpFilter: '', //Optional, defaults to empty string
defaultValue: '' //Optional, defaults to empty string
]
],
genericRequestVariables: [
[key: 'requestWithNumber', regexpFilter: '[^0-9]'],
Expand Down
10 changes: 8 additions & 2 deletions sandbox/multibranch.jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,14 @@ node {
pipelineTriggers([
[$class: 'GenericTrigger',
genericVariables: [
[expressionType: 'JSONPath', key: 'reference', value: '$.ref'],
[expressionType: 'JSONPath', key: 'before', value: '$.before']
[key: 'reference', value: '$.ref'],
[
key: 'before',
value: '$.before',
expressionType: 'JSONPath', //Optional, defaults to JSONPath
regexpFilter: '', //Optional, defaults to empty string
defaultValue: '' //Optional, defaults to empty string
]
],
genericRequestVariables: [
[key: 'requestWithNumber', regexpFilter: '[^0-9]'],
Expand Down
8 changes: 7 additions & 1 deletion sandbox/sandbox.jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ node {
[$class: 'GenericTrigger',
genericVariables: [
[expressionType: 'JSONPath', key: 'reference', value: '$.ref'],
[expressionType: 'JSONPath', key: 'before', value: '$.before']
[
key: 'before',
value: '$.before',
expressionType: 'JSONPath', //Optional, defaults to JSONPath
regexpFilter: '', //Optional, defaults to empty string
defaultValue: '' //Optional, defaults to empty string
]
],
printContributedVariables: true,
printPostContent: true,
Expand Down
35 changes: 26 additions & 9 deletions src/main/java/org/jenkinsci/plugins/gwt/GenericVariable.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import hudson.model.Descriptor;

import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;

public class GenericVariable extends AbstractDescribableImpl<GenericVariable> {

Expand All @@ -19,21 +20,34 @@ public String getDisplayName() {
}
}

private final ExpressionType expressionType;
private ExpressionType expressionType;
private final String key;
private final String value;
private final String regexpFilter;
private String regexpFilter;
private String defaultValue;

@DataBoundConstructor
public GenericVariable(
String key, String value, ExpressionType expressionType, String regexpFilter) {
public GenericVariable(String key, String value) {
this.key = checkNotNull(key, "Variable name");
this.value = checkNotNull(value, "Variable expression");
if (expressionType == null) {
this.expressionType = JSONPath;
} else {
this.expressionType = expressionType;
}
}

@DataBoundSetter
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}

public String getDefaultValue() {
return defaultValue;
}

@DataBoundSetter
public void setExpressionType(ExpressionType expressionType) {
this.expressionType = expressionType;
}

@DataBoundSetter
public void setRegexpFilter(String regexpFilter) {
this.regexpFilter = regexpFilter;
}

Expand All @@ -42,6 +56,9 @@ public String getRegexpFilter() {
}

public ExpressionType getExpressionType() {
if (expressionType == null) {
return JSONPath;
}
return expressionType;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jenkinsci.plugins.gwt.resolvers;

import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.collect.Maps.newHashMap;
import static java.util.logging.Level.INFO;
import static org.jenkinsci.plugins.gwt.ExpressionType.JSONPath;
Expand All @@ -25,6 +26,7 @@

import com.google.common.base.Charsets;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException;

public class PostContentParameterResolver {
private static final Logger LOGGER = Logger.getLogger(VariablesResolver.class.getName());
Expand All @@ -39,7 +41,15 @@ public Map<String, String> getPostContentParameters(
final Map<String, String> resolvedVariables = newHashMap();
if (configuredGenericVariables != null) {
for (final GenericVariable gv : configuredGenericVariables) {
resolvedVariables.putAll(resolve(incomingPostContent, gv));
final Map<String, String> resolvedMap = resolve(incomingPostContent, gv);
final boolean notResolved =
resolvedMap.isEmpty()
|| resolvedMap.containsKey(gv.getVariableName())
&& resolvedMap.get(gv.getVariableName()).isEmpty();
if (notResolved && !isNullOrEmpty(gv.getDefaultValue())) {
resolvedMap.put(gv.getVariableName(), gv.getDefaultValue());
}
resolvedVariables.putAll(resolvedMap);
}
}
return resolvedVariables;
Expand Down Expand Up @@ -74,8 +84,12 @@ private Map<String, String> resolve(final String incomingPostContent, final Gene

private Map<String, String> resolveJsonPath(
final String incomingPostContent, final GenericVariable gv) {
final Object resolved = JsonPath.read(incomingPostContent, gv.getExpression());
return jsonFlattener.flattenJson(gv.getVariableName(), gv.getRegexpFilter(), resolved);
try {
final Object resolved = JsonPath.read(incomingPostContent, gv.getExpression());
return jsonFlattener.flattenJson(gv.getVariableName(), gv.getRegexpFilter(), resolved);
} catch (final PathNotFoundException e) {
return new HashMap<>();
}
}

private Map<String, String> resolveXPath(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@
</f:description>
</f:entry>

<f:entry title="Default value">
<f:textbox field="defaultValue" />
<f:description>
Optional. This value will be used if expression does not match anything.
</f:description>
</f:entry>

<f:entry>
<f:repeatableDeleteButton />
</f:entry>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.jenkinsci.plugins.gwt.ExpressionType.JSONPath;

import java.util.ArrayList;
import java.util.Enumeration;
Expand Down Expand Up @@ -125,10 +124,9 @@ public void testJSONPathGetAllVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);

final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("ids", "$..id", JSONPath, regexpFilter));
new GenericVariable("ids", "$..id"));
final Map<String, String[]> parameterMap = new HashMap<>();
final String[] values1 = new String[] {"a", "b"};
parameterMap.put("reqp1", values1);
Expand Down Expand Up @@ -210,10 +208,9 @@ public void testJSONPathGetZeroMatchingVariables() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);

final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("ids", "$..abc", JSONPath, regexpFilter));
new GenericVariable("ids", "$..abc"));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
Expand All @@ -238,10 +235,9 @@ public void testJSONPathGetOneVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);

final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("user_name", "$.user.name", JSONPath, regexpFilter));
new GenericVariable("user_name", "$.user.name"));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
Expand All @@ -264,11 +260,12 @@ public void testJSONPathGetTwoVariables() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);

final String regexpFilter = "";
final GenericVariable genericVariable1 = new GenericVariable("user_name", "$.user.name");
genericVariable1.setRegexpFilter("[aA]");
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("user_name", "$.user.name", JSONPath, "[aA]"), //
new GenericVariable("project_id", "$.project_id", JSONPath, regexpFilter));
genericVariable1, //
new GenericVariable("project_id", "$.project_id"));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
Expand Down Expand Up @@ -301,10 +298,9 @@ public void testJSONPathGetPayloadVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);

final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("payload", "$", JSONPath, regexpFilter));
new GenericVariable("payload", "$"));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
Expand All @@ -321,6 +317,32 @@ public void testJSONPathGetPayloadVariable() throws Exception {
.containsEntry("payload_user_name", "Administrator");
}

@Test
public void testJSONPathGetPayloadVariableDefault() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);

final GenericVariable genericVariable = new GenericVariable("payload", "$.doesnotexist");
genericVariable.setDefaultValue("this is the default");
final List<GenericVariable> genericVariables =
newArrayList( //
genericVariable);
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
.getVariables();

assertThat(variables) //
.containsEntry("payload", "this is the default");
}

@Test
public void testStarOperator() throws Exception {
final String resourceName = "github-push-event.json";
Expand Down Expand Up @@ -358,10 +380,9 @@ private Map<String, String> getJsonPathVariables(

private Map<String, String> getJsonPathVariablesFromContent(
final String jsonPath, final String postContent) {
final String regexpFilter = "";
final List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("variableName", jsonPath, JSONPath, regexpFilter));
new GenericVariable("variableName", jsonPath));
final Map<String, String[]> parameterMap = new HashMap<>();
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
Expand Down
Loading

0 comments on commit 429a3e2

Please sign in to comment.