package conf;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import log.Logger;
import run.main.App;
import utils.NameFactory;
import utils.StringUtils;
import au.com.bytecode.opencsv.CSVReader;
public class ConfReader
{
private static volatile ConfReader confReader = new ConfReader();
private static boolean firstRead = true;
private List<ConfItem> confItems = null;
private ConfReader()
{
}
public static ConfReader getInstance()
{
return confReader;
}
public List<ConfItem> getConfItems()
{
if (confItems == null)
{
try
{
read();
}
catch (Exception e)
{
App.kill(e);
}
}
return confItems;
}
// ad title, location, description, price, link photo 1, link photo 2, link photo 3, refresh
private void read() throws IOException
{
if (firstRead)
{
CSVReader reader = new CSVReader(new FileReader(NameFactory.CONF_PATH_FILE));
List<String[]> items = reader.readAll();
confItems = new ArrayList<>();
for (String[] item : items)
{
ConfItem confItem = createConfItem(item);
Logger.traceINFO(confItem.toString());
confItems.add(confItem);
}
reader.close();
firstRead = false;
}
}
private ConfItem createConfItem(String[] item)
{
assert item.length == 9;
ConfItem confItem = new ConfItem();
confItem.adtitle = item[0];
String locationStr = item[1];
LocationConf locationConf = null;
switch (locationStr.trim())
{
case "gradignan":
locationConf = new GradignanLocationConf();
break;
case "paris":
locationConf = new ParisLocationConf();
break;
default:
throw new RuntimeException("Invalid location : " + locationStr);
}
confItem.location = locationConf;
confItem.description = item[2];
confItem.limitPrice = Integer.parseInt(item[3].trim());
confItem.linkPhoto1 = item[4];
confItem.linkPhoto2 = item[5];
confItem.linkPhoto3 = item[6];
confItem.daysCountBeforeRefresh = Integer.parseInt(item[7].trim());
return confItem;
}
public static ConfItem getConfItemFromHash(ConfReader confReader, String md5hash)
{
for (ConfItem confItem : confReader.getConfItems())
{
if (StringUtils.md5(confItem.adtitle).equals(md5hash))
{
return confItem;
}
}
return null;
}
}