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

io.vlingo.actors.plugin.PluginLoader Maven / Gradle / Ivy

Go to download

Type safe Actor Model toolkit for reactive concurrency and resiliency using Java and other JVM languages.

There is a newer version: 1.7.5
Show newest version
// 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);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy