/*
* GrendelScan.java
*/
package com.grendelscan;
import java.io.File;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.ParseException;
import org.apache.commons.configuration.ConfigurationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.grendelscan.commons.ConfigurationManager;
import com.grendelscan.scan.Scan;
import com.grendelscan.ui.MainWindow;
/**
*
* This is the main class for the program.
*
* @author David Byrne
*
*/
public class GrendelScan
{
private static final Logger LOGGER = LoggerFactory.getLogger(GrendelScan.class);
public static final String defaultConfigDirectory = "conf";
public static final String version = "v2.0-alpha";
public static final String versionHttpText = "Grendel-Scan/" + version;
public static final String versionText = "Grendel-Scan " + version;
private static CommandLine commands;
private static ProgramOptions options;
private static void checkHelp()
{
if (commands.hasOption(ProgramOptions.HELP_OPTION))
{
options.printHelp();
System.exit(0);
}
}
private static boolean commandLineOnly()
{
return commands.hasOption(ProgramOptions.BATCH_OPTION);
}
private static String getConfigFile()
{
if (commands.hasOption(ProgramOptions.CONFIG_FILE_OPTION))
{
return commands.getOptionValue(ProgramOptions.CONFIG_FILE_OPTION);
}
return "";
}
private static String getOutputDir()
{
if (commands.hasOption(ProgramOptions.OUTPUT_DIR_OPTION))
{
return commands.getOptionValue(ProgramOptions.OUTPUT_DIR_OPTION);
}
return "";
}
public static void main(final String[] args)
{
Thread.currentThread().setName("Main thread");
ConfigurationManager.initializeConfiguration(defaultConfigDirectory + File.separator + "scanner.conf");
boolean useGUI = true;
String outputDirectory = "";
String configFile = "";
if (args.length > 0)
{
options = new ProgramOptions();
try
{
commands = options.parseArguments(args);
}
catch (ParseException e)
{
options.printHelp();
System.exit(0);
}
checkHelp();
useGUI = !commandLineOnly();
outputDirectory = getOutputDir();
configFile = getConfigFile();
}
if (!configFile.isEmpty())
{
try
{
Scan.getScanSettings().loadScanSettings(configFile);
}
catch (ConfigurationException e)
{
LOGGER.error("Error loading scan settings, defaults will be used: " + e.toString(), e);
}
}
if (useGUI)
{
MainWindow.startBareGUI();
}
if (outputDirectory.isEmpty())
{
if (useGUI)
{
outputDirectory = MainWindow.getInstance().getOutputDir();
}
else
{
LOGGER.error("No output directory provided");
options.printHelp();
System.exit(0);
}
}
Scan.instantiate(useGUI, outputDirectory);
if (useGUI)
{
MainWindow.getInstance().showFullGUI();
}
}
}