From 8d3619c3106c88da29c94c2baa2ea54c8b7acbaa Mon Sep 17 00:00:00 2001 From: kohsuke Date: Tue, 24 Feb 2009 23:44:34 +0000 Subject: [PATCH] ItemListener is updated to support auto discovery git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15697 71c3de6d-444a-0410-be80-ed276b4c234a --- core/src/main/java/hudson/model/Hudson.java | 18 ++++---- .../hudson/model/listeners/ItemListener.java | 15 ++++++- .../main/java/hudson/tasks/BuildTrigger.java | 43 +++++++++---------- 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index 42c4c00936..be128b055b 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -58,7 +58,6 @@ import hudson.scm.CVSSCM; import hudson.scm.RepositoryBrowser; import hudson.scm.SCM; import hudson.scm.SCMDescriptor; -import hudson.scm.SCMS; import hudson.scm.SubversionSCM; import hudson.search.CollectionSearchIndex; import hudson.search.SearchIndexBuilder; @@ -82,7 +81,6 @@ import hudson.slaves.Cloud; import hudson.slaves.DumbSlave; import hudson.slaves.NodeDescriptor; import hudson.slaves.NodeProvisioner; -import hudson.tasks.BuildStep; import hudson.tasks.BuildWrapper; import hudson.tasks.Builder; import hudson.tasks.DynamicLabeler; @@ -353,8 +351,9 @@ public final class Hudson extends Node implements ItemGroup, Stapl /** * List of registered {@link ItemListener}s. + * @deprecated as of 1.286 */ - private transient final CopyOnWriteList itemListeners = new CopyOnWriteList(); + private transient final CopyOnWriteList itemListeners = ExtensionListView.createCopyOnWriteList(ItemListener.class); /** * List of registered {@link SCMListener}s. @@ -534,7 +533,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl getQueue().load(); - for (ItemListener l : itemListeners) + for (ItemListener l : ItemListener.all()) l.onLoaded(); WindowsInstallerLink.registerIfApplicable(); @@ -760,6 +759,9 @@ public final class Hudson extends Node implements ItemGroup, Stapl /** * Gets all the installed {@link ItemListener}s. + * + * @deprecated as of 1.286. + * Use {@link ItemListener#all()}. */ public CopyOnWriteList getJobListeners() { return itemListeners; @@ -776,7 +778,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl * Gets all the installed {@link ComputerListener}s. * * @deprecated as of 1.286. - * Use {@link #getExtensionList(Class)} with {@code ComputerListener}. + * Use {@link ComputerListener#all()}. */ public CopyOnWriteList getComputerListeners() { return computerListeners; @@ -1653,7 +1655,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl * Called in response to {@link Job#doDoDelete(StaplerRequest, StaplerResponse)} */ /*package*/ void deleteJob(TopLevelItem item) throws IOException { - for (ItemListener l : itemListeners) + for (ItemListener l : ItemListener.all()) l.onDeleted(item); items.remove(item.getName()); @@ -2224,7 +2226,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl result = createProject(Items.getDescriptor(mode), name); } - for (ItemListener l : itemListeners) + for (ItemListener l : ItemListener.all()) l.onCreated(result); } @@ -2261,7 +2263,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl result.onCopiedFrom(src); items.put(name,result); - for (ItemListener l : itemListeners) + for (ItemListener l : ItemListener.all()) l.onCreated(result); return result; diff --git a/core/src/main/java/hudson/model/listeners/ItemListener.java b/core/src/main/java/hudson/model/listeners/ItemListener.java index 2788c7a08f..14cf9c7c82 100644 --- a/core/src/main/java/hudson/model/listeners/ItemListener.java +++ b/core/src/main/java/hudson/model/listeners/ItemListener.java @@ -24,9 +24,10 @@ package hudson.model.listeners; import hudson.ExtensionPoint; +import hudson.ExtensionList; +import hudson.Extension; import hudson.model.Hudson; import hudson.model.Item; -import hudson.model.Job; /** * Receives notifications about CRUD operations of {@link Item}. @@ -72,8 +73,18 @@ public class ItemListener implements ExtensionPoint { /** * Registers this instance to Hudson and start getting notifications. + * + * @deprecated as of 1.286 + * put {@link Extension} on your class to have it auto-registered. */ public void register() { - Hudson.getInstance().getJobListeners().add(this); + all().add(this); + } + + /** + * All the registered {@link ItemListener}s. + */ + public static ExtensionList all() { + return Hudson.getInstance().getExtensionList(ItemListener.class); } } diff --git a/core/src/main/java/hudson/tasks/BuildTrigger.java b/core/src/main/java/hudson/tasks/BuildTrigger.java index 0b1f01f9e1..e0cb3533e2 100644 --- a/core/src/main/java/hudson/tasks/BuildTrigger.java +++ b/core/src/main/java/hudson/tasks/BuildTrigger.java @@ -239,28 +239,6 @@ public class BuildTrigger extends Recorder implements DependecyDeclarer, MatrixA @Extension public static class DescriptorImpl extends BuildStepDescriptor { - public DescriptorImpl() { - Hudson.getInstance().getJobListeners().add(new ItemListener() { - @Override - public void onRenamed(Item item, String oldName, String newName) { - // update BuildTrigger of other projects that point to this object. - // can't we generalize this? - for( Project p : Hudson.getInstance().getProjects() ) { - BuildTrigger t = p.getPublishersList().get(BuildTrigger.class); - if(t!=null) { - if(t.onJobRenamed(oldName,newName)) { - try { - p.save(); - } catch (IOException e) { - LOGGER.log(Level.WARNING, "Failed to persist project setting during rename from "+oldName+" to "+newName,e); - } - } - } - } - } - }); - } - public String getDisplayName() { return Messages.BuildTrigger_DisplayName(); } @@ -313,6 +291,27 @@ public class BuildTrigger extends Recorder implements DependecyDeclarer, MatrixA } }.process(); } + + @Extension + public static class ItemListenerImpl extends ItemListener { + @Override + public void onRenamed(Item item, String oldName, String newName) { + // update BuildTrigger of other projects that point to this object. + // can't we generalize this? + for( Project p : Hudson.getInstance().getProjects() ) { + BuildTrigger t = p.getPublishersList().get(BuildTrigger.class); + if(t!=null) { + if(t.onJobRenamed(oldName,newName)) { + try { + p.save(); + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Failed to persist project setting during rename from "+oldName+" to "+newName,e); + } + } + } + } + } + } } private static final Logger LOGGER = Logger.getLogger(BuildTrigger.class.getName()); -- GitLab