LeaderboardFileHandler.java
package com.vikingz.campustycoon.Util;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.io.File;
import java.util.Scanner;
import java.util.stream.Collectors;
import com.vikingz.campustycoon.Util.Types.Tuple;
public class LeaderboardFileHandler{
public static String FILE_NAME = "leaderboard.txt";
public static HashMap<String, List<Integer>> getLeaderboard(String filename){
HashMap<String, List<Integer>> leaderboard = new HashMap<String, List<Integer>>();
try(Scanner reader = new Scanner(new File(filename))){
while(reader.hasNextLine()){
String[] line = reader.nextLine().split(",");
ArrayList<Integer> values = stringListToIntList(Arrays.asList(line).subList(1, line.length));
leaderboard.put(line[0], values);
}
reader.close();
}
catch (FileNotFoundException e){
System.out.println("'" + filename + "' did not exist!");
createNewFile(filename);
}
return leaderboard;
}
public static HashMap<String, List<Integer>> getLeaderboard(){
return getLeaderboard(FILE_NAME);
}
private static ArrayList<Integer> stringListToIntList(List<String> list){
ArrayList<Integer> intList = new ArrayList<>();
for(String x : list){
intList.add(Integer.parseInt(x));
}
return intList;
}
public static boolean addLeaderboardEntry(String filename, String key, Integer value){
HashMap<String, List<Integer>> leaderboard = getLeaderboard(filename);
if(leaderboard.keySet().contains(key)){
List<Integer> values = leaderboard.get(key);
values.add(value);
leaderboard.put(key, values);
}
else{
List<Integer> newValue = new ArrayList<>();
newValue.add(value);
leaderboard.put(key, newValue);
}
try {
FileWriter myWriter = new FileWriter(filename);
for(String x : leaderboard.keySet()){
List<Integer> values = leaderboard.get(x);
List<String> strList = values.stream().map(String::valueOf).collect(Collectors.toList());
String valuesStr = String.join(",", strList);
myWriter.write(x + "," + valuesStr + "\n");
}
myWriter.close();
}
catch(IOException e){
System.out.println("Could not add new entry '" + key + "': '" + value + "' to file!");
}
return false;
}
public static boolean addLeaderboardEntry(String key, Integer value){
return addLeaderboardEntry(FILE_NAME, key, value);
}
public static ArrayList<Tuple<String, Integer>> getLeaderboardTopFive(String filename){
HashMap<String, List<Integer>> leaderboard = getLeaderboard(filename);
ArrayList<Tuple<String, Integer>> best = new ArrayList<>();
ArrayList<String> keys = new ArrayList<>();
ArrayList<Integer> values = new ArrayList<>();
for(String key : leaderboard.keySet()){
List<Integer> keyValues = leaderboard.get(key);
for(Integer x : keyValues){
keys.add(key);
values.add(x);
}
}
for(int i = 0; i < 5; i++){
try{
int index = getMax(values);
best.add(new Tuple<String,Integer>(keys.get(index), values.get(index)));
System.out.println(keys.get(index) + "::" + values.get(index));
keys.remove(index);
values.remove(index);
}
catch(Exception e){
break;
}
}
return best;
}
public static ArrayList<Tuple<String, Integer>> getLeaderboardTopFive(){
return getLeaderboardTopFive(FILE_NAME);
}
private static int getMax(ArrayList<Integer> values){
int index = -1;
int maxVal = -1;
for (int i = 0; i < values.size(); i++){
if(values.get(i) > maxVal){
maxVal = values.get(i);
index = i;
}
}
return index;
}
public static boolean createNewFile(String filename){
try{
File newFile = new File(filename);
if(newFile.createNewFile()){
System.out.println("Created new file: '" + filename + "'");
return true;
}
}
catch(IOException e){
System.out.println("An error occured, could not create file");
}
return false;
}
public static boolean createNewFile(){
return createNewFile(FILE_NAME);
}
public static boolean removeFile(String filename){
File file = new File(filename);
Boolean result = file.delete();
if(result){
System.out.println("Removed: " + filename);
}
else{
System.out.println("Could not remove " + filename);
}
return result;
}
}