plugins can now be specified using system property ipscan.plugins

This commit is contained in:
Anton Keks 2011-03-06 20:04:23 +02:00
parent e69c0050e9
commit ef0c7f9b23
5 changed files with 57 additions and 0 deletions

Binary file not shown.

BIN
ext/mockito/mockito-all.jar Normal file

Binary file not shown.

View File

@ -12,6 +12,7 @@ import net.azib.ipscan.core.ScannerDispatcherThreadFactory;
import net.azib.ipscan.core.ScanningResultList;
import net.azib.ipscan.core.net.PingerRegistry;
import net.azib.ipscan.core.net.PingerRegistryImpl;
import net.azib.ipscan.core.plugins.PluginLoader;
import net.azib.ipscan.exporters.CSVExporter;
import net.azib.ipscan.exporters.ExporterRegistry;
import net.azib.ipscan.exporters.IPListExporter;
@ -195,6 +196,8 @@ public class ComponentRegistry {
Logger.getLogger(getClass().getName()).warning("Cannot initialize MacApplicationMenu: " + e);
}
}
new PluginLoader().addTo(container);
}
private void start() {

View File

@ -0,0 +1,26 @@
package net.azib.ipscan.core.plugins;
import net.azib.ipscan.config.LoggerFactory;
import org.picocontainer.MutablePicoContainer;
import java.util.logging.Logger;
public class PluginLoader {
static final Logger LOG = LoggerFactory.getLogger();
public void addTo(MutablePicoContainer container) {
String plugins = System.getProperty("ipscan.plugins");
if (plugins != null) {
String[] classes = plugins.split("\\s*,\\s*");
for (String className : classes) {
try {
Class clazz = Class.forName(className);
container.registerComponentImplementation(clazz);
}
catch (ClassNotFoundException e) {
LOG.warning("Unable to load plugin: " + className);
}
}
}
}
}

View File

@ -0,0 +1,28 @@
package net.azib.ipscan.core.plugins;
import net.azib.ipscan.core.ScanningSubject;
import net.azib.ipscan.fetchers.AbstractFetcher;
import org.junit.Test;
import org.picocontainer.MutablePicoContainer;
import static org.mockito.Mockito.*;
public class PluginLoaderTest {
@Test
public void loadFromSystemProperty() {
System.setProperty("ipscan.plugins", DummyFetcher.class.getName());
MutablePicoContainer container = mock(MutablePicoContainer.class);
new PluginLoader().addTo(container);
verify(container).registerComponentImplementation(DummyFetcher.class);
}
public static class DummyFetcher extends AbstractFetcher {
public Object scan(ScanningSubject subject) {
return "dummy";
}
public String getId() {
return "dummy";
}
}
}