diff --git a/src/net/azib/ipscan/Main.java b/src/net/azib/ipscan/Main.java index c8d57a89..09877e59 100755 --- a/src/net/azib/ipscan/Main.java +++ b/src/net/azib/ipscan/Main.java @@ -120,6 +120,7 @@ public class Main { } catch (Exception e) { showMessageToConsole(e.getMessage() + "\n\n" + cli); + System.exit(1); } } } diff --git a/src/net/azib/ipscan/config/CommandLineProcessor.java b/src/net/azib/ipscan/config/CommandLineProcessor.java index 66ee840b..caebc851 100644 --- a/src/net/azib/ipscan/config/CommandLineProcessor.java +++ b/src/net/azib/ipscan/config/CommandLineProcessor.java @@ -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 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 feederCreators, ExporterRegistry exporters) { + this.feederRegistry = feederCreators; this.exporters = exporters; } - public CommandLineProcessor(FeederCreator[] feederCreators, ExporterRegistry exporters, StateMachine stateMachine, ScanningResultList scanningResults) { + public CommandLineProcessor(FeederRegistry 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] \n\n"); usage.append("Where 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); } diff --git a/src/net/azib/ipscan/config/FavoritesConfig.java b/src/net/azib/ipscan/config/FavoritesConfig.java index f15af5e4..858e256b 100755 --- a/src/net/azib/ipscan/config/FavoritesConfig.java +++ b/src/net/azib/ipscan/config/FavoritesConfig.java @@ -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); diff --git a/src/net/azib/ipscan/feeders/FeederRegistry.java b/src/net/azib/ipscan/feeders/FeederRegistry.java index d5fa0cfa..cc53165e 100644 --- a/src/net/azib/ipscan/feeders/FeederRegistry.java +++ b/src/net/azib/ipscan/feeders/FeederRegistry.java @@ -12,5 +12,5 @@ package net.azib.ipscan.feeders; * @author Anton Keks */ public interface FeederRegistry extends Iterable { - + public void select(String feederId); } diff --git a/src/net/azib/ipscan/gui/MainWindow.java b/src/net/azib/ipscan/gui/MainWindow.java index 27381416..8e9b98c3 100755 --- a/src/net/azib/ipscan/gui/MainWindow.java +++ b/src/net/azib/ipscan/gui/MainWindow.java @@ -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); diff --git a/src/net/azib/ipscan/gui/actions/FavoritesMenuActions.java b/src/net/azib/ipscan/gui/actions/FavoritesMenuActions.java index 03ac5471..5fec7583 100755 --- a/src/net/azib/ipscan/gui/actions/FavoritesMenuActions.java +++ b/src/net/azib/ipscan/gui/actions/FavoritesMenuActions.java @@ -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); diff --git a/src/net/azib/ipscan/gui/feeders/FeederGUIRegistry.java b/src/net/azib/ipscan/gui/feeders/FeederGUIRegistry.java index 818b345b..afc714a0 100755 --- a/src/net/azib/ipscan/gui/feeders/FeederGUIRegistry.java +++ b/src/net/azib/ipscan/gui/feeders/FeederGUIRegistry.java @@ -36,6 +36,9 @@ public class FeederGUIRegistry implements FeederRegistry { 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 { /** * 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 { } } // if not found - throw new FeederException("Feeder not found: " + feederName); + throw new FeederException("Feeder not found: " + feederId); } /** diff --git a/test/net/azib/ipscan/config/CommandLineProcessorTest.java b/test/net/azib/ipscan/config/CommandLineProcessorTest.java index ff446a07..62405367 100644 --- a/test/net/azib/ipscan/config/CommandLineProcessorTest.java +++ b/test/net/azib/ipscan/config/CommandLineProcessorTest.java @@ -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 { + + private List list; + + public MockFeederRegistry(FeederCreator ... creators) { + list = Arrays.asList(creators); + } + + public void select(String feederId) { + } + + public Iterator iterator() { + return list.iterator(); + } + + } + }