package com.mockmock.console;
import com.mockmock.Settings;
import org.apache.commons.cli.*;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashSet;
@Service
public class Parser
{
/**
* Parses the given parameters and returns the possible options
* @param args String[]
*/
public Settings parseOptions(String[] args, Settings settings)
{
// define the possible options
Options options = new Options();
options.addOption("p", true, "The mail port number to use. Default is 25000.");
options.addOption("h", true, "The http port number to use. Default is 8282.");
options.addOption("m", true, "The maximum size of the mail qeueue. Default is 1000.");
options.addOption("c", true, "Comma separated list of channels. Default is #postman.");
options.addOption("ff", true, "Filters out from email addresses (comma separated).");
options.addOption("ft", true, "Filters out to email addresses (comma separated).");
options.addOption("s", true, "Full path to the folder containing the static files like images and css.");
options.addOption("ec", false, "Turns on emails printing to console. Default off");
options.addOption("?", false, "Shows this help information.");
// parse the given arguments
CommandLineParser parser = new PosixParser();
try
{
CommandLine cmd = parser.parse(options, args);
if(cmd.hasOption("?"))
{
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "java -jar MockMock.jar -p 25 -h 8282", options );
System.exit(0);
}
partseShowEmailInConsoleOption(cmd, settings);
parseSmtpPortOption(cmd, settings);
parseHttpPortOption(cmd, settings);
parseMailQueueSizeOption(cmd, settings);
parseFilterFromEmailAddressesOption(cmd, settings);
parseFilterToEmailAddressesOption(cmd, settings);
parseStaticFolderOption(cmd, settings);
}
catch (ParseException e)
{
e.printStackTrace();
}
return settings;
}
protected void partseShowEmailInConsoleOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("ec"))
{
try
{
// settings.setShowEmailInConsole(Boolean.valueOf(cmd.getOptionValue("ec")));
settings.setShowEmailInConsole(true);
}
catch(IllegalArgumentException e)
{
System.err.println("Invalid value given, using default " + settings.getShowEmailInConsole());
}
}
}
protected void parseSmtpPortOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("p"))
{
try
{
settings.setSmtpPort(Integer.valueOf(cmd.getOptionValue("p")));
}
catch (NumberFormatException e)
{
System.err.println("Invalid mail port given, using default " + settings.getSmtpPort());
}
}
}
protected void parseHttpPortOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("h"))
{
try
{
settings.setHttpPort(Integer.valueOf(cmd.getOptionValue("h")));
}
catch (NumberFormatException e)
{
System.err.println("Invalid http port given, using default " + settings.getHttpPort());
}
}
}
protected void parseMailQueueSizeOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("m"))
{
try
{
settings.setMaxMailQueueSize(Integer.valueOf(cmd.getOptionValue("m")));
}
catch (NumberFormatException e)
{
System.err.println("Invalid max mail queue size given, using default " + settings.getMaxMailQueueSize());
}
}
}
protected void parseFilterFromEmailAddressesOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("ff"))
{
String input = cmd.getOptionValue("ff");
String[] emailAddresses = input.split(",");
settings.setFilterFromEmailAddresses(new HashSet<>(Arrays.asList(emailAddresses)));
}
}
protected void parseFilterToEmailAddressesOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("ft"))
{
String input = cmd.getOptionValue("ft");
String[] emailAddresses = input.split(",");
settings.setFilterToEmailAddresses(new HashSet<>(Arrays.asList(emailAddresses)));
}
}
protected void parseStaticFolderOption(CommandLine cmd, Settings settings)
{
if(cmd.hasOption("s"))
{
settings.setStaticFolderPath(cmd.getOptionValue("s"));
}
}
}