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