package hudson.search; import hudson.Extension; import hudson.ExtensionList; import hudson.ExtensionPoint; /** * Creates a {@link Search} instance for a {@link SearchableModelObject}. * * <p> * This allows you to plug in different backends to the search, such as full-text search, * or more intelligent user-sensitive search, etc. Puts @{@link Extension} annotation * on your implementation to have it registered. * * <p> * Right now, there's no user control over which {@link SearchFactory} takes priority, * but we may do so later. * * @author Kohsuke Kawaguchi * @since 1.469 */ public abstract class SearchFactory implements ExtensionPoint { /** * Creates a {@link Search} object. * * This method needs to execute quickly (without actually executing any search), * since it is created per incoming HTTP response. * * @param owner * The {@link SearchableModelObject} object for which we are creating the search. * The returned object will provide the search for this object. * @return * null if your factory isn't interested in creating a {@link Search} object. * The next factory will get a chance to act on it. */ public abstract Search createFor(SearchableModelObject owner); /** * Returns all the registered {@link SearchFactory} instances. */ public static ExtensionList<SearchFactory> all() { return ExtensionList.lookup(SearchFactory.class); } }