PluginManager.java :  » Workflow-Engines » osbl-1_0 » org » osbl » plugin » Java Open Source

Java Open Source » Workflow Engines » osbl 1_0 
osbl 1_0 » org » osbl » plugin » PluginManager.java
package org.osbl.plugin;

import org.apache.commons.logging.LogFactory;

import java.util.*;

public class PluginManager
{
    private static org.apache.commons.logging.Log LOG = LogFactory.getLog(PluginManager.class);

    String name;

    Map<String,Plugin> plugins = new HashMap<String,Plugin>();
    Map<String,Extension> extensions = new HashMap<String,Extension>();
    Map<String,List<Extension>> extensionsByType = new HashMap<String,List<Extension>>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void registerPlugin(Plugin plugin) {
        plugins.put(plugin.getName(), plugin);
    }

    public void registerExtension(Extension extension) {
        LOG.info(name + ": Register Extension: " + extension.getName());
        extensions.put(extension.getName(), extension);

        List<Extension> list = extensionsByType.get(extension.getType());
        if (list == null) {
            list = new ArrayList<Extension>();
            extensionsByType.put(extension.getType(), list);
        }
        list.add(extension);
    }

    public List<Extension> getExtensions(ExtensionPoint extensionPoint) {
        List<Extension> list = extensionsByType.get(extensionPoint.getType());
        if (list == null) {
            LOG.debug(name + ": No extensions for " + extensionPoint);
            return Collections.EMPTY_LIST;
        }
        for (Extension extension : list) {
            if (!(extensionPoint.getFace().isAssignableFrom(extension.getImplementation())))
                throw new ClassCastException(name + ": extension implementation '" + extension.getImplementation()
                    + "' does not match interface of extension point '" + extensionPoint.getFace() + "'");
        }
        return list;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.