| Class | Line # | Actions | |||||
|---|---|---|---|---|---|---|---|
| XWikiPluginInterface | 61 | 0 | - | 0 | 0 |
| 1 | /* | |
| 2 | * See the NOTICE file distributed with this work for additional | |
| 3 | * information regarding copyright ownership. | |
| 4 | * | |
| 5 | * This is free software; you can redistribute it and/or modify it | |
| 6 | * under the terms of the GNU Lesser General Public License as | |
| 7 | * published by the Free Software Foundation; either version 2.1 of | |
| 8 | * the License, or (at your option) any later version. | |
| 9 | * | |
| 10 | * This software is distributed in the hope that it will be useful, | |
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | * Lesser General Public License for more details. | |
| 14 | * | |
| 15 | * You should have received a copy of the GNU Lesser General Public | |
| 16 | * License along with this software; if not, write to the Free | |
| 17 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | |
| 18 | * 02110-1301 USA, or see the FSF site: http://www.fsf.org. | |
| 19 | */ | |
| 20 | package com.xpn.xwiki.plugin; | |
| 21 | ||
| 22 | import com.xpn.xwiki.XWikiContext; | |
| 23 | import com.xpn.xwiki.XWikiException; | |
| 24 | import com.xpn.xwiki.api.Api; | |
| 25 | import com.xpn.xwiki.doc.XWikiAttachment; | |
| 26 | ||
| 27 | /** | |
| 28 | * Deprecated platform extension mechanism allowing three things: | |
| 29 | * <ul> | |
| 30 | * <li>provide custom services usable from other parts of the platform, or as public services in Velocity scripts using | |
| 31 | * a {@link PluginApi} wrapper; this can now be achieved using components for use inside Java, or using | |
| 32 | * {@link org.xwiki.script.service.ScriptService} components for public scriptable APIs</li> | |
| 33 | * <li>alter the request processing by implementing one or more of the hook methods that plug into the rendering engine, | |
| 34 | * such as {@link #endParsing(String, XWikiContext)} or {@link #downloadAttachment(XWikiAttachment, XWikiContext)}; this | |
| 35 | * can now be achieved using {@link org.xwiki.rendering.transformation.Transformation rendering transformations} for | |
| 36 | * changing the rendering result, or {@link org.xwiki.observation.EventListener event listeners} for doing custom | |
| 37 | * actions when different events occur</li> | |
| 38 | * <li>perform extra initialization steps whenever starting the platform, or when loading each virtual wiki; this can be | |
| 39 | * achieved by writing {@link org.xwiki.observation.EventListener event listeners} that wait for | |
| 40 | * {@link org.xwiki.observation.event.ApplicationStartedEvent application events} or | |
| 41 | * {@link org.xwiki.bridge.event.WikiEvent wiki events}</li> | |
| 42 | * </ul> | |
| 43 | * <p> | |
| 44 | * In order for a plugin to be active, it must be registered in {@code xwiki.cfg}. | |
| 45 | * </p> | |
| 46 | * <p> | |
| 47 | * Public scriptable APIs are implemented in a custom {@link PluginApi} wrapper, which is instantiated by calling the | |
| 48 | * {@link #getPluginApi(XWikiPluginInterface, XWikiContext)} method. If a plugin doesn't need a scriptable API, it | |
| 49 | * should return {@code null} instead. | |
| 50 | * </p> | |
| 51 | * <p> | |
| 52 | * The methods of a specific plugin <strong>are called only if the actual class implements that method</strong>, so | |
| 53 | * inherited methods are never called. If a plugin wants to provide an implementation for one of the hook methods, it | |
| 54 | * must provide an implementation for it, even if that implementation only calls a parent method. | |
| 55 | * </p> | |
| 56 | * | |
| 57 | * @version $Id: 8d7045844ef4917fd5f65de5e008a7a7b2a91d3e $ | |
| 58 | * @deprecated the plugin technology is deprecated, consider rewriting as components | |
| 59 | */ | |
| 60 | @Deprecated | |
| 61 | public interface XWikiPluginInterface | |
| 62 | { | |
| 63 | /** | |
| 64 | * The name which can be used for accessing this plugin from | |
| 65 | * {@link com.xpn.xwiki.XWiki#getPlugin(String, XWikiContext)}. | |
| 66 | * | |
| 67 | * @return the plugin name, usually a lowercase identifier | |
| 68 | */ | |
| 69 | String getName(); | |
| 70 | ||
| 71 | /** | |
| 72 | * Get a public scriptable API that can be used to call methods of the (privileged) plugin. | |
| 73 | * | |
| 74 | * @param plugin the plugin instance to wrap | |
| 75 | * @param context the current request context | |
| 76 | * @return an instance of the corresponding API, or {@code null} if the plugin doesn't want to expose a public API | |
| 77 | */ | |
| 78 | Api getPluginApi(XWikiPluginInterface plugin, XWikiContext context); | |
| 79 | ||
| 80 | /** | |
| 81 | * Global initialization, called when the platform is started and the plugin list is initialized. | |
| 82 | * | |
| 83 | * @param context the current context, should not be stored since it will become mostly unreliable once the initial | |
| 84 | * request is terminated | |
| 85 | * @throws XWikiException if the plugin fails to initialize | |
| 86 | */ | |
| 87 | void init(XWikiContext context) throws XWikiException; | |
| 88 | ||
| 89 | /** | |
| 90 | * Initialization method called each time a virtual wiki is started, allowing plugins to perform initialization | |
| 91 | * tasks needed in each wiki. | |
| 92 | * | |
| 93 | * @param context the current request context | |
| 94 | */ | |
| 95 | void virtualInit(XWikiContext context); | |
| 96 | ||
| 97 | /** | |
| 98 | * A "flush cache" method usually called by the global {@link com.xpn.xwiki.XWiki#flushCache(XWikiContext)}, | |
| 99 | * requesting plugins to clear their cached data. When this method is called, plugins should discard all the | |
| 100 | * information they hold from the wiki and re-read it if needed. | |
| 101 | * | |
| 102 | * @param context the current request context | |
| 103 | */ | |
| 104 | void flushCache(XWikiContext context); | |
| 105 | ||
| 106 | /** | |
| 107 | * Hook method called at the start of the response generation process, before the parsing of the root template | |
| 108 | * begins. This allows a plugin to initialize its per-request variables, or to modify the (velocity) context. This | |
| 109 | * method is called at most once per request. It is not called at all if the response is not rendered using a | |
| 110 | * velocity template, for example during the PDF export or for AJAX requests that don't send back a rendered | |
| 111 | * response. | |
| 112 | * | |
| 113 | * @param context the current request context | |
| 114 | * @see #endParsing(String, XWikiContext) the pair method called at the end of the response generation process | |
| 115 | */ | |
| 116 | void beginParsing(XWikiContext context); | |
| 117 | ||
| 118 | /** | |
| 119 | * Hook method, called before the 1.0 rendering engine starts processing a wiki document, after | |
| 120 | * {@link #beginParsing(XWikiContext)} and before {@link #commonTagsHandler(String, XWikiContext)}. This allows a | |
| 121 | * plugin to initialize its per-rendering variables, or to modify the (velocity) context. This method can be called | |
| 122 | * multiple times per request, once for each time the 1.0 rendering engine is invoked. At this point the content is | |
| 123 | * not yet processed by any of the rendering components. | |
| 124 | * | |
| 125 | * @param context the current request context | |
| 126 | * @see #endRendering(XWikiContext) the pair method called at the end of the content processing | |
| 127 | */ | |
| 128 | void beginRendering(XWikiContext context); | |
| 129 | ||
| 130 | /** | |
| 131 | * Hook method called during the 1.0 rendering process, after {@link #beginRendering(XWikiContext)} and right before | |
| 132 | * {@link #startRenderingHandler(String, XWikiContext)}. At this point the content has already been processed by all | |
| 133 | * of the important rendering components (Velocity, Radeox, Groovy). The content can be altered before returning, | |
| 134 | * and the rendering process will continue on the returned value. | |
| 135 | * | |
| 136 | * @param content the current content being rendered; already processed by Radeox, Velocity and Groovy | |
| 137 | * @param context the current request context | |
| 138 | * @return the processed content, must be the same as the input content if no processing is needed | |
| 139 | */ | |
| 140 | String commonTagsHandler(String content, XWikiContext context); | |
| 141 | ||
| 142 | /** | |
| 143 | * Hook method called during the 1.0 rendering process, after {@link #commonTagsHandler(String, XWikiContext)} and | |
| 144 | * before {@link #outsidePREHandler(String, XWikiContext)}. The content can be altered before returning. This method | |
| 145 | * should be avoided, since the place where the hook is used isn't actually reliable, since at this point the | |
| 146 | * rendering process is almost done. | |
| 147 | * | |
| 148 | * @param content the current content being rendered; already processed by Radeox, Velocity and Groovy | |
| 149 | * @param context the current request context | |
| 150 | * @return the processed content, must be the same as the input content if no processing is needed | |
| 151 | * @see #endRenderingHandler(String, XWikiContext) the pair method called after the content is processed | |
| 152 | * @see #beginRendering(XWikiContext) the method called before the content has been processed by the rendering | |
| 153 | * engine | |
| 154 | */ | |
| 155 | String startRenderingHandler(String content, XWikiContext context); | |
| 156 | ||
| 157 | /** | |
| 158 | * Hook method called during the 1.0 rendering process, once for each line of content outside {@code pre} blocks, | |
| 159 | * after {@link #startRenderingHandler(String, XWikiContext)} and before | |
| 160 | * {@link #endRenderingHandler(String, XWikiContext)}. The content can be altered before returning. | |
| 161 | * | |
| 162 | * @param line the current line being rendered; already processed by Radeox, Velocity and Groovy | |
| 163 | * @param context the current request context | |
| 164 | * @return the processed line, must be the same as the input content if no processing is needed | |
| 165 | * @see #insidePREHandler(String, XWikiContext) the pair method called for content inside {@code pre} blocks | |
| 166 | */ | |
| 167 | String outsidePREHandler(String line, XWikiContext context); | |
| 168 | ||
| 169 | /** | |
| 170 | * Hook method called during the 1.0 rendering process, once for each line of content inside {@code pre} blocks, | |
| 171 | * after {@link #startRenderingHandler(String, XWikiContext)} and before | |
| 172 | * {@link #endRenderingHandler(String, XWikiContext)}. The content can be altered before returning. | |
| 173 | * | |
| 174 | * @param line the current line being rendered; already processed by Radeox, Velocity and Groovy | |
| 175 | * @param context the current request context | |
| 176 | * @return the processed line, must be the same as the input content if no processing is needed | |
| 177 | * @see #outsidePREHandler(String, XWikiContext) the pair method called for content outside {@code pre} blocks | |
| 178 | */ | |
| 179 | String insidePREHandler(String line, XWikiContext context); | |
| 180 | ||
| 181 | /** | |
| 182 | * Hook method called during the 1.0 rendering process, after {@link #outsidePREHandler(String, XWikiContext)} and | |
| 183 | * right before {@link #endRendering(XWikiContext)}. The content can be altered before returning, and the returned | |
| 184 | * value is the one coming out of the rendering process. | |
| 185 | * | |
| 186 | * @param content the current content being rendered; already processed by Radeox, Velocity and Groovy | |
| 187 | * @param context the current request context | |
| 188 | * @return the processed content, must be the same as the input content if no processing is needed | |
| 189 | * @see #startRenderingHandler(String, XWikiContext) the pair method called before the content is processed | |
| 190 | * @see #endRendering(XWikiContext) the method called after the full rendering process is finished | |
| 191 | */ | |
| 192 | String endRenderingHandler(String content, XWikiContext context); | |
| 193 | ||
| 194 | /** | |
| 195 | * Hook method, called after the 1.0 rendering engine finished processing a wiki document. This allows a plugin to | |
| 196 | * clean up its per-rendering variables, or to modify the (velocity) context. This method can be called multiple | |
| 197 | * times per request, once for each time the 1.0 rendering engine is invoked. At this point the content is processed | |
| 198 | * by all of the rendering components and is ready to be included in the response. | |
| 199 | * | |
| 200 | * @param context the current request context | |
| 201 | * @see #endRenderingHandler(String, XWikiContext) allows to also alter the rendering result | |
| 202 | */ | |
| 203 | void endRendering(XWikiContext context); | |
| 204 | ||
| 205 | /** | |
| 206 | * Hook method called at the end of the response generation process, after the parsing of the root template is | |
| 207 | * finished. This allows a plugin to clean up its per-request variables, to modify the (velocity) context, or to | |
| 208 | * post-process the response. This method is called at most once per request. It is not called at all if the | |
| 209 | * response is not rendered using a velocity template, for example during the PDF export or for AJAX requests that | |
| 210 | * don't send back a rendered response. | |
| 211 | * | |
| 212 | * @param content the full response to send to the client | |
| 213 | * @param context the current request context | |
| 214 | * @return the post-processed content, must be the same as the input content if no processing is needed | |
| 215 | * @see #beginParsing(XWikiContext) the pair method called at the start of the response generation process | |
| 216 | */ | |
| 217 | String endParsing(String content, XWikiContext context); | |
| 218 | ||
| 219 | /** | |
| 220 | * Plugin extension point allowing the plugin to perform modifications to an attachment when the user opens a | |
| 221 | * document attachment. The plugin is passed the original attachment and it has to return the new modified | |
| 222 | * attachment. | |
| 223 | * | |
| 224 | * @param attachment the original attachment | |
| 225 | * @param context the current request context | |
| 226 | * @return the modified attachment | |
| 227 | */ | |
| 228 | XWikiAttachment downloadAttachment(XWikiAttachment attachment, XWikiContext context); | |
| 229 | } |