From 69a2219ad629efbb335540e8915935cb6b2f5663 Mon Sep 17 00:00:00 2001 From: angryziber Date: Fri, 9 May 2008 21:28:55 +0000 Subject: [PATCH] * 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 --- resources/Labels.txt | 3 + .../azib/ipscan/fetchers/AbstractFetcher.java | 2 +- src/net/azib/ipscan/fetchers/Fetcher.java | 2 +- .../azib/ipscan/fetchers/FetcherPrefs.java | 20 +++++ .../ipscan/fetchers/FetcherRegistryImpl.java | 8 +- .../ipscan/fetchers/HTTPSenderFetcher.java | 24 ------ src/net/azib/ipscan/fetchers/PingFetcher.java | 2 +- .../azib/ipscan/fetchers/PortTextFetcher.java | 22 +++++ .../azib/ipscan/fetchers/PortsFetcher.java | 2 +- .../gui/fetchers/HTTPSenderFetcherPrefs.java | 47 ---------- .../ipscan/gui/fetchers/PingFetcherPrefs.java | 6 +- .../gui/fetchers/PortTextFetcherPrefs.java | 86 +++++++++++++++++++ .../gui/fetchers/PortsFetcherPrefs.java | 6 +- .../fetchers/FetcherRegistryImplTest.java | 9 +- 14 files changed, 153 insertions(+), 86 deletions(-) create mode 100644 src/net/azib/ipscan/fetchers/FetcherPrefs.java delete mode 100644 src/net/azib/ipscan/gui/fetchers/HTTPSenderFetcherPrefs.java create mode 100644 src/net/azib/ipscan/gui/fetchers/PortTextFetcherPrefs.java diff --git a/resources/Labels.txt b/resources/Labels.txt index aabd893d..aa5ad737 100755 --- a/resources/Labels.txt +++ b/resources/Labels.txt @@ -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 diff --git a/src/net/azib/ipscan/fetchers/AbstractFetcher.java b/src/net/azib/ipscan/fetchers/AbstractFetcher.java index a5ee0894..8e37c1bd 100644 --- a/src/net/azib/ipscan/fetchers/AbstractFetcher.java +++ b/src/net/azib/ipscan/fetchers/AbstractFetcher.java @@ -33,7 +33,7 @@ public abstract class AbstractFetcher implements Fetcher { } } - public Class getPreferencesClass() { + public Class getPreferencesClass() { // no preferences by default return null; } diff --git a/src/net/azib/ipscan/fetchers/Fetcher.java b/src/net/azib/ipscan/fetchers/Fetcher.java index d67a7887..a86f6061 100755 --- a/src/net/azib/ipscan/fetchers/Fetcher.java +++ b/src/net/azib/ipscan/fetchers/Fetcher.java @@ -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 getPreferencesClass(); + public Class getPreferencesClass(); /** * Does the actual fetching. diff --git a/src/net/azib/ipscan/fetchers/FetcherPrefs.java b/src/net/azib/ipscan/fetchers/FetcherPrefs.java new file mode 100644 index 00000000..0b2a80ae --- /dev/null +++ b/src/net/azib/ipscan/fetchers/FetcherPrefs.java @@ -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); +} diff --git a/src/net/azib/ipscan/fetchers/FetcherRegistryImpl.java b/src/net/azib/ipscan/fetchers/FetcherRegistryImpl.java index 13fc559c..c05cdc29 100755 --- a/src/net/azib/ipscan/fetchers/FetcherRegistryImpl.java +++ b/src/net/azib/ipscan/fetchers/FetcherRegistryImpl.java @@ -47,7 +47,7 @@ public class FetcherRegistryImpl implements FetcherRegistry { this.registeredFetchers = new LinkedHashMap(registeredFetchers.length); for (Fetcher fetcher : registeredFetchers) { this.registeredFetchers.put(fetcher.getId(), fetcher); - Class prefsClass = fetcher.getPreferencesClass(); + Class 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 prefsClass = fetcher.getPreferencesClass(); + Class 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); } } diff --git a/src/net/azib/ipscan/fetchers/HTTPSenderFetcher.java b/src/net/azib/ipscan/fetchers/HTTPSenderFetcher.java index 0b467a50..500cf410 100644 --- a/src/net/azib/ipscan/fetchers/HTTPSenderFetcher.java +++ b/src/net/azib/ipscan/fetchers/HTTPSenderFetcher.java @@ -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 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; - } - } diff --git a/src/net/azib/ipscan/fetchers/PingFetcher.java b/src/net/azib/ipscan/fetchers/PingFetcher.java index 1bea5bf8..38294f56 100755 --- a/src/net/azib/ipscan/fetchers/PingFetcher.java +++ b/src/net/azib/ipscan/fetchers/PingFetcher.java @@ -48,7 +48,7 @@ public class PingFetcher extends AbstractFetcher { } @Override - public Class getPreferencesClass() { + public Class getPreferencesClass() { return PingFetcherPrefs.class; } diff --git a/src/net/azib/ipscan/fetchers/PortTextFetcher.java b/src/net/azib/ipscan/fetchers/PortTextFetcher.java index ecf24144..5155a012 100644 --- a/src/net/azib/ipscan/fetchers/PortTextFetcher.java +++ b/src/net/azib/ipscan/fetchers/PortTextFetcher.java @@ -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 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; + } } diff --git a/src/net/azib/ipscan/fetchers/PortsFetcher.java b/src/net/azib/ipscan/fetchers/PortsFetcher.java index 40bc0595..ff8b12f1 100755 --- a/src/net/azib/ipscan/fetchers/PortsFetcher.java +++ b/src/net/azib/ipscan/fetchers/PortsFetcher.java @@ -57,7 +57,7 @@ public class PortsFetcher extends AbstractFetcher { } @Override - public Class getPreferencesClass() { + public Class getPreferencesClass() { return PortsFetcherPrefs.class; } diff --git a/src/net/azib/ipscan/gui/fetchers/HTTPSenderFetcherPrefs.java b/src/net/azib/ipscan/gui/fetchers/HTTPSenderFetcherPrefs.java deleted file mode 100644 index 7fa37018..00000000 --- a/src/net/azib/ipscan/gui/fetchers/HTTPSenderFetcherPrefs.java +++ /dev/null @@ -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(); - } - -} diff --git a/src/net/azib/ipscan/gui/fetchers/PingFetcherPrefs.java b/src/net/azib/ipscan/gui/fetchers/PingFetcherPrefs.java index 8fae8f7d..fd91a359 100644 --- a/src/net/azib/ipscan/gui/fetchers/PingFetcherPrefs.java +++ b/src/net/azib/ipscan/gui/fetchers/PingFetcherPrefs.java @@ -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); } diff --git a/src/net/azib/ipscan/gui/fetchers/PortTextFetcherPrefs.java b/src/net/azib/ipscan/gui/fetchers/PortTextFetcherPrefs.java new file mode 100644 index 00000000..539066fe --- /dev/null +++ b/src/net/azib/ipscan/gui/fetchers/PortTextFetcherPrefs.java @@ -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(); + } +} diff --git a/src/net/azib/ipscan/gui/fetchers/PortsFetcherPrefs.java b/src/net/azib/ipscan/gui/fetchers/PortsFetcherPrefs.java index 76b2adba..0c164e70 100644 --- a/src/net/azib/ipscan/gui/fetchers/PortsFetcherPrefs.java +++ b/src/net/azib/ipscan/gui/fetchers/PortsFetcherPrefs.java @@ -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); } diff --git a/test/net/azib/ipscan/fetchers/FetcherRegistryImplTest.java b/test/net/azib/ipscan/fetchers/FetcherRegistryImplTest.java index 325658f2..eade3694 100755 --- a/test/net/azib/ipscan/fetchers/FetcherRegistryImplTest.java +++ b/test/net/azib/ipscan/fetchers/FetcherRegistryImplTest.java @@ -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 getPreferencesClass() { + public Class 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; } } }