mirror of
https://github.com/angryip/ipscan.git
synced 2025-10-26 11:18:17 +00:00
unbind PluginLoader from PicoContainer
This commit is contained in:
parent
5a17df49ae
commit
47782e17c4
@ -5,10 +5,8 @@
|
||||
*/
|
||||
package net.azib.ipscan.config;
|
||||
|
||||
import net.azib.ipscan.core.PluginLoader;
|
||||
import net.azib.ipscan.core.*;
|
||||
import net.azib.ipscan.core.Scanner;
|
||||
import net.azib.ipscan.core.ScannerDispatcherThreadFactory;
|
||||
import net.azib.ipscan.core.ScanningResultList;
|
||||
import net.azib.ipscan.core.net.PingerRegistry;
|
||||
import net.azib.ipscan.exporters.*;
|
||||
import net.azib.ipscan.fetchers.*;
|
||||
@ -150,7 +148,14 @@ public class ComponentRegistry {
|
||||
container.registerComponentImplementation(ToolsActions.ChooseFetchers.class);
|
||||
container.registerComponentImplementation(HelpMenuActions.CheckVersion.class);
|
||||
|
||||
new PluginLoader().addTo(container);
|
||||
java.util.List<Class> classes = new PluginLoader().getClasses();
|
||||
registerComponentImplementations(container, classes);
|
||||
}
|
||||
|
||||
private void registerComponentImplementations(MutablePicoContainer container, java.util.List<Class> classes) {
|
||||
for (Class clazz: classes) {
|
||||
container.registerComponentImplementation(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
private void start() {
|
||||
|
||||
@ -7,6 +7,8 @@ import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
import java.util.logging.Logger;
|
||||
@ -29,28 +31,32 @@ import java.util.logging.Logger;
|
||||
* In either way, all plugins must implement {@link net.azib.ipscan.core.Plugin} and one or more of the concrete interfaces.
|
||||
*/
|
||||
public class PluginLoader {
|
||||
static final Logger LOG = LoggerFactory.getLogger();
|
||||
private static final Logger LOG = LoggerFactory.getLogger();
|
||||
|
||||
public List<Class> getClasses() {
|
||||
List<Class> container = new ArrayList<Class>();
|
||||
|
||||
public void addTo(MutablePicoContainer container) {
|
||||
loadPluginsSpecifiedInSystemProperties(container);
|
||||
loadPluginJars(container, getOwnFile());
|
||||
loadPluginJars(container, new File(System.getProperty("user.home"), ".ipscan/placeholder"));
|
||||
}
|
||||
|
||||
void loadPluginsSpecifiedInSystemProperties(MutablePicoContainer container) {
|
||||
return container;
|
||||
}
|
||||
|
||||
void loadPluginsSpecifiedInSystemProperties(List<Class> container) {
|
||||
String plugins = System.getProperty("ipscan.plugins");
|
||||
if (plugins != null) {
|
||||
loadPluginClasses(container, getClass().getClassLoader(), plugins);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadPluginClasses(MutablePicoContainer container, ClassLoader classLoader, String csvNames) {
|
||||
private void loadPluginClasses(List<Class> container, ClassLoader classLoader, String csvNames) {
|
||||
String[] classes = csvNames.split("\\s*,\\s*");
|
||||
for (String className : classes) {
|
||||
try {
|
||||
Class clazz = Class.forName(className, true, classLoader);
|
||||
if (Plugin.class.isAssignableFrom(clazz))
|
||||
container.registerComponentImplementation(clazz);
|
||||
container.add(clazz);
|
||||
else
|
||||
LOG.warning("Plugin class " + clazz.getName() + " is not assignable to " + Plugin.class.getName());
|
||||
}
|
||||
@ -60,7 +66,7 @@ public class PluginLoader {
|
||||
}
|
||||
}
|
||||
|
||||
void loadPluginJars(MutablePicoContainer container, final File ownFile) {
|
||||
void loadPluginJars(List<Class> container, final File ownFile) {
|
||||
if (!ownFile.getParentFile().exists()) return;
|
||||
|
||||
File[] jars = ownFile.getParentFile().listFiles(new FilenameFilter() {
|
||||
|
||||
@ -6,6 +6,7 @@ import org.mockito.ArgumentCaptor;
|
||||
import org.picocontainer.MutablePicoContainer;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@ -14,13 +15,13 @@ import static org.mockito.Mockito.verify;
|
||||
|
||||
public class PluginLoaderTest {
|
||||
PluginLoader loader = new PluginLoader();
|
||||
MutablePicoContainer container = mock(MutablePicoContainer.class);
|
||||
List<Class> container = mock(List.class);
|
||||
|
||||
@Test
|
||||
public void loadFromSystemProperty() {
|
||||
System.setProperty("ipscan.plugins", DummyFetcher.class.getName());
|
||||
loader.loadPluginsSpecifiedInSystemProperties(container);
|
||||
verify(container).registerComponentImplementation(DummyFetcher.class);
|
||||
verify(container).add(DummyFetcher.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -36,7 +37,7 @@ public class PluginLoaderTest {
|
||||
loader.loadPluginJars(container, loader.getClassLocation(getClass()));
|
||||
|
||||
ArgumentCaptor<Class> classCaptor = ArgumentCaptor.forClass(Class.class);
|
||||
verify(container).registerComponentImplementation(classCaptor.capture());
|
||||
verify(container).add(classCaptor.capture());
|
||||
Class plugin = classCaptor.getValue();
|
||||
assertEquals("test.TestPlugin", plugin.getName());
|
||||
assertTrue(Plugin.class.isAssignableFrom(plugin));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user