Skip to content

Commit 291833b

Browse files
committed
fix: litening for job changes with both SaveableListener and ItemListener (refs #319)
1 parent 3954ee9 commit 291833b

File tree

3 files changed

+60
-43
lines changed

3 files changed

+60
-43
lines changed

debug.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
MAVEN_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n" \
44
./mvnw hpi:run \
55
-Djava.util.logging.config.file=logging.properties \
6-
-Djenkins.version=2.361.4 \
6+
-Djenkins.version=2.452.2 \
77
-Denforcer.skip=true \
88
-Dhudson.model.ParametersAction.keepUndefinedParameters=true

run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
./mvnw versions:update-properties
33
./mvnw hpi:run \
44
-Djava.util.logging.config.file=logging.properties \
5-
-Djenkins.version=2.426.3 \
5+
-Djenkins.version=2.452.2 \
66
-Denforcer.skip=true \
77
-Dhudson.model.ParametersAction.keepUndefinedParameters=true
Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.jenkinsci.plugins.gwt.jobfinder;
22

33
import hudson.Extension;
4+
import hudson.XmlFile;
45
import hudson.model.Item;
6+
import hudson.model.Saveable;
57
import hudson.model.listeners.ItemListener;
8+
import hudson.model.listeners.SaveableListener;
69
import hudson.security.ACL;
710
import java.util.ArrayList;
811
import java.util.List;
@@ -16,11 +19,60 @@
1619
import org.acegisecurity.context.SecurityContext;
1720
import org.acegisecurity.context.SecurityContextHolder;
1821

19-
@Extension
20-
public class JobFinderImpersonater extends ItemListener {
22+
public class JobFinderImpersonater {
2123
private static Logger LOGGER = Logger.getLogger(JobFinderImpersonater.class.getName());
2224
private static final Map<String, ParameterizedJob> JOBS_WITH_GWT = new ConcurrentHashMap<>();
2325

26+
@Extension
27+
public static class JobItemListener extends ItemListener {
28+
@Override
29+
public void onLoaded() {
30+
for (final ParameterizedJob job : doGetAllParameterizedJobs(true)) {
31+
JobFinderImpersonater.putJob(job);
32+
}
33+
LOGGER.info("Loaded " + JOBS_WITH_GWT.size() + " jobs in cache");
34+
}
35+
36+
@Override
37+
public void onUpdated(final Item job) {
38+
JobFinderImpersonater.putJob(job);
39+
}
40+
41+
@Override
42+
public void onCreated(final Item job) {
43+
JobFinderImpersonater.putJob(job);
44+
}
45+
46+
@Override
47+
public void onDeleted(final Item job) {
48+
JobFinderImpersonater.deleteJob(job);
49+
}
50+
51+
@Override
52+
public void onCopied(final Item src, final Item job) {
53+
JobFinderImpersonater.putJob(job);
54+
}
55+
56+
@Override
57+
public void onLocationChanged(
58+
final Item item, final String oldFullName, final String newFullName) {
59+
JOBS_WITH_GWT.remove(oldFullName);
60+
JobFinderImpersonater.putJob(item);
61+
}
62+
}
63+
64+
@Extension
65+
public static class JobItemSaveListener extends SaveableListener {
66+
@Override
67+
public void onChange(final Saveable o, final XmlFile file) {
68+
if (o instanceof ParameterizedJob) {
69+
final ParameterizedJob<?, ?> job = (ParameterizedJob<?, ?>) o;
70+
LOGGER.finest("Saving " + job.getFullName());
71+
JobFinderImpersonater.putJob(job);
72+
}
73+
}
74+
}
75+
2476
public List<ParameterizedJob> getAllParameterizedJobs(final boolean impersonate) {
2577
if (LOGGER.isLoggable(Level.FINEST)) {
2678
LOGGER.finest("There are " + this.JOBS_WITH_GWT.size() + " jobs in cache:");
@@ -55,53 +107,18 @@ private static List<ParameterizedJob> doGetAllParameterizedJobs(final boolean im
55107
}
56108
}
57109

58-
@Override
59-
public void onLoaded() {
60-
for (final ParameterizedJob job : doGetAllParameterizedJobs(true)) {
61-
this.putJob(job);
62-
}
63-
LOGGER.info("Loaded " + this.JOBS_WITH_GWT.size() + " jobs in cache");
64-
}
65-
66-
@Override
67-
public void onUpdated(final Item job) {
68-
this.putJob(job);
69-
}
70-
71-
@Override
72-
public void onCreated(final Item job) {
73-
this.putJob(job);
74-
}
75-
76-
@Override
77-
public void onDeleted(final Item job) {
78-
this.deleteJob(job);
79-
}
80-
81-
@Override
82-
public void onCopied(final Item src, final Item job) {
83-
this.putJob(job);
84-
}
85-
86-
@Override
87-
public void onLocationChanged(
88-
final Item item, final String oldFullName, final String newFullName) {
89-
this.JOBS_WITH_GWT.remove(oldFullName);
90-
this.putJob(item);
91-
}
92-
93-
private void putJob(final Item job) {
110+
private static void putJob(final Item job) {
94111
if (job instanceof ParameterizedJob) {
95112
final ParameterizedJob parameterizedJob = (ParameterizedJob) job;
96113
final boolean hasGenericTrigger =
97114
GenericTriggerFinder.findGenericTrigger(parameterizedJob.getTriggers()) != null;
98115
if (hasGenericTrigger) {
99-
this.JOBS_WITH_GWT.put(parameterizedJob.getFullName(), parameterizedJob);
116+
JOBS_WITH_GWT.put(parameterizedJob.getFullName(), parameterizedJob);
100117
}
101118
}
102119
}
103120

104-
private void deleteJob(final Item job) {
105-
this.JOBS_WITH_GWT.remove(job.getFullName());
121+
private static void deleteJob(final Item job) {
122+
JOBS_WITH_GWT.remove(job.getFullName());
106123
}
107124
}

0 commit comments

Comments
 (0)