mirror of
https://github.com/angryip/ipscan.git
synced 2025-10-26 11:18:17 +00:00
support plugins with default constructors
This commit is contained in:
parent
32699e8c4f
commit
6b2bd34639
@ -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<Exporter> exporters(TXTExporter e1, CSVExporter e2, XMLExporter e3, IPListExporter e4) {
|
||||
return Arrays.<Exporter>asList(e1, e2, e3, e4);
|
||||
@Provides public List<Exporter> exporters(@Named("plugins") List<Class> plugins, TXTExporter e1, CSVExporter e2, XMLExporter e3, IPListExporter e4) {
|
||||
return addPlugins(Arrays.<Exporter>asList(e1, e2, e3, e4), Exporter.class, plugins);
|
||||
}
|
||||
|
||||
@Provides public List<Fetcher> 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.<Fetcher>asList(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12);
|
||||
@Provides public List<Fetcher> fetchers(@Named("plugins") List<Class> 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.<Fetcher>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<Class> classes) {
|
||||
// TODO: @Named("plugins") List<Class> plugins
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <T extends Plugin> List<T> addPlugins(List<T> original, Class<T> type, @Named("plugins") List<Class> classes) {
|
||||
List<T> result = new ArrayList<T>(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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user