All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gerrit.server.plugins.PluginContentScanner Maven / Gradle / Ivy

There is a newer version: 3.11.0-rc3
Show newest version
// 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 java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.nio.file.NoSuchFileException;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.jar.Manifest;
import java.util.stream.Stream;

/**
 * Scans the plugin returning classes and resources.
 *
 * 

Gerrit uses the scanner to automatically discover the classes and resources exported by the * plugin for auto discovery of exported SSH commands, Servlets and listeners. */ public interface PluginContentScanner { /** Scanner without resources. */ PluginContentScanner EMPTY = new PluginContentScanner() { @Override public Manifest getManifest() throws IOException { return new Manifest(); } @Override public Map, Iterable> scan( String pluginName, Iterable> annotations) throws InvalidPluginException { return Collections.emptyMap(); } @Override public Optional getEntry(String resourcePath) { return Optional.empty(); } @Override public InputStream getInputStream(PluginEntry entry) throws IOException { throw new NoSuchFileException("Empty plugin"); } @Override public Stream entries() { return Stream.empty(); } }; /** * Plugin class extension meta-data * *

Class name and annotation value of the class provided by a plugin to extend an existing * extension point in Gerrit. */ class ExtensionMetaData { public final String className; public final String annotationValue; public ExtensionMetaData(String className, String annotationValue) { this.className = className; this.annotationValue = annotationValue; } } /** * Return the plugin meta-data manifest * * @return Manifest of the plugin or null if plugin has no meta-data * @throws IOException if an I/O problem occurred whilst accessing the Manifest */ Manifest getManifest() throws IOException; /** * Scans the plugin for declared public annotated classes * * @param pluginName the plugin name * @param annotations annotations declared by the plugin classes * @return map of annotations and associated plugin classes found * @throws InvalidPluginException if the plugin is not valid or corrupted */ Map, Iterable> scan( String pluginName, Iterable> annotations) throws InvalidPluginException; /** * Return the plugin resource associated to a path * * @param resourcePath full path of the resource inside the plugin package * @return the resource object or Optional.absent() if the resource was not found * @throws IOException if there was a problem retrieving the resource */ Optional getEntry(String resourcePath) throws IOException; /** * Return the InputStream of the resource entry * * @param entry resource entry inside the plugin package * @return the resource input stream * @throws IOException if there was an I/O problem accessing the resource */ InputStream getInputStream(PluginEntry entry) throws IOException; /** * Return all the resources inside a plugin * * @return the enumeration of all resources found */ Stream entries(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy