/
ContentBuilder.java
133 lines (120 loc) · 6.17 KB
/
ContentBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package hudson.plugins.emailext.plugins;
import hudson.CopyOnWrite;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.plugins.emailext.ExtendedEmailPublisher;
import hudson.plugins.emailext.ExtendedEmailPublisherContext;
import hudson.tasks.Publisher;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import jenkins.model.Jenkins;
import net.java.sezpoz.Index;
import net.java.sezpoz.IndexItem;
import org.apache.commons.lang.StringUtils;
import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException;
import org.jenkinsci.plugins.tokenmacro.TokenMacro;
/**
* {@link Publisher} that sends notification e-mail.
*
* @author kyle.sweeney@valtech.com
*
*/
public final class ContentBuilder {
@CopyOnWrite
private static volatile List<TokenMacro> privateMacros;
private static final String DEFAULT_BODY = "\\$DEFAULT_CONTENT|\\$\\{DEFAULT_CONTENT\\}";
private static final String DEFAULT_SUBJECT = "\\$DEFAULT_SUBJECT|\\$\\{DEFAULT_SUBJECT\\}";
private static final String DEFAULT_RECIPIENTS = "\\$DEFAULT_RECIPIENTS|\\$\\{DEFAULT_RECIPIENTS\\}";
private static final String DEFAULT_REPLYTO = "\\$DEFAULT_REPLYTO|\\$\\{DEFAULT_REPLYTO\\}";
private static final String DEFAULT_PRESEND_SCRIPT = "\\$DEFAULT_PRESEND_SCRIPT|\\$\\{DEFAULT_PRESEND_SCRIPT\\}";
private static final String DEFAULT_POSTSEND_SCRIPT = "\\$DEFAULT_POSTSEND_SCRIPT|\\$\\{DEFAULT_POSTSEND_SCRIPT\\}";
private static final String PROJECT_DEFAULT_BODY = "\\$PROJECT_DEFAULT_CONTENT|\\$\\{PROJECT_DEFAULT_CONTENT\\}";
private static final String PROJECT_DEFAULT_SUBJECT = "\\$PROJECT_DEFAULT_SUBJECT|\\$\\{PROJECT_DEFAULT_SUBJECT\\}";
private static final String PROJECT_DEFAULT_REPLYTO = "\\$PROJECT_DEFAULT_REPLYTO|\\$\\{PROJECT_DEFAULT_REPLYTO\\}";
private ContentBuilder() {
throw new InstantiationError("Must not instantiate this class");
}
private static String noNull(String string) {
return string == null ? "" : string;
}
public static String transformText(
String origText, ExtendedEmailPublisherContext context, List<TokenMacro> additionalMacros) {
if (StringUtils.isBlank(origText)) {
return "";
}
String defaultContent = Matcher.quoteReplacement(noNull(context.getPublisher().defaultContent));
String defaultSubject = Matcher.quoteReplacement(noNull(context.getPublisher().defaultSubject));
String defaultReplyTo = Matcher.quoteReplacement(noNull(context.getPublisher().replyTo));
String defaultBody = Matcher.quoteReplacement(
noNull(context.getPublisher().getDescriptor().getDefaultBody()));
String defaultExtSubject = Matcher.quoteReplacement(
noNull(context.getPublisher().getDescriptor().getDefaultSubject()));
String defaultRecipients = Matcher.quoteReplacement(
noNull(context.getPublisher().getDescriptor().getDefaultRecipients()));
String defaultExtReplyTo = Matcher.quoteReplacement(
noNull(context.getPublisher().getDescriptor().getDefaultReplyTo()));
String defaultPresendScript = Matcher.quoteReplacement(
noNull(context.getPublisher().getDescriptor().getDefaultPresendScript()));
String defaultPostsendScript = Matcher.quoteReplacement(
noNull(context.getPublisher().getDescriptor().getDefaultPostsendScript()));
String newText = origText.replaceAll(PROJECT_DEFAULT_BODY, defaultContent)
.replaceAll(PROJECT_DEFAULT_SUBJECT, defaultSubject)
.replaceAll(PROJECT_DEFAULT_REPLYTO, defaultReplyTo)
.replaceAll(DEFAULT_BODY, defaultBody)
.replaceAll(DEFAULT_SUBJECT, defaultExtSubject)
.replaceAll(DEFAULT_RECIPIENTS, defaultRecipients)
.replaceAll(DEFAULT_REPLYTO, defaultExtReplyTo)
.replaceAll(DEFAULT_PRESEND_SCRIPT, defaultPresendScript)
.replaceAll(DEFAULT_POSTSEND_SCRIPT, defaultPostsendScript);
try {
List<TokenMacro> macros = new ArrayList<>(getPrivateMacros());
if (additionalMacros != null) {
macros.addAll(additionalMacros);
}
if (context.getRun() != null) {
newText = TokenMacro.expandAll(
context.getRun(), context.getWorkspace(), context.getListener(), newText, false, macros);
} else {
context.getListener().getLogger().println("Job type does not allow token replacement.");
}
} catch (MacroEvaluationException e) {
context.getListener().getLogger().println("Error evaluating token: " + e.getMessage());
} catch (Exception e) {
Logger.getLogger(ContentBuilder.class.getName()).log(Level.SEVERE, null, e);
}
return newText != null ? newText.trim() : "";
}
@Deprecated
public static String transformText(
String origText, ExtendedEmailPublisher publisher, AbstractBuild<?, ?> build, BuildListener listener) {
return transformText(origText, publisher, build, null, listener);
}
public static String transformText(
String origText,
ExtendedEmailPublisher publisher,
AbstractBuild<?, ?> build,
Launcher launcher,
BuildListener listener) {
ExtendedEmailPublisherContext context = new ExtendedEmailPublisherContext(publisher, build, null, listener);
return transformText(origText, context, null);
}
public static synchronized List<TokenMacro> getPrivateMacros() {
if (privateMacros != null) {
return privateMacros;
}
privateMacros = new ArrayList<>();
ClassLoader cl = Jenkins.get().pluginManager.uberClassLoader;
for (final IndexItem<EmailToken, TokenMacro> item : Index.load(EmailToken.class, TokenMacro.class, cl)) {
try {
privateMacros.add(item.instance());
} catch (Exception e) {
// ignore errors loading tokens
}
}
return privateMacros;
}
}