Package com.atlassian.labs.speakeasy.commonjs.descriptor

Source Code of com.atlassian.labs.speakeasy.commonjs.descriptor.CommonJsModulesDescriptor

package com.atlassian.labs.speakeasy.commonjs.descriptor;

import com.atlassian.labs.speakeasy.commonjs.CommonJsModules;
import com.atlassian.labs.speakeasy.util.BundleUtil;
import com.atlassian.labs.speakeasy.util.WebResourceUtil;
import com.atlassian.plugin.ModuleDescriptor;
import com.atlassian.plugin.Plugin;
import com.atlassian.plugin.PluginAccessor;
import com.atlassian.plugin.PluginParseException;
import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
import com.atlassian.plugin.event.PluginEventManager;
import com.atlassian.plugin.hostcontainer.HostContainer;
import com.atlassian.plugin.module.ModuleFactory;
import com.atlassian.plugin.osgi.factory.OsgiPlugin;
import com.atlassian.util.concurrent.NotNull;
import org.dom4j.Element;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;

import java.util.Collections;
import java.util.List;
import java.util.Set;

import static com.google.common.collect.Sets.newHashSet;


/**
*
*/
public class CommonJsModulesDescriptor extends AbstractModuleDescriptor<CommonJsModules>
{
    private String location = "/modules";

    private final ModuleFactory moduleFactory;
    private final BundleContext bundleContext;
    private final PluginEventManager pluginEventManager;
    private final PluginAccessor pluginAccessor;
    private final HostContainer hostContainer;
    private Bundle pluginBundle;
    private volatile CommonJsModules modules;
    private volatile GeneratedDescriptorsManager generatedDescriptorsManager;
    private volatile Element originalElement;
    private volatile Set<String> explicitPublicModules;


    public CommonJsModulesDescriptor(ModuleFactory moduleFactory, BundleContext bundleContext, HostContainer hostContainer, PluginAccessor pluginAccessor)
    {
        super(moduleFactory);
        this.moduleFactory = moduleFactory;
        this.bundleContext = bundleContext;
        this.hostContainer = hostContainer;
        this.pluginEventManager = (PluginEventManager) bundleContext.getService(bundleContext.getServiceReference(PluginEventManager.class.getName()));
        this.pluginAccessor = pluginAccessor;
    }


    @Override
    public void init(@NotNull Plugin plugin, @NotNull Element element) throws PluginParseException
    {
        super.init(plugin, element);

        if (element.attribute("location") != null)
        {
            location = element.attributeValue("location");
        }

        this.originalElement = element;

        this.explicitPublicModules = newHashSet();
        for (Element e : (List<Element>)element.elements("public-module"))
        {
            explicitPublicModules.add(e.getTextTrim());
        }
    }

    @Override
    public CommonJsModules getModule()
    {
        return modules;
    }

    public Element getOriginalElement()
    {
        return originalElement;
    }

    public Set<String> getExplicitPublicModules()
    {
        return explicitPublicModules;
    }

    @Override
    public void enabled()
    {
        super.enabled();
        if (generatedDescriptorsManager == null)
        {
            pluginBundle = BundleUtil.findBundleForPlugin(bundleContext, plugin.getKey());
            modules = new CommonJsModules(this, pluginBundle, location);
            generatedDescriptorsManager = new GeneratedDescriptorsManager(pluginBundle, modules, pluginAccessor, pluginEventManager, this);
        }
    }

    @Override
    public void disabled()
    {
        super.disabled();
        if (generatedDescriptorsManager != null)
        {
            generatedDescriptorsManager.close();
        }
        generatedDescriptorsManager = null;
        pluginBundle = null;
    }

    public Set<String> getUnresolvedExternalModuleDependencies()
    {
        return generatedDescriptorsManager != null ?
                generatedDescriptorsManager.getUnresolvedExternalDependencies()
                : Collections.<String>emptySet();
    }

    public ModuleDescriptor createIndividualModuleDescriptor()
    {
        return WebResourceUtil.instantiateDescriptor(moduleFactory, hostContainer);
    }

    String getLocation()
    {
        return location;
    }

    public String getModulesWebResourceCompleteKey()
    {
        return getCompleteKey() + "-modules";
    }

    protected Bundle getPluginBundle()
    {
        return pluginBundle;
    }
}
TOP

Related Classes of com.atlassian.labs.speakeasy.commonjs.descriptor.CommonJsModulesDescriptor

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.