提交 8d3619c3 编写于 作者: K kohsuke

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
上级 185a90e4
......@@ -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<TopLevelItem>, Stapl
/**
* List of registered {@link ItemListener}s.
* @deprecated as of 1.286
*/
private transient final CopyOnWriteList<ItemListener> itemListeners = new CopyOnWriteList<ItemListener>();
private transient final CopyOnWriteList<ItemListener> itemListeners = ExtensionListView.createCopyOnWriteList(ItemListener.class);
/**
* List of registered {@link SCMListener}s.
......@@ -534,7 +533,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, 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<TopLevelItem>, Stapl
/**
* Gets all the installed {@link ItemListener}s.
*
* @deprecated as of 1.286.
* Use {@link ItemListener#all()}.
*/
public CopyOnWriteList<ItemListener> getJobListeners() {
return itemListeners;
......@@ -776,7 +778,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, 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<ComputerListener> getComputerListeners() {
return computerListeners;
......@@ -1653,7 +1655,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, 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<TopLevelItem>, 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<TopLevelItem>, Stapl
result.onCopiedFrom(src);
items.put(name,result);
for (ItemListener l : itemListeners)
for (ItemListener l : ItemListener.all())
l.onCreated(result);
return result;
......
......@@ -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<ItemListener> all() {
return Hudson.getInstance().getExtensionList(ItemListener.class);
}
}
......@@ -239,28 +239,6 @@ public class BuildTrigger extends Recorder implements DependecyDeclarer, MatrixA
@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> {
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());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册