37public final class PluginManager {
39 private static final Logger logger = LogManager.getLogger(PluginManager.class);
40 private static final Set<String> plugins =
new HashSet<>();
43 private PluginManager() {
44 throw new UnsupportedOperationException();
47 public static void load(
final String pkg) {
48 try (
final ScanResult scanResult =
54 for (
final ClassInfo classInfo : scanResult.getSubclasses(
PluginContext.class)) {
56 if (!classInfo.isAbstract()) {
57 final MethodInfoList constructorInfos = classInfo.getDeclaredConstructorInfo();
58 final MethodInfo constructorInfo = constructorInfos.get(0);
59 final Constructor<?> constructor = constructorInfo.loadClassAndGetConstructor();
61 final Object instance = constructor.newInstance();
64 dataBus.subscribe(listener);
65 plugins.add(classInfo.getName());
67 }
catch (Exception ex) {
68 logger.error(String.format(
"Error loading plugin=%s", classInfo.getSimpleName()), ex);
72 logger.info(String.format(
"Loaded: %d plugins.", PluginManager.getPluginCount()));
75 public static int getPluginCount() {
76 return plugins.size();