mirror of
https://github.com/angryip/ipscan.git
synced 2025-10-26 11:18:17 +00:00
* FetcherPrefs interface introduced instead of Runnable
* HTTPSenderFetcherPrefs generified as PortTextFetcherPrefs git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/trunk@419 375186e5-ef17-0410-b0b6-91563547dcda
This commit is contained in:
parent
c1655a2b2c
commit
69a2219ad6
@ -124,6 +124,9 @@ text.fetchers.availableList=Available fetchers
|
||||
text.fetchers.info=Fetcher information:
|
||||
text.fetchers.info.notAvailable=Unfortunately, no additional information about this fetcher is available.
|
||||
text.fetchers.preferences=Preferences of the selected fetcher
|
||||
text.fetcher.portText.send=Text to send (\\n, \\r, \\t and \\xXX are permitted)
|
||||
text.fetcher.portText.match=Regexp to match in the response
|
||||
text.fetcher.portText.replace=Regexp replacement string ($0 .. $9 are substituted for matched groups)
|
||||
text.about=%NAME\n\nVersion: %VERSION\nBuild: %BUILD\nBuild date: %DATE\n\n%COPYLEFT
|
||||
text.about.system=Java: %JAVA\nOS: %OS
|
||||
button.OK=OK
|
||||
|
||||
@ -33,7 +33,7 @@ public abstract class AbstractFetcher implements Fetcher {
|
||||
}
|
||||
}
|
||||
|
||||
public Class<? extends Runnable> getPreferencesClass() {
|
||||
public Class<? extends FetcherPrefs> getPreferencesClass() {
|
||||
// no preferences by default
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ public interface Fetcher extends Cloneable, Pluggable {
|
||||
* @return the preferences class that may be used for editing of this fetcher's preferences
|
||||
* or null if no preferences editing is possible
|
||||
*/
|
||||
public Class<? extends Runnable> getPreferencesClass();
|
||||
public Class<? extends FetcherPrefs> getPreferencesClass();
|
||||
|
||||
/**
|
||||
* Does the actual fetching.
|
||||
|
||||
20
src/net/azib/ipscan/fetchers/FetcherPrefs.java
Normal file
20
src/net/azib/ipscan/fetchers/FetcherPrefs.java
Normal file
@ -0,0 +1,20 @@
|
||||
/**
|
||||
* This file is a part of Angry IP Scanner source code,
|
||||
* see http://www.azib.net/ for more information.
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
|
||||
package net.azib.ipscan.fetchers;
|
||||
|
||||
/**
|
||||
* FetcherPrefs - an interface to implement for Fetcher preferences editor classes.
|
||||
*
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public interface FetcherPrefs {
|
||||
/**
|
||||
* Opens a self-maintained GUI editor of concrete fetcher preferences.
|
||||
* @param fetcher to edit
|
||||
*/
|
||||
public void openFor(Fetcher fetcher);
|
||||
}
|
||||
@ -47,7 +47,7 @@ public class FetcherRegistryImpl implements FetcherRegistry {
|
||||
this.registeredFetchers = new LinkedHashMap<String, Fetcher>(registeredFetchers.length);
|
||||
for (Fetcher fetcher : registeredFetchers) {
|
||||
this.registeredFetchers.put(fetcher.getId(), fetcher);
|
||||
Class<? extends Runnable> prefsClass = fetcher.getPreferencesClass();
|
||||
Class<? extends FetcherPrefs> prefsClass = fetcher.getPreferencesClass();
|
||||
if (prefsClass != null && prefsContainer.getComponentAdapterOfType(prefsClass) == null)
|
||||
prefsContainer.registerComponentImplementation(prefsClass);
|
||||
}
|
||||
@ -135,12 +135,12 @@ public class FetcherRegistryImpl implements FetcherRegistry {
|
||||
}
|
||||
|
||||
public void openPreferencesEditor(Fetcher fetcher) throws FetcherException {
|
||||
Class<? extends Runnable> prefsClass = fetcher.getPreferencesClass();
|
||||
Class<? extends FetcherPrefs> prefsClass = fetcher.getPreferencesClass();
|
||||
if (prefsClass == null)
|
||||
throw new FetcherException("preferences.notAvailable");
|
||||
|
||||
Runnable prefs = (Runnable) prefsContainer.getComponentInstanceOfType(prefsClass);
|
||||
prefs.run();
|
||||
FetcherPrefs prefs = (FetcherPrefs) prefsContainer.getComponentInstanceOfType(prefsClass);
|
||||
prefs.openFor(fetcher);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -6,10 +6,7 @@
|
||||
|
||||
package net.azib.ipscan.fetchers;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.azib.ipscan.config.ScannerConfig;
|
||||
import net.azib.ipscan.gui.fetchers.HTTPSenderFetcherPrefs;
|
||||
|
||||
/**
|
||||
* WebDetectFetcher - detects the Web server software running on scanned hosts.
|
||||
@ -27,25 +24,4 @@ public class HTTPSenderFetcher extends PortTextFetcher {
|
||||
return "fetcher.httpSender";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Runnable> getPreferencesClass() {
|
||||
return HTTPSenderFetcherPrefs.class;
|
||||
}
|
||||
|
||||
public String getTextToSend() {
|
||||
return textToSend;
|
||||
}
|
||||
|
||||
public void setTextToSend(String textToSend) {
|
||||
this.textToSend = textToSend;
|
||||
}
|
||||
|
||||
public Pattern getMatchingRegexp() {
|
||||
return matchingRegexp;
|
||||
}
|
||||
|
||||
public void setMatchingRegexp(Pattern matchingRegexp) {
|
||||
this.matchingRegexp = matchingRegexp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ public class PingFetcher extends AbstractFetcher {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Runnable> getPreferencesClass() {
|
||||
public Class<? extends FetcherPrefs> getPreferencesClass() {
|
||||
return PingFetcherPrefs.class;
|
||||
}
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@ import net.azib.ipscan.config.ScannerConfig;
|
||||
import net.azib.ipscan.config.LoggerFactory;
|
||||
import net.azib.ipscan.core.ScanningSubject;
|
||||
import net.azib.ipscan.core.ScanningResult.ResultType;
|
||||
import net.azib.ipscan.gui.fetchers.PortTextFetcherPrefs;
|
||||
|
||||
/**
|
||||
* PortTextFetcher - generic configurable fetcher to read some particular information from a port.
|
||||
@ -92,4 +93,25 @@ public abstract class PortTextFetcher extends AbstractFetcher {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends FetcherPrefs> getPreferencesClass() {
|
||||
return PortTextFetcherPrefs.class;
|
||||
}
|
||||
|
||||
public String getTextToSend() {
|
||||
return textToSend;
|
||||
}
|
||||
|
||||
public void setTextToSend(String textToSend) {
|
||||
this.textToSend = textToSend;
|
||||
}
|
||||
|
||||
public Pattern getMatchingRegexp() {
|
||||
return matchingRegexp;
|
||||
}
|
||||
|
||||
public void setMatchingRegexp(Pattern matchingRegexp) {
|
||||
this.matchingRegexp = matchingRegexp;
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public class PortsFetcher extends AbstractFetcher {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Runnable> getPreferencesClass() {
|
||||
public Class<? extends FetcherPrefs> getPreferencesClass() {
|
||||
return PortsFetcherPrefs.class;
|
||||
}
|
||||
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
/**
|
||||
* This file is a part of Angry IP Scanner source code,
|
||||
* see http://www.azib.net/ for more information.
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
|
||||
package net.azib.ipscan.gui.fetchers;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
import net.azib.ipscan.fetchers.HTTPSenderFetcher;
|
||||
import net.azib.ipscan.gui.AbstractModalDialog;
|
||||
import net.azib.ipscan.gui.util.LayoutHelper;
|
||||
|
||||
/**
|
||||
* HTTPSenderFetcherPrefs
|
||||
*
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public class HTTPSenderFetcherPrefs extends AbstractModalDialog implements Runnable {
|
||||
|
||||
private HTTPSenderFetcher fetcher;
|
||||
|
||||
public HTTPSenderFetcherPrefs(HTTPSenderFetcher fetcher) {
|
||||
this.fetcher = fetcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void populateShell() {
|
||||
shell = new Shell(Display.getCurrent().getActiveShell(), SWT.DIALOG_TRIM);
|
||||
shell.setText(fetcher.getName());
|
||||
shell.setLayout(LayoutHelper.formLayout(3, 3, 3));
|
||||
|
||||
Label label = new Label(shell, SWT.NONE);
|
||||
label.setText(fetcher.getTextToSend());
|
||||
|
||||
shell.pack();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
open();
|
||||
}
|
||||
|
||||
}
|
||||
@ -6,6 +6,8 @@
|
||||
|
||||
package net.azib.ipscan.gui.fetchers;
|
||||
|
||||
import net.azib.ipscan.fetchers.Fetcher;
|
||||
import net.azib.ipscan.fetchers.FetcherPrefs;
|
||||
import net.azib.ipscan.gui.PreferencesDialog;
|
||||
|
||||
/**
|
||||
@ -13,7 +15,7 @@ import net.azib.ipscan.gui.PreferencesDialog;
|
||||
*
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public class PingFetcherPrefs implements Runnable {
|
||||
public class PingFetcherPrefs implements FetcherPrefs {
|
||||
|
||||
private PreferencesDialog preferencesDialog;
|
||||
|
||||
@ -21,7 +23,7 @@ public class PingFetcherPrefs implements Runnable {
|
||||
this.preferencesDialog = preferencesDialog;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
public void openFor(Fetcher fetcher) {
|
||||
preferencesDialog.openTab(0);
|
||||
}
|
||||
|
||||
|
||||
86
src/net/azib/ipscan/gui/fetchers/PortTextFetcherPrefs.java
Normal file
86
src/net/azib/ipscan/gui/fetchers/PortTextFetcherPrefs.java
Normal file
@ -0,0 +1,86 @@
|
||||
/**
|
||||
* This file is a part of Angry IP Scanner source code,
|
||||
* see http://www.azib.net/ for more information.
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
package net.azib.ipscan.gui.fetchers;
|
||||
|
||||
import net.azib.ipscan.config.Labels;
|
||||
import net.azib.ipscan.fetchers.Fetcher;
|
||||
import net.azib.ipscan.fetchers.FetcherPrefs;
|
||||
import net.azib.ipscan.fetchers.PortTextFetcher;
|
||||
import net.azib.ipscan.gui.AbstractModalDialog;
|
||||
import net.azib.ipscan.gui.util.LayoutHelper;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.layout.FormAttachment;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
|
||||
/**
|
||||
* HTTPSenderFetcherPrefs
|
||||
*
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public class PortTextFetcherPrefs extends AbstractModalDialog implements FetcherPrefs {
|
||||
|
||||
private PortTextFetcher fetcher;
|
||||
|
||||
public PortTextFetcherPrefs() {
|
||||
}
|
||||
|
||||
public void openFor(Fetcher fetcher) {
|
||||
this.fetcher = (PortTextFetcher) fetcher;
|
||||
open();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void populateShell() {
|
||||
shell = new Shell(Display.getCurrent().getActiveShell(), SWT.DIALOG_TRIM);
|
||||
shell.setText(fetcher.getName());
|
||||
shell.setLayout(LayoutHelper.formLayout(10, 10, 5));
|
||||
|
||||
Label sendLabel = new Label(shell, SWT.NONE);
|
||||
sendLabel.setText(Labels.getLabel("text.fetcher.portText.send"));
|
||||
sendLabel.setLayoutData(LayoutHelper.formData(new FormAttachment(0), null, new FormAttachment(0), null));
|
||||
Text sendText = new Text(shell, SWT.NONE);
|
||||
sendText.setText(stringToText(fetcher.getTextToSend()));
|
||||
sendText.setLayoutData(LayoutHelper.formData(new FormAttachment(0), new FormAttachment(100), new FormAttachment(sendLabel), null));
|
||||
|
||||
Label matchLabel = new Label(shell, SWT.NONE);
|
||||
matchLabel.setText(Labels.getLabel("text.fetcher.portText.match"));
|
||||
matchLabel.setLayoutData(LayoutHelper.formData(new FormAttachment(0), null, new FormAttachment(sendText), null));
|
||||
Text matchText = new Text(shell, SWT.NONE);
|
||||
matchText.setText(fetcher.getMatchingRegexp().pattern());
|
||||
matchText.setLayoutData(LayoutHelper.formData(new FormAttachment(0), new FormAttachment(sendText, 0, SWT.RIGHT), new FormAttachment(matchLabel), null));
|
||||
|
||||
Label replaceLabel = new Label(shell, SWT.NONE);
|
||||
replaceLabel.setText(Labels.getLabel("text.fetcher.portText.replace"));
|
||||
replaceLabel.setLayoutData(LayoutHelper.formData(new FormAttachment(0), null, new FormAttachment(matchText), null));
|
||||
Text replaceText = new Text(shell, SWT.NONE);
|
||||
replaceText.setText("$1");
|
||||
replaceText.setLayoutData(LayoutHelper.formData(new FormAttachment(0), new FormAttachment(sendText, 0, SWT.RIGHT), new FormAttachment(replaceLabel), null));
|
||||
|
||||
shell.pack();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
private String stringToText(String s) {
|
||||
StringBuilder t = new StringBuilder();
|
||||
for (char c : s.toCharArray()) {
|
||||
if (c == '\n')
|
||||
t.append("\\n");
|
||||
else if (c == '\r')
|
||||
t.append("\\r");
|
||||
else if (c == '\t')
|
||||
t.append("\\t");
|
||||
else
|
||||
t.append(c);
|
||||
}
|
||||
return t.toString();
|
||||
}
|
||||
}
|
||||
@ -6,6 +6,8 @@
|
||||
|
||||
package net.azib.ipscan.gui.fetchers;
|
||||
|
||||
import net.azib.ipscan.fetchers.Fetcher;
|
||||
import net.azib.ipscan.fetchers.FetcherPrefs;
|
||||
import net.azib.ipscan.gui.PreferencesDialog;
|
||||
|
||||
/**
|
||||
@ -13,7 +15,7 @@ import net.azib.ipscan.gui.PreferencesDialog;
|
||||
*
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public class PortsFetcherPrefs implements Runnable {
|
||||
public class PortsFetcherPrefs implements FetcherPrefs {
|
||||
|
||||
private PreferencesDialog preferencesDialog;
|
||||
|
||||
@ -21,7 +23,7 @@ public class PortsFetcherPrefs implements Runnable {
|
||||
this.preferencesDialog = preferencesDialog;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
public void openFor(Fetcher fetcher) {
|
||||
preferencesDialog.openTab(1);
|
||||
}
|
||||
|
||||
|
||||
@ -135,6 +135,7 @@ public class FetcherRegistryImplTest {
|
||||
EditableFetcherPrefs.calledWithMessage = null;
|
||||
fetcherRegistry.openPreferencesEditor(editableFetcher);
|
||||
assertSame(message, EditableFetcherPrefs.calledWithMessage);
|
||||
assertSame(editableFetcher, EditableFetcherPrefs.calledForFetcher);
|
||||
|
||||
try {
|
||||
fetcherRegistry.openPreferencesEditor(ipFetcher);
|
||||
@ -152,13 +153,14 @@ public class FetcherRegistryImplTest {
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public Class<? extends Runnable> getPreferencesClass() {
|
||||
public Class<? extends FetcherPrefs> getPreferencesClass() {
|
||||
return EditableFetcherPrefs.class;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EditableFetcherPrefs implements Runnable {
|
||||
public static class EditableFetcherPrefs implements FetcherPrefs {
|
||||
private static String calledWithMessage;
|
||||
private static Fetcher calledForFetcher;
|
||||
|
||||
private String message;
|
||||
|
||||
@ -166,8 +168,9 @@ public class FetcherRegistryImplTest {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
public void openFor(Fetcher fetcher) {
|
||||
calledWithMessage = message;
|
||||
calledForFetcher = fetcher;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user