| // Copyright (C) 2014 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package com.google.gerrit.server.plugins; | |
| import com.google.gerrit.extensions.annotations.ExtensionPoint; | |
| import com.google.gerrit.server.PluginUser; | |
| import com.google.gerrit.server.config.GerritRuntime; | |
| import java.nio.file.Path; | |
| import org.eclipse.jgit.internal.storage.file.FileSnapshot; | |
| /** | |
| * Provider of one Server plugin from one external file | |
| * | |
| * <p>Allows to load one plugin from one external file or one directory by declaring the ability to | |
| * handle it. | |
| * | |
| * <p>In order to load multiple files into a single plugin, group them into a directory tree and | |
| * then load the directory root as a single plugin. | |
| */ | |
| @ExtensionPoint | |
| public interface ServerPluginProvider { | |
| /** Descriptor of the Plugin that ServerPluginProvider has to load. */ | |
| class PluginDescription { | |
| public final PluginUser user; | |
| public final String canonicalUrl; | |
| public final Path dataDir; | |
| final GerritRuntime gerritRuntime; | |
| /** | |
| * Creates a new PluginDescription for ServerPluginProvider. | |
| * | |
| * @param user Gerrit user for interacting with plugins | |
| * @param canonicalUrl plugin root Web URL | |
| * @param dataDir directory for plugin data | |
| * @param gerritRuntime current Gerrit runtime (daemon, batch, ...) | |
| */ | |
| public PluginDescription( | |
| PluginUser user, String canonicalUrl, Path dataDir, GerritRuntime gerritRuntime) { | |
| this.user = user; | |
| this.canonicalUrl = canonicalUrl; | |
| this.dataDir = dataDir; | |
| this.gerritRuntime = gerritRuntime; | |
| } | |
| } | |
| /** | |
| * Declares the availability to manage an external file or directory | |
| * | |
| * @param srcPath the external file or directory | |
| * @return true if file or directory can be loaded into a Server Plugin | |
| */ | |
| boolean handles(Path srcPath); | |
| /** | |
| * Returns the plugin name of an external file or directory | |
| * | |
| * <p>Should be called only if {@link #handles(Path) handles(srcFile)} returns true and thus | |
| * srcFile is a supported plugin format. An IllegalArgumentException is thrown otherwise as | |
| * srcFile is not a valid file format for extracting its plugin name. | |
| * | |
| * @param srcPath external file or directory | |
| * @return plugin name | |
| */ | |
| String getPluginName(Path srcPath); | |
| /** | |
| * Loads an external file or directory into a Server plugin. | |
| * | |
| * <p>Should be called only if {@link #handles(Path) handles(srcFile)} returns true and thus | |
| * srcFile is a supported plugin format. An IllegalArgumentException is thrown otherwise as | |
| * srcFile is not a valid file format for extracting its plugin name. | |
| * | |
| * @param srcPath external file or directory | |
| * @param snapshot snapshot of the external file | |
| * @param pluginDescriptor descriptor of the ServerPlugin to load | |
| * @throws InvalidPluginException if plugin is supposed to be handled but cannot be loaded for any | |
| * other reason | |
| */ | |
| ServerPlugin get(Path srcPath, FileSnapshot snapshot, PluginDescription pluginDescriptor) | |
| throws InvalidPluginException; | |
| /** | |
| * Returns the plugin name of this provider. | |
| * | |
| * <p>Allows to identify which plugin provided the current ServerPluginProvider by returning the | |
| * plugin name. Helpful for troubleshooting plugin loading problems. | |
| * | |
| * @return plugin name of this provider | |
| */ | |
| String getProviderPluginName(); | |
| } |