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

com.github.yoojia.next.PluginManager Maven / Gradle / Ivy

package com.github.yoojia.next;

import com.github.yoojia.next.lang.ClassLoader;
import com.github.yoojia.next.lang.Sorts;
import com.github.yoojia.next.supports.Config;
import com.github.yoojia.next.supports.Context;
import com.github.yoojia.next.supports.ImmutableObject;
import com.github.yoojia.next.supports.NextPlugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

/**
 * @author YOOJIA.CHEN ([email protected])
 * @version 2015-10-14
 */
class PluginManager implements KernelManager {

    private final Logger mLogger = LoggerFactory.getLogger(PluginManager.class);

    private final ArrayList mUserPlugins = new ArrayList<>();

    private final ImmutableObject mLoader = new ImmutableObject<>();
    private final ImmutableObject mContext = new ImmutableObject<>();

    PluginManager() {
    }

    public void init(ClassLoader loader, Context context){
        mLoader.setOnce(loader);
        mContext.setOnce(context);
    }

    @Override
    public void onPrepares() {
        final List configs = mContext.get().getRootConfig().getSections("appPlugins");
        final ArrayList> tmp = new ArrayList<>();
        for (Config c : configs) {
            final String className = c.getValue("class", null);
            final NextPlugin plugin = mLoader.get().newClassByName(className);
            final int priority = c.getValue("priority", plugin.getPriority());
            final Config args = c.getSection("args");
            mLogger.trace("Prepare APP plugin, Class={}, Priority={}, Args={}", className, priority, args);
            tmp.add(new Config.Wrap<>(priority, plugin, args));
        }
        final Comparator ordering = new Comparator() {
            @Override
            public int compare(Config.Wrap w1, Config.Wrap w2) {
                return w1.priority - w2.priority;
            }
        };
        for(Config.Wrap w : new Sorts>(ordering).sortedCopy(tmp)){
            w.target.init(mContext.get(), w.args);
            mUserPlugins.add(w.target);
        }
    }

    public void onStarts(){
        for (NextPlugin p : mUserPlugins) {
            p.onStartup(mContext.get());
        }
    }

    public void onStops(){
        for (NextPlugin p : mUserPlugins) {
            p.onShutdown(mContext.get());
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy