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:
angryziber 2009-03-21 00:35:28 +00:00
parent d0f89c2430
commit 244f45acf1
8 changed files with 62 additions and 34 deletions

View File

@ -120,6 +120,7 @@ public class Main {
}
catch (Exception e) {
showMessageToConsole(e.getMessage() + "\n\n" + cli);
System.exit(1);
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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