mirror of
https://github.com/angryip/ipscan.git
synced 2025-10-26 11:18:17 +00:00
feeder selection from command-line now also works
git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/trunk@448 375186e5-ef17-0410-b0b6-91563547dcda
This commit is contained in:
parent
d0f89c2430
commit
244f45acf1
@ -120,6 +120,7 @@ public class Main {
|
||||
}
|
||||
catch (Exception e) {
|
||||
showMessageToConsole(e.getMessage() + "\n\n" + cli);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,6 +15,7 @@ import net.azib.ipscan.exporters.ExportProcessor;
|
||||
import net.azib.ipscan.exporters.Exporter;
|
||||
import net.azib.ipscan.exporters.ExporterRegistry;
|
||||
import net.azib.ipscan.feeders.FeederCreator;
|
||||
import net.azib.ipscan.feeders.FeederRegistry;
|
||||
|
||||
/**
|
||||
* CommandLineProcessor
|
||||
@ -23,7 +24,7 @@ import net.azib.ipscan.feeders.FeederCreator;
|
||||
*/
|
||||
public class CommandLineProcessor implements StateTransitionListener {
|
||||
|
||||
private final FeederCreator[] feederCreators;
|
||||
private final FeederRegistry<FeederCreator> feederRegistry;
|
||||
private final ExporterRegistry exporters;
|
||||
private StateMachine stateMachine;
|
||||
private ScanningResultList scanningResults;
|
||||
@ -34,15 +35,15 @@ public class CommandLineProcessor implements StateTransitionListener {
|
||||
String outputFilename;
|
||||
|
||||
boolean autoStart;
|
||||
boolean autoExit;
|
||||
boolean autoQuit;
|
||||
boolean appendToFile;
|
||||
|
||||
CommandLineProcessor(FeederCreator[] feederCreators, ExporterRegistry exporters) {
|
||||
this.feederCreators = feederCreators;
|
||||
CommandLineProcessor(FeederRegistry<FeederCreator> feederCreators, ExporterRegistry exporters) {
|
||||
this.feederRegistry = feederCreators;
|
||||
this.exporters = exporters;
|
||||
}
|
||||
|
||||
public CommandLineProcessor(FeederCreator[] feederCreators, ExporterRegistry exporters, StateMachine stateMachine, ScanningResultList scanningResults) {
|
||||
public CommandLineProcessor(FeederRegistry<FeederCreator> feederCreators, ExporterRegistry exporters, StateMachine stateMachine, ScanningResultList scanningResults) {
|
||||
this(feederCreators, exporters);
|
||||
this.stateMachine = stateMachine;
|
||||
this.scanningResults = scanningResults;
|
||||
@ -81,7 +82,7 @@ public class CommandLineProcessor implements StateTransitionListener {
|
||||
for (char option : arg.substring(1).toCharArray()) {
|
||||
switch (option) {
|
||||
case 's': autoStart = true; break;
|
||||
case 'e': autoExit = true; break;
|
||||
case 'q': autoQuit = true; break;
|
||||
case 'a': appendToFile = true; break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown option: " + option);
|
||||
@ -103,7 +104,7 @@ public class CommandLineProcessor implements StateTransitionListener {
|
||||
usage.append("Pass the following arguments:\n");
|
||||
usage.append("[options] <feeder> <exporter>\n\n");
|
||||
usage.append("Where <feeder> is one of:\n");
|
||||
for (FeederCreator creator : feederCreators) {
|
||||
for (FeederCreator creator : feederRegistry) {
|
||||
usage.append("-f:").append(shortId(creator.getFeederId()));
|
||||
for (String partLabel : creator.serializePartsLabels()) {
|
||||
usage.append(" <").append(Labels.getLabel(partLabel)).append(">");
|
||||
@ -116,7 +117,7 @@ public class CommandLineProcessor implements StateTransitionListener {
|
||||
}
|
||||
usage.append("\nAnd possible [options] are (grouping allowed):\n");
|
||||
usage.append("-s\tstart scanning automatically\n");
|
||||
usage.append("-e\texit after saving\n");
|
||||
usage.append("-q\tquit after exporting the results\n");
|
||||
//usage.append("-a\tappend to the file, do not overwrite\n");
|
||||
return usage.toString();
|
||||
}
|
||||
@ -126,9 +127,10 @@ public class CommandLineProcessor implements StateTransitionListener {
|
||||
}
|
||||
|
||||
private FeederCreator findFeederCreator(String feederId) {
|
||||
for (FeederCreator creator : feederCreators) {
|
||||
if (feederId.equals(creator.getFeederId()))
|
||||
for (FeederCreator creator : feederRegistry) {
|
||||
if (feederId.equals(creator.getFeederId())) {
|
||||
return creator;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Feeder unknown: " + shortId(feederId));
|
||||
}
|
||||
@ -138,16 +140,21 @@ public class CommandLineProcessor implements StateTransitionListener {
|
||||
}
|
||||
|
||||
public void transitionTo(ScanningState state, Transition transition) {
|
||||
if (transition == Transition.INIT && autoStart) {
|
||||
if (transition == Transition.INIT) {
|
||||
// select the correct feeder
|
||||
if (feederCreator != null)
|
||||
feederRegistry.select(feederCreator.getFeederId());
|
||||
|
||||
// start scanning automatically
|
||||
stateMachine.transitionToNext();
|
||||
if (autoStart)
|
||||
stateMachine.transitionToNext();
|
||||
}
|
||||
else
|
||||
if (transition == Transition.COMPLETE && state == ScanningState.IDLE && exporter != null) {
|
||||
// TODO: introduce SAVING state in order to show nice notification in the status bar
|
||||
ExportProcessor processor = new ExportProcessor(exporter, outputFilename);
|
||||
processor.process(scanningResults, null);
|
||||
if (autoExit) {
|
||||
if (autoQuit) {
|
||||
System.err.println("Saved results to " + outputFilename);
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
@ -21,7 +21,7 @@ public class FavoritesConfig extends NamedListConfig {
|
||||
}
|
||||
|
||||
public void add(String key, FeederCreator feederCreator) {
|
||||
StringBuilder serializedFeeder = new StringBuilder(feederCreator.getFeederName());
|
||||
StringBuilder serializedFeeder = new StringBuilder(feederCreator.getFeederId());
|
||||
serializedFeeder.append('\t');
|
||||
for (String part : feederCreator.serialize()) {
|
||||
serializedFeeder.append(part).append(":::");
|
||||
@ -29,7 +29,7 @@ public class FavoritesConfig extends NamedListConfig {
|
||||
super.add(key, serializedFeeder.toString());
|
||||
}
|
||||
|
||||
public String getFeederName(String key) {
|
||||
public String getFeederId(String key) {
|
||||
String value = get(key);
|
||||
int indexOf = value.indexOf('\t');
|
||||
return value.substring(0, indexOf);
|
||||
|
||||
@ -12,5 +12,5 @@ package net.azib.ipscan.feeders;
|
||||
* @author Anton Keks
|
||||
*/
|
||||
public interface FeederRegistry<T extends FeederCreator> extends Iterable<T> {
|
||||
|
||||
public void select(String feederId);
|
||||
}
|
||||
|
||||
@ -17,7 +17,6 @@ import net.azib.ipscan.gui.MainMenu.CommandsMenu;
|
||||
import net.azib.ipscan.gui.actions.BrowserLauncher;
|
||||
import net.azib.ipscan.gui.actions.StartStopScanningAction;
|
||||
import net.azib.ipscan.gui.actions.ToolsActions;
|
||||
import net.azib.ipscan.gui.feeders.AbstractFeederGUI;
|
||||
import net.azib.ipscan.gui.feeders.FeederGUIRegistry;
|
||||
import net.azib.ipscan.gui.util.LayoutHelper;
|
||||
|
||||
@ -194,9 +193,6 @@ public class MainWindow {
|
||||
|
||||
// feeder selection combobox
|
||||
this.feederSelectionCombo = feederSelectionCombo;
|
||||
for (AbstractFeederGUI feederGUI : feederRegistry) {
|
||||
feederSelectionCombo.add(feederGUI.getFeederName());
|
||||
}
|
||||
feederSelectionCombo.pack();
|
||||
IPFeederSelectionListener feederSelectionListener = new IPFeederSelectionListener();
|
||||
feederSelectionCombo.addSelectionListener(feederSelectionListener);
|
||||
|
||||
@ -71,7 +71,7 @@ public class FavoritesMenuActions {
|
||||
MenuItem menuItem = (MenuItem) event.widget;
|
||||
String key = menuItem.getText();
|
||||
|
||||
feederRegistry.select(favoritesConfig.getFeederName(key));
|
||||
feederRegistry.select(favoritesConfig.getFeederId(key));
|
||||
feederRegistry.current().unserialize(favoritesConfig.getSerializedParts(key));
|
||||
event.display.getActiveShell().setText(key + " - " + Version.NAME);
|
||||
|
||||
|
||||
@ -36,6 +36,9 @@ public class FeederGUIRegistry implements FeederRegistry<AbstractFeederGUI> {
|
||||
public FeederGUIRegistry(AbstractFeederGUI[] allTheFeeders, Combo feederSelectionCombo, GUIConfig guiConfig) {
|
||||
this.feederGUIList = Arrays.asList(allTheFeeders);
|
||||
this.feederSelectionCombo = feederSelectionCombo;
|
||||
for (AbstractFeederGUI feederGUI : feederGUIList) {
|
||||
feederSelectionCombo.add(feederGUI.getFeederName());
|
||||
}
|
||||
this.guiConfig = guiConfig;
|
||||
this.currentFeederGUI = allTheFeeders[0];
|
||||
}
|
||||
@ -66,10 +69,10 @@ public class FeederGUIRegistry implements FeederRegistry<AbstractFeederGUI> {
|
||||
/**
|
||||
* Select the Feeder GUI by its name, while updating the GUI
|
||||
*/
|
||||
public void select(String feederName) {
|
||||
String[] items = feederSelectionCombo.getItems();
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
if (items[i].equals(feederName)) {
|
||||
public void select(String feederId) {
|
||||
for (int i = 0; i < feederGUIList.size(); i++) {
|
||||
AbstractFeederGUI guiFeeder = feederGUIList.get(i);
|
||||
if (guiFeeder.getFeederId().equals(feederId) || guiFeeder.getFeederName().equals(feederId)) {
|
||||
// select the feeder if found
|
||||
feederSelectionCombo.select(i);
|
||||
feederSelectionCombo.notifyListeners(SWT.Selection, null);
|
||||
@ -77,7 +80,7 @@ public class FeederGUIRegistry implements FeederRegistry<AbstractFeederGUI> {
|
||||
}
|
||||
}
|
||||
// if not found
|
||||
throw new FeederException("Feeder not found: " + feederName);
|
||||
throw new FeederException("Feeder not found: " + feederId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -9,14 +9,17 @@ package net.azib.ipscan.config;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.easymock.classextension.EasyMock.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import net.azib.ipscan.exporters.Exporter;
|
||||
import net.azib.ipscan.exporters.ExporterRegistry;
|
||||
import net.azib.ipscan.feeders.FeederCreator;
|
||||
import net.azib.ipscan.feeders.FeederRegistry;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
@ -34,7 +37,7 @@ public class CommandLineProcessorTest {
|
||||
public void prepare() {
|
||||
feederCreator = createMock(FeederCreator.class);
|
||||
exporters = createMock(ExporterRegistry.class);
|
||||
processor = new CommandLineProcessor(new FeederCreator[] {feederCreator}, exporters);
|
||||
processor = new CommandLineProcessor(new MockFeederRegistry(feederCreator), exporters);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -51,8 +54,8 @@ public class CommandLineProcessorTest {
|
||||
assertTrue(usage.contains("-f:range"));
|
||||
assertTrue(usage.contains(Labels.getLabel("feeder.range.to")));
|
||||
assertTrue(usage.contains(".pdf"));
|
||||
assertTrue(usage.contains("-e"));
|
||||
assertTrue(usage.contains("-a"));
|
||||
assertTrue(usage.contains("-q"));
|
||||
// assertTrue(usage.contains("-a"));
|
||||
assertTrue(usage.contains("-s"));
|
||||
|
||||
verify(feederCreator, exporters, exporter);
|
||||
@ -73,9 +76,9 @@ public class CommandLineProcessorTest {
|
||||
assertEquals("file.txt", processor.outputFilename);
|
||||
assertEquals(txtExporter, processor.exporter);
|
||||
|
||||
assertFalse(processor.autoExit);
|
||||
assertFalse(processor.autoStart);
|
||||
assertFalse(processor.autoQuit);
|
||||
assertFalse(processor.appendToFile);
|
||||
assertTrue("specifying exporter should enable autoStart", processor.autoStart);
|
||||
|
||||
verify(feederCreator, exporters);
|
||||
}
|
||||
@ -87,10 +90,10 @@ public class CommandLineProcessorTest {
|
||||
feederCreator.unserialize(aryEq(new String[0]));
|
||||
replay(feederCreator);
|
||||
|
||||
processor.parse("-s", "-f:mega", "-ea");
|
||||
processor.parse("-s", "-f:mega", "-aq");
|
||||
|
||||
assertEquals(feederCreator, processor.feederCreator);
|
||||
assertTrue(processor.autoExit);
|
||||
assertTrue(processor.autoQuit);
|
||||
assertTrue(processor.autoStart);
|
||||
assertTrue(processor.appendToFile);
|
||||
|
||||
@ -121,4 +124,22 @@ public class CommandLineProcessorTest {
|
||||
public void extraFeeder() throws Exception {
|
||||
processor.parse("-f:feeder", "-o", "exporter.xml", "-f:feeder");
|
||||
}
|
||||
|
||||
public static class MockFeederRegistry implements FeederRegistry<FeederCreator> {
|
||||
|
||||
private List<FeederCreator> list;
|
||||
|
||||
public MockFeederRegistry(FeederCreator ... creators) {
|
||||
list = Arrays.asList(creators);
|
||||
}
|
||||
|
||||
public void select(String feederId) {
|
||||
}
|
||||
|
||||
public Iterator<FeederCreator> iterator() {
|
||||
return list.iterator();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user