diff --git a/src/net/azib/ipscan/config/ComponentRegistry.java b/src/net/azib/ipscan/config/ComponentRegistry.java index 42543121..f5d526d0 100644 --- a/src/net/azib/ipscan/config/ComponentRegistry.java +++ b/src/net/azib/ipscan/config/ComponentRegistry.java @@ -8,13 +8,16 @@ package net.azib.ipscan.config; import dagger.Module; import dagger.Provides; import net.azib.ipscan.core.Plugin; +import net.azib.ipscan.core.PluginLoader; import net.azib.ipscan.core.state.StateMachine; import net.azib.ipscan.exporters.*; import net.azib.ipscan.feeders.FeederCreator; import net.azib.ipscan.feeders.FeederRegistry; import net.azib.ipscan.fetchers.*; +import net.azib.ipscan.gui.MainWindow; import net.azib.ipscan.gui.SWTAwareStateMachine; import net.azib.ipscan.gui.feeders.*; +import net.azib.ipscan.util.Injector; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.*; @@ -32,6 +35,36 @@ import static java.util.Arrays.asList; */ @Module public class ComponentRegistry { + public void register(Injector i) { + Display display = Display.getDefault(); + i.register(Display.class, display); + Shell shell = new Shell(); + i.register(Shell.class, shell); + i.register(Menu.class, "mainMenu", new Menu(shell, SWT.BAR)); + i.register(Composite.class, "feederArea", new Composite(shell, SWT.NONE)); + Composite controlsArea = new Composite(shell, SWT.NONE); + i.register(Composite.class, "controlsArea", controlsArea); + i.register(Button.class, "startStopButton", new Button(controlsArea, SWT.NONE)); + i.register(Combo.class, "feederSelectionCombo", new Combo(controlsArea, SWT.READ_ONLY)); + SWTAwareStateMachine stateMachine = new SWTAwareStateMachine(display); + i.register(SWTAwareStateMachine.class, stateMachine); + i.register(StateMachine.class, stateMachine); + i.register(RangeFeederGUI.class, RandomFeederGUI.class, FileFeederGUI.class); + i.register(TXTExporter.class, CSVExporter.class, XMLExporter.class, IPListExporter.class); + i.register(IPFetcher.class, PingFetcher.class, PingTTLFetcher.class, HostnameFetcher.class, PortsFetcher.class, + FilteredPortsFetcher.class, WebDetectFetcher.class, HTTPSenderFetcher.class, CommentFetcher.class, + NetBIOSInfoFetcher.class, PacketLossFetcher.class, HTTPProxyFetcher.class); + i.register(MACFetcher.class, Platform.WINDOWS ? new WinMACFetcher() : new UnixMACFetcher()); + i.register(MACVendorFetcher.class); + } + + public static void main(String[] args) { + Injector i = new Injector(); + new ConfigModule().register(i); + new ComponentRegistry().register(i); + new PluginLoader().getClasses().forEach(i::require); + System.out.println(i.require(MainWindow.class)); + } @Provides @Singleton public Display getDisplay() { return Display.getDefault(); @@ -91,7 +124,7 @@ public class ComponentRegistry { @SuppressWarnings("unchecked") private List addPlugins(List original, Class type, List> classes) { List result = new ArrayList<>(original); - for (Class clazz: classes) { + for (Class clazz: classes) { try { if (type.isAssignableFrom(clazz)) result.add((T)clazz.newInstance()); diff --git a/src/net/azib/ipscan/config/ConfigModule.java b/src/net/azib/ipscan/config/ConfigModule.java index 8619aa32..2f42b2b7 100644 --- a/src/net/azib/ipscan/config/ConfigModule.java +++ b/src/net/azib/ipscan/config/ConfigModule.java @@ -2,11 +2,23 @@ package net.azib.ipscan.config; import dagger.Module; import dagger.Provides; +import net.azib.ipscan.util.Injector; import java.util.prefs.Preferences; @Module public class ConfigModule { + public void register(Injector i) { + Config config = Config.getConfig(); + i.register(Config.class, config); + i.register(Labels.class, Labels.getInstance()); + i.register(Preferences.class, config.getPreferences()); + i.register(ScannerConfig.class, config.forScanner()); + i.register(OpenersConfig.class, config.forOpeners()); + i.register(FavoritesConfig.class, config.forFavorites()); + i.register(GUIConfig.class, config.forGUI()); + } + @Provides Config getConfig() { return Config.getConfig(); } diff --git a/src/net/azib/ipscan/config/GUIConfig.java b/src/net/azib/ipscan/config/GUIConfig.java index 13238f1b..81071a85 100644 --- a/src/net/azib/ipscan/config/GUIConfig.java +++ b/src/net/azib/ipscan/config/GUIConfig.java @@ -36,7 +36,6 @@ public class GUIConfig { public enum DisplayMethod {ALL, ALIVE, PORTS} - // package local constructor GUIConfig(Preferences preferences) { this.preferences = preferences; load(); diff --git a/src/net/azib/ipscan/util/Injector.java b/src/net/azib/ipscan/util/Injector.java index 0047ef9d..e99ce1bf 100644 --- a/src/net/azib/ipscan/util/Injector.java +++ b/src/net/azib/ipscan/util/Injector.java @@ -45,12 +45,11 @@ public class Injector { Constructor constructor = (Constructor) stream(type.getConstructors()) .filter(c -> c.isAnnotationPresent(Inject.class)).findAny() .orElseThrow(() -> new InjectException(type.getName() + " has no constructors annotated with @Inject")); - Object[] deps = deps(constructor); try { - return constructor.newInstance(deps); + return constructor.newInstance(deps(constructor)); } catch (Exception e) { - throw new InjectException("Cannot create " + type.getName() + ", deps: " + Arrays.toString(deps), e); + throw new InjectException("Cannot create " + type.getName() + ", deps: " + Arrays.toString(constructor.getGenericParameterTypes()), e); } }