diff --git a/src/net/azib/ipscan/config/ComponentRegistry.java b/src/net/azib/ipscan/config/ComponentRegistry.java index d26aa164..2f93ea61 100644 --- a/src/net/azib/ipscan/config/ComponentRegistry.java +++ b/src/net/azib/ipscan/config/ComponentRegistry.java @@ -7,6 +7,7 @@ package net.azib.ipscan.config; import dagger.Module; import dagger.Provides; +import net.azib.ipscan.core.Plugin; import net.azib.ipscan.core.state.StateMachine; import net.azib.ipscan.exporters.*; import net.azib.ipscan.feeders.FeederCreator; @@ -16,9 +17,9 @@ import net.azib.ipscan.gui.SWTAwareStateMachine; import net.azib.ipscan.gui.feeders.*; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.*; -import org.picocontainer.MutablePicoContainer; import javax.inject.Named; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -71,29 +72,37 @@ public class ComponentRegistry { return Arrays.asList(f1, f2, f3); } - @Provides public List exporters(TXTExporter e1, CSVExporter e2, XMLExporter e3, IPListExporter e4) { - return Arrays.asList(e1, e2, e3, e4); + @Provides public List exporters(@Named("plugins") List plugins, TXTExporter e1, CSVExporter e2, XMLExporter e3, IPListExporter e4) { + return addPlugins(Arrays.asList(e1, e2, e3, e4), Exporter.class, plugins); } - @Provides public List fetchers(IPFetcher f1, PingFetcher f2, PingTTLFetcher f3, HostnameFetcher f4, PortsFetcher f5, - FilteredPortsFetcher f6, WebDetectFetcher f7, HTTPSenderFetcher f8, CommentFetcher f9, - NetBIOSInfoFetcher f10, MACFetcher f11, MACVendorFetcher f12) { - return Arrays.asList(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12); + @Provides public List fetchers(@Named("plugins") List plugins, + IPFetcher f1, PingFetcher f2, PingTTLFetcher f3, HostnameFetcher f4, PortsFetcher f5, + FilteredPortsFetcher f6, WebDetectFetcher f7, HTTPSenderFetcher f8, CommentFetcher f9, + NetBIOSInfoFetcher f10, MACFetcher f11, MACVendorFetcher f12) { + return addPlugins(Arrays.asList(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12), Fetcher.class, plugins); } @Provides MACFetcher selectMacFetcher() { return Platform.WINDOWS ? new WinMACFetcher() : new UnixMACFetcher(); } - - private void registerComponentImplementations(MutablePicoContainer container, List classes) { - // TODO: @Named("plugins") List plugins - + @SuppressWarnings("unchecked") + private List addPlugins(List original, Class type, @Named("plugins") List classes) { + List result = new ArrayList(original); for (Class clazz: classes) { - container.registerComponentImplementation(clazz); + try { + if (type.isAssignableFrom(clazz)) + result.add((T)clazz.newInstance()); + } + catch (Exception e) { + throw new RuntimeException("Cannot instantiate plugin with default constructor: " + clazz.getName()); + } } + return result; } + // TODO: implement start with Dagger private void start() { if (!containerStarted) { containerStarted = true;