Package com.atlassian.labs.speakeasy.manager

Source Code of com.atlassian.labs.speakeasy.manager.ExtensionManager

package com.atlassian.labs.speakeasy.manager;

import com.atlassian.labs.speakeasy.descriptor.external.DescriptorGenerator;
import com.atlassian.labs.speakeasy.model.Extension;
import com.atlassian.labs.speakeasy.model.UserExtension;
import com.atlassian.plugin.ModuleDescriptor;
import com.atlassian.plugin.Plugin;
import com.atlassian.plugin.PluginAccessor;
import com.google.common.base.Function;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.transform;

/**
*
*/
@Component
public class ExtensionManager
{
    private final PluginAccessor pluginAccessor;
    private final ExtensionBuilder extensionBuilder;
    private static final Logger log = LoggerFactory.getLogger(ExtensionManager.class);

    @Autowired
    public ExtensionManager(ExtensionBuilder extensionBuilder, PluginAccessor pluginAccessor)
    {
        this.extensionBuilder = extensionBuilder;
        this.pluginAccessor = pluginAccessor;
    }

    public Extension getExtension(String pluginKey)
    {
        Plugin plugin = getPlugin(pluginKey);
        return extensionBuilder.build(plugin);
    }

    public UserExtension getUserExtension(String pluginKey, String user)
    {
        Plugin plugin = getPlugin(pluginKey);
        if (plugin == null)
        {
            return null;
        }
        else
        {
            return getUserExtension(plugin, user, getAllExtensionPlugins());
        }
    }

    public Iterable<UserExtension> getAllUserExtensions(final String userName)
    {
        final List<Plugin> rawPlugins = getAllExtensionPlugins();
        return transform(rawPlugins, new Function<Plugin, UserExtension>()
        {
            public UserExtension apply(Plugin from)
            {
                try
                {
                    return getUserExtension(from, userName, rawPlugins);
                }
                catch (RuntimeException ex)
                {
                    log.error("Unable to load plugin '" + from.getKey() + "'", ex);
                    UserExtension plugin = new UserExtension(from);
                    plugin.setDescription("Unable to load due to " + ex.getMessage());
                    return plugin;
                }
            }
        });
    }

    private UserExtension getUserExtension(Plugin plugin, String user, Iterable<Plugin> plugins)
    {
        return extensionBuilder.build(plugin, user, plugins);
    }

    public List<Plugin> getAllExtensionPlugins()
    {
        // todo: cache this?
        List<Plugin> plugins = new ArrayList<Plugin>();
        for (Plugin plugin : pluginAccessor.getPlugins())
        {
            for (ModuleDescriptor moduleDescriptor : plugin.getModuleDescriptors())
            {
                if (moduleDescriptor instanceof DescriptorGenerator)
                {
                    plugins.add(plugin);
                    break;
                }
            }
        }
        return plugins;
    }

    private Plugin getPlugin(String pluginKey)
    {
        return pluginAccessor.getPlugin(pluginKey);
    }

    public void resetExtension(String key)
    {
        // todo: clear cache when we add a cache
    }

    public void resetExtensions(List<String> result)
    {
        // todo: clear cache when there is one to clear
    }
}
TOP

Related Classes of com.atlassian.labs.speakeasy.manager.ExtensionManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.