package hudson.plugins.parameterizedtrigger; import hudson.Extension; import hudson.model.Hudson; import hudson.model.Item; import hudson.model.Project; import hudson.model.listeners.ItemListener; import hudson.util.EnumConverter; import java.io.IOException; import java.util.ListIterator; import java.util.logging.Level; import java.util.logging.Logger; import org.kohsuke.stapler.Stapler; public class Plugin extends hudson.Plugin { @Override public void start() throws Exception { Stapler.CONVERT_UTILS.register(new EnumConverter(), ResultCondition.class); } /** * If a job is renamed, update all parameterized-triggers with the new name. */ @Extension public static final class RenameListener extends ItemListener { @Override public void onRenamed(Item item, String oldName, String newName) { for (Project<?,?> p : Hudson.getInstance().getProjects()) { BuildTrigger t = p.getPublishersList().get(BuildTrigger.class); if (t != null) { boolean changed = false; for (BuildTriggerConfig c : t.getConfigs()) changed |= c.onJobRenamed(oldName, newName); if (changed) try { p.save(); } catch (IOException e) { Logger.getLogger(RenameListener.class.getName()).log(Level.WARNING, "Failed to persist project setting during rename from "+oldName+" to "+newName, e); } } } } @Override public void onDeleted(Item item) { for (Project<?,?> p : Hudson.getInstance().getProjects()) { String oldName = item.getName(); BuildTrigger t = p.getPublishersList().get(BuildTrigger.class); if (t != null) { boolean changed = false; for (ListIterator<BuildTriggerConfig> it = t.getConfigs().listIterator(); it.hasNext();) { BuildTriggerConfig c = it.next(); if (c.onDeleted(oldName)) { changed = true; if (c.getProjects().length() == 0) it.remove(); } } if (changed) try { if (t.getConfigs().size() == 0) p.getPublishersList().remove(t); p.save(); } catch (IOException e) { Logger.getLogger(RenameListener.class.getName()).log(Level.WARNING, "Failed to persist project setting during remove of "+oldName, e); } } } } } }