/******************************************************************************* * * Copyright (c) 2004-2009 Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * Kohsuke Kawaguchi * * *******************************************************************************/ package hudson.scm; import hudson.ExtensionPoint; import hudson.MarkupText; import hudson.ExtensionListView; import hudson.Extension; import hudson.ExtensionList; import hudson.util.CopyOnWriteList; import hudson.scm.ChangeLogSet.Entry; import hudson.model.AbstractBuild; import hudson.model.Hudson; import java.util.logging.Logger; /** * Performs mark up on changelog messages to be displayed. * * <p> SCM changelog messages are usually plain text, but when we display that * in Hudson, it is often nice to be able to put mark up on the text (for * example to link to external issue tracking system.) * * <p> Plugins that are interested in doing so may extend this class and put * {@link Extension} on it. When multiple annotators are registered, their * results will be combined. * * @author Kohsuke Kawaguchi * @since 1.70 */ public abstract class ChangeLogAnnotator implements ExtensionPoint { /** * Called by Hudson to allow markups to be added to the changelog text. * * <p> This method is invoked each time a page is rendered, so * implementations of this method should not take too long to execute. Also * note that this method may be invoked concurrently by multiple threads. * * <p> If there's any error during the processing, it should be recorded in * {@link Logger} and the method should return normally. * * @param build Build that owns this changelog. From here you can access * broader contextual information, like the project, or it settings. Never * null. * @param change The changelog entry for which this method is adding markup. * Never null. * @param text The text and markups. Implementation of this method is * expected to add additional annotations into this object. If other * annotators are registered, the object may already contain some markups * when this method is invoked. Never null. {@link MarkupText#getText()} on * this instance will return the same string as * {@link Entry#getMsgEscaped()}. */ public abstract void annotate(AbstractBuild<?, ?> build, Entry change, MarkupText text); /** * Registers this annotator, so that Hudson starts using this object for * adding markup. * * @deprecated as of 1.286 Prefer automatic registration via * {@link Extension} */ public final void register() { all().add(this); } /** * Unregisters this annotator, so that Hudson stops using this object. */ public final boolean unregister() { return all().remove(this); } /** * All registered {@link ChangeLogAnnotator}s. * * @deprecated as of 1.286 Use {@link #all()} for read access, and * {@link Extension} for registration. */ public static final CopyOnWriteList<ChangeLogAnnotator> annotators = ExtensionListView.createCopyOnWriteList(ChangeLogAnnotator.class); /** * Returns all the registered {@link ChangeLogAnnotator} descriptors. */ public static ExtensionList<ChangeLogAnnotator> all() { return Hudson.getInstance().getExtensionList(ChangeLogAnnotator.class); } }