* 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:
angryziber 2008-05-09 21:28:55 +00:00
parent c1655a2b2c
commit 69a2219ad6
14 changed files with 153 additions and 86 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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.

View 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);
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -48,7 +48,7 @@ public class PingFetcher extends AbstractFetcher {
}
@Override
public Class<? extends Runnable> getPreferencesClass() {
public Class<? extends FetcherPrefs> getPreferencesClass() {
return PingFetcherPrefs.class;
}

View File

@ -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;
}
}

View File

@ -57,7 +57,7 @@ public class PortsFetcher extends AbstractFetcher {
}
@Override
public Class<? extends Runnable> getPreferencesClass() {
public Class<? extends FetcherPrefs> getPreferencesClass() {
return PortsFetcherPrefs.class;
}

View File

@ -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();
}
}

View File

@ -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);
}

View 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();
}
}

View File

@ -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);
}

View File

@ -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;
}
}
}