io.vlingo.actors.plugin.PluginLoader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vlingo-actors Show documentation
Show all versions of vlingo-actors Show documentation
Type safe Actor Model toolkit for reactive concurrency and resiliency using Java and other JVM languages.
// Copyright © 2012-2020 VLINGO LABS. All rights reserved.
//
// This Source Code Form is subject to the terms of the
// Mozilla Public License, v. 2.0. If a copy of the MPL
// was not distributed with this file, You can obtain
// one at https://mozilla.org/MPL/2.0/.
package io.vlingo.actors.plugin;
import io.vlingo.actors.Configuration;
import java.util.*;
public class PluginLoader {
private static final String pluginNamePrefix = "plugin.name.";
private final Map plugins;
public PluginLoader() {
this.plugins = new HashMap<>();
}
public Collection loadEnabledPlugins(final Configuration configuration, final Properties properties) {
if (!properties.isEmpty()) {
for (String enabledPlugin : findEnabledPlugins(properties)) {
loadPlugin(configuration, properties, enabledPlugin);
}
}
return plugins.values();
}
private Set findEnabledPlugins(final Properties properties) {
final Set enabledPlugins = new HashSet<>();
for (Enumeration> e = properties.keys(); e.hasMoreElements(); ) {
final String key = (String) e.nextElement();
if (key.startsWith(pluginNamePrefix)) {
if (Boolean.parseBoolean(properties.getProperty(key)))
enabledPlugins.add(key);
}
}
return enabledPlugins;
}
private void loadPlugin(final Configuration configuration, final Properties properties, final String enabledPlugin) {
final String pluginName = enabledPlugin.substring(pluginNamePrefix.length());
final String classnameKey = "plugin." + pluginName + ".classname";
final String classname = properties.getProperty(classnameKey);
try {
final Plugin maybePlugin = plugins.get(classname);
if (maybePlugin == null) {
final Class> pluginClass = Class.forName(classname);
final Plugin plugin = (Plugin) pluginClass.newInstance();
plugins.put(classname, plugin);
}
} catch (Exception e) {
e.printStackTrace();
throw new IllegalStateException("Cannot load plugin " + classname);
}
}
}