提交 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; ...@@ -58,7 +58,6 @@ import hudson.scm.CVSSCM;
import hudson.scm.RepositoryBrowser; import hudson.scm.RepositoryBrowser;
import hudson.scm.SCM; import hudson.scm.SCM;
import hudson.scm.SCMDescriptor; import hudson.scm.SCMDescriptor;
import hudson.scm.SCMS;
import hudson.scm.SubversionSCM; import hudson.scm.SubversionSCM;
import hudson.search.CollectionSearchIndex; import hudson.search.CollectionSearchIndex;
import hudson.search.SearchIndexBuilder; import hudson.search.SearchIndexBuilder;
...@@ -82,7 +81,6 @@ import hudson.slaves.Cloud; ...@@ -82,7 +81,6 @@ import hudson.slaves.Cloud;
import hudson.slaves.DumbSlave; import hudson.slaves.DumbSlave;
import hudson.slaves.NodeDescriptor; import hudson.slaves.NodeDescriptor;
import hudson.slaves.NodeProvisioner; import hudson.slaves.NodeProvisioner;
import hudson.tasks.BuildStep;
import hudson.tasks.BuildWrapper; import hudson.tasks.BuildWrapper;
import hudson.tasks.Builder; import hudson.tasks.Builder;
import hudson.tasks.DynamicLabeler; import hudson.tasks.DynamicLabeler;
...@@ -353,8 +351,9 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -353,8 +351,9 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
/** /**
* List of registered {@link ItemListener}s. * 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. * List of registered {@link SCMListener}s.
...@@ -534,7 +533,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -534,7 +533,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
getQueue().load(); getQueue().load();
for (ItemListener l : itemListeners) for (ItemListener l : ItemListener.all())
l.onLoaded(); l.onLoaded();
WindowsInstallerLink.registerIfApplicable(); WindowsInstallerLink.registerIfApplicable();
...@@ -760,6 +759,9 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -760,6 +759,9 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
/** /**
* Gets all the installed {@link ItemListener}s. * Gets all the installed {@link ItemListener}s.
*
* @deprecated as of 1.286.
* Use {@link ItemListener#all()}.
*/ */
public CopyOnWriteList<ItemListener> getJobListeners() { public CopyOnWriteList<ItemListener> getJobListeners() {
return itemListeners; return itemListeners;
...@@ -776,7 +778,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -776,7 +778,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
* Gets all the installed {@link ComputerListener}s. * Gets all the installed {@link ComputerListener}s.
* *
* @deprecated as of 1.286. * @deprecated as of 1.286.
* Use {@link #getExtensionList(Class)} with {@code ComputerListener}. * Use {@link ComputerListener#all()}.
*/ */
public CopyOnWriteList<ComputerListener> getComputerListeners() { public CopyOnWriteList<ComputerListener> getComputerListeners() {
return computerListeners; return computerListeners;
...@@ -1653,7 +1655,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -1653,7 +1655,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
* Called in response to {@link Job#doDoDelete(StaplerRequest, StaplerResponse)} * Called in response to {@link Job#doDoDelete(StaplerRequest, StaplerResponse)}
*/ */
/*package*/ void deleteJob(TopLevelItem item) throws IOException { /*package*/ void deleteJob(TopLevelItem item) throws IOException {
for (ItemListener l : itemListeners) for (ItemListener l : ItemListener.all())
l.onDeleted(item); l.onDeleted(item);
items.remove(item.getName()); items.remove(item.getName());
...@@ -2224,7 +2226,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -2224,7 +2226,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
result = createProject(Items.getDescriptor(mode), name); result = createProject(Items.getDescriptor(mode), name);
} }
for (ItemListener l : itemListeners) for (ItemListener l : ItemListener.all())
l.onCreated(result); l.onCreated(result);
} }
...@@ -2261,7 +2263,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -2261,7 +2263,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
result.onCopiedFrom(src); result.onCopiedFrom(src);
items.put(name,result); items.put(name,result);
for (ItemListener l : itemListeners) for (ItemListener l : ItemListener.all())
l.onCreated(result); l.onCreated(result);
return result; return result;
......
...@@ -24,9 +24,10 @@ ...@@ -24,9 +24,10 @@
package hudson.model.listeners; package hudson.model.listeners;
import hudson.ExtensionPoint; import hudson.ExtensionPoint;
import hudson.ExtensionList;
import hudson.Extension;
import hudson.model.Hudson; import hudson.model.Hudson;
import hudson.model.Item; import hudson.model.Item;
import hudson.model.Job;
/** /**
* Receives notifications about CRUD operations of {@link Item}. * Receives notifications about CRUD operations of {@link Item}.
...@@ -72,8 +73,18 @@ public class ItemListener implements ExtensionPoint { ...@@ -72,8 +73,18 @@ public class ItemListener implements ExtensionPoint {
/** /**
* Registers this instance to Hudson and start getting notifications. * 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() { 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 ...@@ -239,28 +239,6 @@ public class BuildTrigger extends Recorder implements DependecyDeclarer, MatrixA
@Extension @Extension
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> { 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() { public String getDisplayName() {
return Messages.BuildTrigger_DisplayName(); return Messages.BuildTrigger_DisplayName();
} }
...@@ -313,6 +291,27 @@ public class BuildTrigger extends Recorder implements DependecyDeclarer, MatrixA ...@@ -313,6 +291,27 @@ public class BuildTrigger extends Recorder implements DependecyDeclarer, MatrixA
} }
}.process(); }.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()); 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.
先完成此消息的编辑!
想要评论请 注册