package carpool.locationService;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import carpool.common.DebugLog;
import carpool.exception.location.LocationException;
import carpool.exception.validation.ValidationException;
/**
* loader that would load the location data from location file into memory when server starts
*
*/
public class CarpoolLocationLoader {
private static final int value_item_amount = 9;
private static ArrayList<HashMap<String, String>> locationBufferList = new ArrayList<HashMap<String, String>>();
private static int lineTracker = 0;
private static ArrayList<String> sanitize(String str)throws ValidationException{
ArrayList<String> sanitizedStrArray = new ArrayList<String>();
str = str.trim();
if (str.length() == 0 || str.charAt(0) == '#'){
//empty or comment line, ignore
return null;
}
str = str.substring(1, str.length()-1);
String[] strArr = str.split("\\]\\-\\[");
if (strArr.length != value_item_amount){
throw new ValidationException("Invalid location entry at line: " + lineTracker);
}
for (int i = 0; i < value_item_amount; i++){
sanitizedStrArray.add(strArr[i]);
}
return sanitizedStrArray;
}
private static void microParser(String line)throws ValidationException, LocationException{
ArrayList<String> sanitizedStrArray = sanitize(line);
if (sanitizedStrArray != null){
HashMap<String, String> locationBufferMap = new HashMap<String, String>();
locationBufferMap.put("province", sanitizedStrArray.get(0));
locationBufferMap.put("city", sanitizedStrArray.get(1));
locationBufferMap.put("region", sanitizedStrArray.get(2));
locationBufferMap.put("name", sanitizedStrArray.get(3));
locationBufferMap.put("address", sanitizedStrArray.get(4));
locationBufferMap.put("lat", sanitizedStrArray.get(5));
locationBufferMap.put("lng", sanitizedStrArray.get(6));
locationBufferMap.put("radius", sanitizedStrArray.get(7));
locationBufferMap.put("synonyms", sanitizedStrArray.get(8));
locationBufferList.add(locationBufferMap);
}
}
public static ArrayList<HashMap<String, String>> loadLocationFromFile(String pathToFile) throws LocationException, ValidationException{
DebugLog.d("Starting to load location data from file: " + pathToFile);
BufferedReader br = null;
locationBufferList.clear();
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(pathToFile));
while ((sCurrentLine = br.readLine()) != null) {
microParser(sCurrentLine);
lineTracker++;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
DebugLog.d("Location loaded succesfully");
return locationBufferList;
}
}