diff --git a/src/net/azib/ipscan/config/ComponentRegistry.java b/src/net/azib/ipscan/config/ComponentRegistry.java index 62171921..d9484ced 100644 --- a/src/net/azib/ipscan/config/ComponentRegistry.java +++ b/src/net/azib/ipscan/config/ComponentRegistry.java @@ -41,7 +41,7 @@ public class ComponentRegistry { private boolean containerStarted; @Inject - public ComponentRegistry(java.util.List plugins, java.util.List fetchers) { + public ComponentRegistry(java.util.List plugins) { MutablePicoContainer container = new DefaultPicoContainer(); this.container = container; @@ -60,12 +60,9 @@ public class ComponentRegistry { container.registerComponentImplementation(ConfigDetector.class); container.registerComponentInstance(DaggerExporterComponent.create().get()); -// container.registerComponentImplementation(ExporterRegistry.class); -// registerComponentImplementations(container, exporters); container.registerComponentImplementation(TXTExporter.class); - container.registerComponentImplementation(FetcherRegistry.class, FetcherRegistry.class); - registerComponentImplementations(container, fetchers); + container.registerComponentInstance(DaggerFetcherComponent.create().get()); container.registerComponentImplementation(PingerRegistry.class, PingerRegistry.class); container.registerComponentImplementation(ScanningResultList.class); diff --git a/src/net/azib/ipscan/config/Config.java b/src/net/azib/ipscan/config/Config.java index d0a040ad..34a4b460 100644 --- a/src/net/azib/ipscan/config/Config.java +++ b/src/net/azib/ipscan/config/Config.java @@ -3,6 +3,9 @@ */ package net.azib.ipscan.config; +import dagger.Module; +import dagger.Provides; + import java.util.Locale; import java.util.prefs.Preferences; diff --git a/src/net/azib/ipscan/config/ConfigModule.java b/src/net/azib/ipscan/config/ConfigModule.java index 407d3c10..9d385c5d 100644 --- a/src/net/azib/ipscan/config/ConfigModule.java +++ b/src/net/azib/ipscan/config/ConfigModule.java @@ -7,14 +7,31 @@ import net.azib.ipscan.exporters.Exporter; import javax.inject.Named; import java.util.List; +import java.util.prefs.Preferences; /** * Created by englishman on 6/6/15. */ @Module public class ConfigModule { + @Provides - public ComponentRegistry getRegistry(@Named("plugins") List plugins, @Named("fetchers") List fetchers) { - return new ComponentRegistry(plugins, fetchers); + public Preferences providePreferences() { + return Config.getConfig().getPreferences(); + } + + @Provides + public ScannerConfig provideScannerConfig() { + return Config.getConfig().forScanner(); + } + + @Provides + public CommentsConfig provideCommentsConfig(Preferences preferences) { + return new CommentsConfig(preferences); + } + + @Provides + public ComponentRegistry getRegistry(List plugins) { + return new ComponentRegistry(plugins); } } diff --git a/src/net/azib/ipscan/core/PluginLoader.java b/src/net/azib/ipscan/core/PluginLoader.java index 0bb89803..90efb8f8 100644 --- a/src/net/azib/ipscan/core/PluginLoader.java +++ b/src/net/azib/ipscan/core/PluginLoader.java @@ -36,7 +36,7 @@ import java.util.logging.Logger; public class PluginLoader { private static final Logger LOG = LoggerFactory.getLogger(); - @Provides @Named("plugins") + @Provides public List getClasses() { List container = new ArrayList(); diff --git a/src/net/azib/ipscan/core/net/PingerRegistryComponent.java b/src/net/azib/ipscan/core/net/PingerRegistryComponent.java new file mode 100644 index 00000000..44675246 --- /dev/null +++ b/src/net/azib/ipscan/core/net/PingerRegistryComponent.java @@ -0,0 +1,15 @@ +package net.azib.ipscan.core.net; + +import dagger.Component; +import net.azib.ipscan.config.Config; +import net.azib.ipscan.config.ConfigModule; +import net.azib.ipscan.fetchers.FetcherModule; +import net.azib.ipscan.fetchers.FetcherRegistry; + +/** + * @author Andriy Kryvtsun + */ +@Component(modules = {PingerRegistryModule.class, ConfigModule.class}) +public interface PingerRegistryComponent { + PingerRegistry get(); +} diff --git a/src/net/azib/ipscan/core/net/PingerRegistryModule.java b/src/net/azib/ipscan/core/net/PingerRegistryModule.java new file mode 100644 index 00000000..bbffda04 --- /dev/null +++ b/src/net/azib/ipscan/core/net/PingerRegistryModule.java @@ -0,0 +1,17 @@ +package net.azib.ipscan.core.net; + +import dagger.Module; +import dagger.Provides; +import net.azib.ipscan.config.ScannerConfig; + +/** + * @author Andriy Kryvtsun + */ +@Module +public class PingerRegistryModule { + + @Provides + public PingerRegistry providePingerRegistry(ScannerConfig scannerConfig) { + return new PingerRegistry(scannerConfig); + } +} diff --git a/src/net/azib/ipscan/exporters/ExporterModule.java b/src/net/azib/ipscan/exporters/ExporterModule.java index a5221d10..dca034bb 100644 --- a/src/net/azib/ipscan/exporters/ExporterModule.java +++ b/src/net/azib/ipscan/exporters/ExporterModule.java @@ -13,39 +13,12 @@ import java.util.List; public class ExporterModule { @Provides - public Exporter[] getDefaultExporters() { + public Exporter[] provideExporters() { return new Exporter[] {new TXTExporter(), new CSVExporter(), new XMLExporter(), new IPListExporter()}; } -// @Provides -// public TXTExporter getTXTExporter() { -// return new TXTExporter(); -// } - -// @Provides -// public Class[] getDefaultExporters() { -// return new Class[] {TXTExporter.class, CSVExporter.class, XMLExporter.class, IPListExporter.class}; -// } -// -// @Provides -// public ExporterRegistry getExporterRegistry(Class[] exporters) { -// List list = new ArrayList(); -// for (Class ec: exporters) { -// try { -// list.add(ec.newInstance()); -// } -// catch (InstantiationException e) { -// e.printStackTrace(); -// } -// catch (IllegalAccessException e) { -// e.printStackTrace(); -// } -// } -// return new ExporterRegistry(list.toArray(new Exporter[exporters.length])); -// } - @Provides - public ExporterRegistry getExporterRegistry(Exporter[] exporters) { + public ExporterRegistry provideExporterRegistry(Exporter[] exporters) { return new ExporterRegistry(exporters); } } diff --git a/src/net/azib/ipscan/fetchers/FetcherComponent.java b/src/net/azib/ipscan/fetchers/FetcherComponent.java new file mode 100644 index 00000000..a10f7d92 --- /dev/null +++ b/src/net/azib/ipscan/fetchers/FetcherComponent.java @@ -0,0 +1,13 @@ +package net.azib.ipscan.fetchers; + +import dagger.Component; +import net.azib.ipscan.config.ConfigModule; +import net.azib.ipscan.core.net.PingerRegistryModule; + +/** + * @author Andriy Kryvtsun + */ +@Component(modules = {FetcherModule.class, ConfigModule.class, PingerRegistryModule.class}) +public interface FetcherComponent { + FetcherRegistry get(); +} diff --git a/src/net/azib/ipscan/fetchers/FetcherModule.java b/src/net/azib/ipscan/fetchers/FetcherModule.java index 4cc4a6e1..4cbc2933 100644 --- a/src/net/azib/ipscan/fetchers/FetcherModule.java +++ b/src/net/azib/ipscan/fetchers/FetcherModule.java @@ -2,12 +2,16 @@ package net.azib.ipscan.fetchers; import dagger.Module; import dagger.Provides; +import net.azib.ipscan.config.CommentsConfig; import net.azib.ipscan.config.Platform; +import net.azib.ipscan.config.ScannerConfig; +import net.azib.ipscan.core.net.PingerRegistry; import net.azib.ipscan.exporters.*; import javax.inject.Named; import java.util.ArrayList; import java.util.List; +import java.util.prefs.Preferences; /** * @author Andriy Kryvtsun @@ -15,24 +19,29 @@ import java.util.List; @Module public class FetcherModule { - @Provides @Named("fetchers") - public List provideClasses() { + @Provides + public Fetcher[] provideFetchers(PingerRegistry pingerRegistry, ScannerConfig scannerConfig, CommentsConfig commentsConfig) { - List classes = new ArrayList(); + MACFetcher macFetcher = Platform.WINDOWS ? new WinMACFetcher() : new UnixMACFetcher(); - classes.add(IPFetcher.class); - classes.add(PingFetcher.class); - classes.add(PingTTLFetcher.class); - classes.add(HostnameFetcher.class); - classes.add(PortsFetcher.class); - classes.add(FilteredPortsFetcher.class); - classes.add(WebDetectFetcher.class); - classes.add(HTTPSenderFetcher.class); - classes.add(CommentFetcher.class); - classes.add(NetBIOSInfoFetcher.class); - classes.add(Platform.WINDOWS ? WinMACFetcher.class : UnixMACFetcher.class); - classes.add(MACVendorFetcher.class); + return new Fetcher[] { + new IPFetcher(), + new PingFetcher(pingerRegistry, scannerConfig), + new PingTTLFetcher(pingerRegistry, scannerConfig), + new HostnameFetcher(), + new PortsFetcher(scannerConfig), + new FilteredPortsFetcher(scannerConfig), + new WebDetectFetcher(scannerConfig), + new HTTPSenderFetcher(scannerConfig), + new CommentFetcher(commentsConfig), + new NetBIOSInfoFetcher(), + macFetcher, + new MACVendorFetcher(macFetcher), + }; + } - return classes; + @Provides + public FetcherRegistry provideFetcherRegistry(Fetcher[] fetchers, Preferences preferences) { + return new FetcherRegistry(fetchers, preferences); } } diff --git a/src/net/azib/ipscan/fetchers/FetcherRegistry.java b/src/net/azib/ipscan/fetchers/FetcherRegistry.java index b827c8df..4a20dac5 100644 --- a/src/net/azib/ipscan/fetchers/FetcherRegistry.java +++ b/src/net/azib/ipscan/fetchers/FetcherRegistry.java @@ -29,14 +29,15 @@ public class FetcherRegistry { private Map selectedFetchers; /** PicoContainer for FetcherPrefs components */ + // TODO remove local PicoContainer usage here private PicoContainer prefsContainer; /** A collection of update listeners - observers of FetcherRegistry */ private List updateListeners = new ArrayList(); - public FetcherRegistry(Fetcher[] registeredFetchers, Preferences preferences, PicoContainer parentContainer) { + public FetcherRegistry(Fetcher[] registeredFetchers, Preferences preferences) { this.preferences = preferences; - MutablePicoContainer prefsContainer = new DefaultPicoContainer(parentContainer); + MutablePicoContainer prefsContainer = new DefaultPicoContainer(); this.registeredFetchers = new LinkedHashMap(registeredFetchers.length); for (Fetcher fetcher : registeredFetchers) { diff --git a/test/net/azib/ipscan/fetchers/FetcherRegistryTest.java b/test/net/azib/ipscan/fetchers/FetcherRegistryTest.java index 18ef9d02..ccd22c75 100644 --- a/test/net/azib/ipscan/fetchers/FetcherRegistryTest.java +++ b/test/net/azib/ipscan/fetchers/FetcherRegistryTest.java @@ -39,7 +39,7 @@ public class FetcherRegistryTest { hostnameFetcher = new HostnameFetcher(); commentFetcher = new CommentFetcher(null); portsFetcher = new PortsFetcher(null); - fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, pingFetcher, hostnameFetcher, commentFetcher, portsFetcher}, preferences, null); + fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, pingFetcher, hostnameFetcher, commentFetcher, portsFetcher}, preferences); } @After @@ -72,18 +72,18 @@ public class FetcherRegistryTest { @Test public void testLoadPreferences() throws Exception { preferences.remove(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS); - fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher, commentFetcher}, preferences, null); + fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher, commentFetcher}, preferences); assertEquals(4, fetcherRegistry.getSelectedFetchers().size()); preferences.put(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS, hostnameFetcher.getId() + "###" + commentFetcher.getId()); - fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher, commentFetcher}, preferences, null); + fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher, commentFetcher}, preferences); assertEquals(2, fetcherRegistry.getSelectedFetchers().size()); Iterator iterator = fetcherRegistry.getSelectedFetchers().iterator(); assertSame(hostnameFetcher, iterator.next()); assertSame(commentFetcher, iterator.next()); preferences.put(FetcherRegistry.PREFERENCE_SELECTED_FETCHERS, "not-existing-fetcher###" + hostnameFetcher.getId()); - fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher}, preferences, null); + fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, hostnameFetcher}, preferences); assertEquals(1, fetcherRegistry.getSelectedFetchers().size()); } @@ -126,7 +126,7 @@ public class FetcherRegistryTest { container.registerComponentInstance(message); Fetcher editableFetcher = new EditableFetcher(); - fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, editableFetcher}, preferences, container); + fetcherRegistry = new FetcherRegistry(new Fetcher[] {ipFetcher, editableFetcher}, preferences); EditableFetcherPrefs.calledWithMessage = null; fetcherRegistry.openPreferencesEditor(editableFetcher);