package za.co.entelect.challenge.program;
import za.co.entelect.challenge.bot.BasicBot;
import za.co.entelect.challenge.dto.Settings;
import za.co.entelect.challenge.utils.LogHelper;
import za.co.entelect.challenge.utils.StringUtility;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
if (args.length != 1) {
printUsage();
}
Settings settings = loadSettings();
getDefaultFolderNameFromArguments(args, settings);
BasicBot bot = new BasicBot(settings);
bot.execute();
long runTime = System.currentTimeMillis() - startTime;
printRunTime(bot, runTime);
}
private static void printUsage() {
LogHelper.log("Java QuickStartBot usage: java -jar target/BasicBot-1.0-SNAPSHOT-jar-with-dependencies.jar <defaultOutputFolderName>");
LogHelper.logEmptyLine();
LogHelper.log("\tdefaultOutputFolderName\tThe folder into which the bot should write its move.");
}
private static Settings loadSettings() {
Settings settings = new Settings();
Properties prop = new Properties();
String propFileName = "settings.properties";
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream(propFileName);
try {
if (stream != null) {
prop.load(stream);
settings.setDefaultOutputFolder(prop.getProperty("DefaultOutputFolder"));
settings.setOutputFile(prop.getProperty("OutputFile"));
settings.setStateFile(prop.getProperty("StateFile"));
settings.setMapFile(prop.getProperty("MapFile"));
} else {
LogHelper.log(propFileName + " not found in the classpath");
}
} catch (FileNotFoundException fnfe) {
LogHelper.log(propFileName + " not found in the classpath");
} catch (IOException ioe) {
LogHelper.log("Error reading " + propFileName);
}
return settings;
}
private static void getDefaultFolderNameFromArguments(String[] args, Settings settings)
{
if (StringUtility.isValidString(args[0])) {
settings.setDefaultOutputFolder(args[0]);
} else {
LogHelper.log("Invalid output folder. Defaulting to: " + settings.getDefaultOutputFolder());
}
}
private static void printRunTime(BasicBot bot, long runTime) {
LogHelper.log(LogHelper.PREFIX + getPlayerName(bot) + " finished in " + runTime + " ms.");
}
/**
* You can always assume that you are player 1
*
* @param bot
* @return playerName
*/
private static String getPlayerName(BasicBot bot) {
return bot.getPlayers().get(0).getPlayerName();
}
}