private ExtensionPointRepresentation describe(PluginPoint extension) { ExtensionPointRepresentation representation = new ExtensionPointRepresentation( extension.name(), extension.forType(), extension.getDescription()); extension.describeParameters(representation); return representation; }
@Override public Map<String, List<String>> getExensionsFor(Class<?> type) { Map<String, List<String>> result = new HashMap<String, List<String>>(); for (Map.Entry<String, ServerExtender> extension : extensions.entrySet()) { List<String> methods = new ArrayList<String>(); for (PluginPoint method : extension.getValue().getExtensionsFor(type)) { methods.add(method.name()); } if (!methods.isEmpty()) { result.put(extension.getKey(), methods); } } return result; }
@Override public <T> Representation invoke( GraphDatabaseAPI graphDb, String name, Class<T> type, String method, T context, ParameterList params) throws PluginLookupException, BadInputException, PluginInvocationFailureException, BadPluginInvocationException { PluginPoint plugin = extension(name, type, method); try { return plugin.invoke(graphDb, context, params); } catch (BadInputException e) { throw e; } catch (BadPluginInvocationException e) { throw e; } catch (PluginInvocationFailureException e) { throw e; } catch (Exception e) { throw new PluginInvocationFailureException(e); } }
PluginManager(Config serverConfig, Iterable<ServerPlugin> plugins, LogProvider logProvider) { Map<String, Pair<ServerPlugin, ServerExtender>> extensions = new HashMap<String, Pair<ServerPlugin, ServerExtender>>(); Log log = logProvider.getLog(getClass()); for (ServerPlugin plugin : plugins) { PluginPointFactory factory = new PluginPointFactoryImpl(); final ServerExtender extender = new ServerExtender(factory); try { plugin.loadServerExtender(extender); } catch (Exception ex) { log.warn("Failed to load plugin [%s]: %s", plugin.toString(), ex.getMessage()); continue; } catch (LinkageError err) { log.warn("Failed to load plugin [%s]: %s", plugin.toString(), err.getMessage()); continue; } Pair<ServerPlugin, ServerExtender> old = extensions.put(plugin.name, Pair.of(plugin, extender)); if (old != null) { log.warn( String.format( "Extension naming conflict \"%s\" between \"%s\" and \"%s\"", plugin.name, old.first().getClass(), plugin.getClass())); } } for (Pair<ServerPlugin, ServerExtender> extension : extensions.values()) { log.info(String.format("Loaded server plugin \"%s\"", extension.first().name)); for (PluginPoint point : extension.other().all()) { log.info( String.format( " %s.%s: %s", point.forType().getSimpleName(), point.name(), point.getDescription())); } this.extensions.put(extension.first().name, extension.other()); } }