Skip to content

Commit 9b3304d

Browse files
committed
#491 add Pinger plugins to the registry, as plugins are loaded after the registry is created
1 parent b77b4e9 commit 9b3304d

4 files changed

Lines changed: 19 additions & 11 deletions

File tree

CHANGELOG

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Changes in 3.9.3:
22
- Bundle Java 21 with Windows and Mac builds
33
- Updated SWT for all platforms, improved loading of correct SWT library on Linux
44
- Add support for plugin jars containing their own messages.properties
5-
- Add support for Pinger plugins
5+
- Add support for Pinger plugins #491
66
- Allow plugins to merge multiple ping results
77
- The UDP pinger now uses the same port as traceroute programs
88
- FileFeeder: recognition of FQDNs (with trailing dots and numbers in TLDs) in IP list files

src/net/azib/ipscan/config/ComponentRegistry.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package net.azib.ipscan.config;
77

88
import net.azib.ipscan.core.PluginLoader;
9+
import net.azib.ipscan.core.net.Pinger;
10+
import net.azib.ipscan.core.net.PingerRegistry;
911
import net.azib.ipscan.di.Injector;
1012
import net.azib.ipscan.exporters.*;
1113
import net.azib.ipscan.fetchers.*;
@@ -35,7 +37,12 @@ public Injector init(boolean withGUI) throws Exception {
3537
new ComponentRegistry().register(i);
3638
if (withGUI) {
3739
new GUIRegistry().register(i);
38-
new PluginLoader().getClasses().forEach(i::require);
40+
var pingerRegistry = i.require(PingerRegistry.class);
41+
new PluginLoader().getClasses().forEach(c -> {
42+
var plugin = i.require(c);
43+
if (Pinger.class.isAssignableFrom(c))
44+
pingerRegistry.register(plugin.getId(), (Class) c);
45+
});
3946
}
4047
return i;
4148
}

src/net/azib/ipscan/core/PluginLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public List<Class<? extends Plugin>> getClasses() {
3939

4040
loadPluginsSpecifiedInSystemProperties(container);
4141
loadPluginJars(container, getOwnFile());
42-
loadPluginJars(container, new File(System.getProperty("user.home"), ".ipscan/placeholder"));
42+
loadPluginJars(container, new File(System.getProperty("user.home"), ".ipscan/."));
4343

4444
return container;
4545
}

src/net/azib/ipscan/core/net/PingerRegistry.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,16 @@ public PingerRegistry(ScannerConfig scannerConfig, Injector injector) throws Cla
4242

4343
pingers = new LinkedHashMap<>();
4444
if (Platform.WINDOWS)
45-
pingers.put("pinger.windows", (Class<Pinger>) Class.forName(getClass().getPackage().getName() + ".WindowsPinger"));
46-
pingers.put(UDPPinger.ID, UDPPinger.class);
47-
pingers.put(TCPPinger.ID, TCPPinger.class);
48-
pingers.put(CombinedUnprivilegedPinger.ID, CombinedUnprivilegedPinger.class);
49-
pingers.put(JavaPinger.ID, JavaPinger.class);
50-
pingers.put(ARPPinger.ID, ARPPinger.class);
45+
register("pinger.windows", (Class<Pinger>) Class.forName(getClass().getPackage().getName() + ".WindowsPinger"));
46+
register(JavaPinger.ID, JavaPinger.class);
47+
register(UDPPinger.ID, UDPPinger.class);
48+
register(TCPPinger.ID, TCPPinger.class);
49+
register(CombinedUnprivilegedPinger.ID, CombinedUnprivilegedPinger.class);
50+
register(ARPPinger.ID, ARPPinger.class);
51+
}
5152

52-
// Add already registered plugin pingers
53-
injector.requireAll(Pinger.class).forEach(p -> pingers.put(p.getId(), p.getClass()));
53+
public void register(String id, Class<? extends Pinger> clazz) {
54+
pingers.put(id, clazz);
5455
}
5556

5657
public String[] getRegisteredNames() {

0 commit comments

Comments
 (0)