Package org.jnode.system.repository.plugins

Source Code of org.jnode.system.repository.plugins.PluginLoaderPlugin

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.system.repository.plugins;

import java.nio.ByteBuffer;

import javax.naming.CompositeName;
import javax.naming.InvalidNameException;
import javax.naming.Name;
import javax.naming.NameNotFoundException;

import org.apache.log4j.Logger;
import org.jnode.naming.InitialNaming;
import org.jnode.plugin.PluginLoader;
import org.jnode.plugin.PluginManager;
import org.jnode.plugin.PluginReference;
import org.jnode.plugin.PluginRegistry;
import org.jnode.system.repository.RepositoryPlugin;
import org.jnode.system.repository.spi.SystemRepositoryProvider;

public final class PluginLoaderPlugin extends RepositoryPlugin {

    /**
     * Name of the Plugins sub-node in the repository
     */
    private static final Name PLUGINS;

    /**
     * Empty array of providers
     */
    static final SystemRepositoryProvider[] EMPTY_ARR = new SystemRepositoryProvider[0];

    private PluginRegistry registry;

    /**
     * My logger
     */
    private static final Logger log = Logger
        .getLogger(PluginLoaderPlugin.class);

    static {
        try {
            PLUGINS = new CompositeName("plugins");
        } catch (InvalidNameException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * @param next
     */
    public PluginLoaderPlugin(RepositoryPlugin next) {
        super(next);
    }

    /**
     * @see org.jnode.system.repository.RepositoryPlugin
     * #providerAdded(org.jnode.system.repository.spi.SystemRepositoryProvider[],
     *      org.jnode.system.repository.spi.SystemRepositoryProvider)
     */
    @Override
    protected void providerAdded(SystemRepositoryProvider[] providers,
                                 SystemRepositoryProvider provider) {
        // TODO Auto-generated method stub
        super.providerAdded(providers, provider);
    }

    /**
     * @see org.jnode.system.repository.RepositoryPlugin
     * #providerRemoved(org.jnode.system.repository.spi.SystemRepositoryProvider[],
     *      org.jnode.system.repository.spi.SystemRepositoryProvider)
     */
    @Override
    protected void providerRemoved(SystemRepositoryProvider[] providers,
                                   SystemRepositoryProvider provider) {
        // TODO Auto-generated method stub
        super.providerRemoved(providers, provider);
    }

    /**
     * @see org.jnode.system.repository.RepositoryPlugin#start()
     */
    @Override
    protected void start() {
        try {
            final PluginManager pm;
            pm = InitialNaming.lookup(PluginManager.NAME);
            registry = pm.getRegistry();
        } catch (NameNotFoundException ex) {
            log.error("Cannot find PluginManager; PluginLoader not installed");
        }
    }

    /**
     * @see org.jnode.system.repository.RepositoryPlugin#stop()
     */
    @Override
    protected void stop() {
        registry = null;
    }

    /**
     * The actual loader implementation.
     *
     * @author Ewout Prangsma (epr@users.sourceforge.net)
     */
    private static class Loader extends PluginLoader {

        /**
         * List of providers that have a plugins sub-node
         */
        private SystemRepositoryProvider[] pluginProviders = EMPTY_ARR;

        /**
         * @see org.jnode.plugin.PluginLoader#getPluginBuffer(java.lang.String,
         *      java.lang.String)
         */
        @Override
        public ByteBuffer getPluginBuffer(PluginReference pluginReference) {
            final Name name;
            try {
                name = ((Name) PLUGINS.clone()).add(getPluginFileName(pluginReference));
            } catch (InvalidNameException ex) {
                log.debug("Cannot combine name", ex);
                return null;
            }
            final SystemRepositoryProvider[] pluginProviders = this.pluginProviders;
            for (SystemRepositoryProvider prov : pluginProviders) {
                //todo empty ?
            }
            // TODO Auto-generated method stub
            return null;
        }
    }
}
TOP

Related Classes of org.jnode.system.repository.plugins.PluginLoaderPlugin

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.