package general;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.StringTokenizer;
import utils.Log;
import algorithms.DealingAlgorithm;
import algorithms.DivAlgorithm;
import algorithms.HandGA;
public class Config {
private Properties configFile = new Properties();
private static final Config INSTANCE = new Config();
private static final String FILE_NAME = "config.prop";
private static final String comments = "examples: \nhand=100\nalgorithms.HandGA:150,1000,0.2,0.8";
public static Config getInstance()
{
return INSTANCE;
}
private Config() {
try {
configFile.load(new FileInputStream(FILE_NAME));
} catch (IOException e) {
//e.printStackTrace();
}
}
public String getConfig(String key)
{
return configFile.getProperty(key,"");
}
public int getHands()
{
if (!configFile.containsKey("hands"))
configFile.setProperty("hands", "100");
return Integer.parseInt(configFile.getProperty("hands", "100"));
}
public void setHands(int num)
{
configFile.setProperty("hands", "" + num);
}
public DealingAlgorithm getAlgorithm()
{
if (!configFile.containsKey("algorithm"))
configFile.setProperty("algorithm",HandGA.class.getName()+":150,1000,0.2,0.8");
int hands = this.getHands();
String algoName = configFile.getProperty("algorithm");
try {
String name = "";
String extra = "";
StringTokenizer sT = new StringTokenizer(algoName,":");
name = sT.nextToken();
if (sT.hasMoreTokens())
extra = sT.nextToken();
Log.write("Loading algorithm |" + name + "|");
DealingAlgorithm algo = (DealingAlgorithm)Class.forName(name).getConstructor(int.class).newInstance(hands);
algo.extraConfig(extra);
return algo;
} catch (Exception ex)
{
ex.printStackTrace();
return new DivAlgorithm(hands);
}
}
public int getColsNumber()
{
if (!configFile.containsKey("cols"))
configFile.setProperty("cols", "2");
return Integer.parseInt(configFile.getProperty("cols"));
}
public void save()
{
try{
FileOutputStream fileout = new FileOutputStream(FILE_NAME);
this.configFile.store(fileout, comments);
}
catch (Exception ex)
{
;
}
}
}