package com.l2jserver.plugin; import java.lang.reflect.Modifier; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.Inject; import com.l2jserver.model.template.Template; import com.l2jserver.service.game.scripting.classlistener.Loader; import com.l2jserver.service.game.scripting.classlistener.Unloader; import com.l2jserver.util.ClassUtils; import com.l2jserver.util.factory.CollectionFactory; /** * Utility class that loads all Plugins in classPath of this script context.
* Plugin should be public, not abstract, not interface, must have default * constructor annotated with @Inject. * * @author Rogiel */ public class PluginLoader implements Loader, Unloader { @SuppressWarnings("unused") private static final Logger log = LoggerFactory .getLogger(PluginLoader.class); @Inject public PluginLoader() { } @Override public void load(Class[] classes) { } @Override public void unload(Class[] classes) { } /** * Returns list of suitable Template classes to load/unload * * @param classes * loaded classes * * @return list of Template classes to load/unload */ @SuppressWarnings({ "unchecked", "unused" }) private static Set>> getSuitableClasses( Class[] classes) { final Set>> suitable = CollectionFactory .newSet(); for (Class clazz : classes) { if (!ClassUtils.isSubclass(clazz, Template.class)) continue; if (Modifier.isAbstract(clazz.getModifiers()) || Modifier.isInterface(clazz.getModifiers())) continue; if (!Modifier.isPublic(clazz.getModifiers())) continue; if (clazz.isAnnotationPresent(DisabledPlugin.class)) continue; suitable.add((Class>) clazz); } return suitable; } }