@@ -1,106 +1,106 @@
package com.entities;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import com.handlers.DatabaseHandler;
import com.utils.Formatter;
import com.utils.Logger;

public class LogLine {

private final static DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm");

private LocalDateTime logTime;
private String characterName;
private String itemType;
private long quantity;
private String itemGroup;

public LogLine(String logTime, String characterName, String itemType, long quantity, String itemGroup) {
this(LocalDateTime.parse(logTime, format), characterName, itemType, quantity, itemGroup);
}

public LogLine(LocalDateTime logTime, String characterName, String itemType, long quantity, String itemGroup) {
this.logTime = logTime;
this.characterName = characterName;
this.itemType = itemType;
this.quantity = quantity;
this.itemGroup = itemGroup;
}

public LocalDateTime getLogTime() {
return logTime;
}

public void setLogTime(LocalDateTime logTime) {
this.logTime = logTime;
}

public String getCharacterName() {
return characterName;
}

public void setCharacterName(String characterName) {
this.characterName = characterName;
}

public String getItemType() {
return itemType;
}

public void setItemType(String itemType) {
this.itemType = itemType;
}

public long getQuantity() {
return quantity;
}

public void setQuantity(long quantity) {
this.quantity = quantity;
}

public String getItemGroup() {
return itemGroup;
}

public void setItemGroup(String itemGroup) {
this.itemGroup = itemGroup;
}

public double getItemPriceEach() {
String name = itemType.replaceAll(" ", "_");
name = Formatter.turnLogLineStringIntoDatabaseString(name);

Double result = DatabaseHandler.getHarvestables().get(name);

if (result == null) {
result = DatabaseHandler.getLootables().get(name);
}


if (result != null && result == 0.0) {
Logger.addErr(this, "[" + name + "] does not have an estimated market value");
}

if (result == null) {
Logger.addErr(this, "[" + name + "] does not exist in your database");
result = 0.0;
}

return result;
}

public double getTotalPrice() {
return getItemPriceEach() * quantity;
}

public String getTotalPriceFormatted() {
return Formatter.convertToReadable(getTotalPrice()) + " ISK";
}

public String toString() {
return String.format("%s#%s#%s#%s ISK#%d#%s", logTime.format(format), characterName, itemType, Formatter.convertToReadable(getItemPriceEach()), quantity, itemGroup);
}
package com.entities;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import com.handlers.DatabaseHandler;
import com.utils.Formatter;
import com.utils.Logger;

public class LogLine {

private final static DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm");

private LocalDateTime logTime;
private String characterName;
private String itemType;
private long quantity;
private String itemGroup;

public LogLine(String logTime, String characterName, String itemType, long quantity, String itemGroup) {
this(LocalDateTime.parse(logTime, format), characterName, itemType, quantity, itemGroup);
}

public LogLine(LocalDateTime logTime, String characterName, String itemType, long quantity, String itemGroup) {
this.logTime = logTime;
this.characterName = characterName;
this.itemType = itemType;
this.quantity = quantity;
this.itemGroup = itemGroup;
}

public LocalDateTime getLogTime() {
return logTime;
}

public void setLogTime(LocalDateTime logTime) {
this.logTime = logTime;
}

public String getCharacterName() {
return characterName;
}

public void setCharacterName(String characterName) {
this.characterName = characterName;
}

public String getItemType() {
return itemType;
}

public void setItemType(String itemType) {
this.itemType = itemType;
}

public long getQuantity() {
return quantity;
}

public void setQuantity(long quantity) {
this.quantity = quantity;
}

public String getItemGroup() {
return itemGroup;
}

public void setItemGroup(String itemGroup) {
this.itemGroup = itemGroup;
}

public double getItemPriceEach() {
String name = itemType.replaceAll(" ", "_");
name = Formatter.turnLogLineStringIntoDatabaseString(name);

Double result = DatabaseHandler.getHarvestables().get(name);

if (result == null) {
result = DatabaseHandler.getLootables().get(name);
}


if (result != null && result == 0.0) {
Logger.addErr(this, "[" + name + "] does not have an estimated market value");
}

if (result == null) {
Logger.addErr(this, "[" + name + "] does not exist in your database");
result = 0.0;
}

return result;
}

public double getTotalPrice() {
return getItemPriceEach() * quantity;
}

public String getTotalPriceFormatted() {
return Formatter.convertToReadable(getTotalPrice()) + " ISK";
}

public String toString() {
return String.format("%s#%s#%s#%s ISK#%d#%s", logTime.format(format), characterName, itemType, Formatter.convertToReadable(getItemPriceEach()), quantity, itemGroup);
}
}
@@ -1,48 +1,48 @@
package com.entities;

import com.utils.Formatter;

public class Player {

private String characterName;
private double totalPayment;
private double percentage;

public Player(String characterName, double totalPayment, double percentage) {
this.characterName = characterName;
this.totalPayment = totalPayment;
this.setPercentage(percentage);
}

public String getCharacterName() {
return characterName;
}

public void setCharacterName(String characterName) {
this.characterName = characterName;
}

public double getTotalPayment() {
return totalPayment;
}

public String getTotalPaymentFormatted() {
return Formatter.convertToReadable(getTotalPayment()) + " ISK";
}

public void setTotalPayment(double totalPayment) {
this.totalPayment = totalPayment;
}

public String toString() {
return characterName + "-" + getTotalPaymentFormatted() + "-" + Formatter.formatPercentage(percentage);
}

public double getPercentage() {
return percentage;
}

public void setPercentage(double percentage) {
this.percentage = percentage;
}
package com.entities;

import com.utils.Formatter;

public class Player {

private String characterName;
private double totalPayment;
private double percentage;

public Player(String characterName, double totalPayment, double percentage) {
this.characterName = characterName;
this.totalPayment = totalPayment;
this.setPercentage(percentage);
}

public String getCharacterName() {
return characterName;
}

public void setCharacterName(String characterName) {
this.characterName = characterName;
}

public double getTotalPayment() {
return totalPayment;
}

public String getTotalPaymentFormatted() {
return Formatter.convertToReadable(getTotalPayment()) + " ISK";
}

public void setTotalPayment(double totalPayment) {
this.totalPayment = totalPayment;
}

public String toString() {
return characterName + "-" + getTotalPaymentFormatted() + "-" + Formatter.formatPercentage(percentage);
}

public double getPercentage() {
return percentage;
}

public void setPercentage(double percentage) {
this.percentage = percentage;
}
}
@@ -1,114 +1,114 @@
package com.handlers;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import com.Settings;
import com.entities.DataSet;
import com.io.EveLogReader;
import com.io.FileReader;
import com.utils.Logger;

public class ContainerHandler {

private static Map<String, DataSet> dataSets = new TreeMap<>();

public static void init() {
DataSet dataSet;
String fileName;
String[] pathParts;

List<String> unpaid = FileReader.getAllUnfinishedMiningFleetPayments();
for (String line : unpaid) {
dataSet = new DataSet();
dataSet.setPaid(false);
dataSet.setLootList(EveLogReader.convertLogToList(FileReader.getFileContent(line)));
dataSet.generatePlayerStats();
pathParts = line.replaceAll("/", "\\\\").split("\\\\");
fileName = pathParts[pathParts.length - 1].replaceAll(".txt", "");
dataSet.setFileName(fileName);
dataSet.setFilePath(line);
dataSets.put(fileName, dataSet);
Logger.log(ContainerHandler.class, fileName + " with " + dataSet + " has been added to the container");
}

List<String> paid = FileReader.getAllFinishedMiningFleetPayments();
for (String line : paid) {
dataSet = new DataSet();
dataSet.setPaid(true);
dataSet.setLootList(EveLogReader.convertLogToList(FileReader.getFileContent(line)));
dataSet.generatePlayerStats();
pathParts = line.replaceAll("/", "\\\\").split("\\\\");
fileName = pathParts[pathParts.length - 1].replaceAll(".txt", "");
dataSet.setFileName(fileName);
dataSet.setFilePath(line);
dataSets.put(fileName, dataSet);
Logger.log(ContainerHandler.class, fileName + " with " + dataSet + " has been added to the container");
}

createMassiveDataSet();
}

private static void createMassiveDataSet() {
DataSet dataSet = new DataSet(ListHandler.compressMassiveLogList(
EveLogReader.convertFileLocationslistToLogList(FileReader.getAllEVELogFiles())));
dataSet.setFileName("");
dataSet.setPaid(true);
dataSets.put("Overall", dataSet);
}

public static void updateMassiveDataSet() {
DataSet dataSet = new DataSet(ListHandler.compressMassiveLogList(
EveLogReader.convertFileLocationslistToLogList(FileReader.getAllEVELogFiles())));

dataSet.setFileName("");
dataSet.setPaid(true);

if (dataSet.getLootList().size() == get("Overall").getLootList().size())
return;

Settings.trigger_overall_view = true;

modify("Overall", dataSet);
}

public static void remove(Object fileName) {
dataSets.remove(fileName);
Logger.log(ContainerHandler.class, fileName + " has been removed from the container");
}

public static void put(String fileName, DataSet dataSet) {
dataSets.put(fileName, dataSet);
Logger.log(ContainerHandler.class, fileName + " with " + dataSet + " has been added to the container");
}

public static DataSet get(Object fileName) {
Logger.log(ContainerHandler.class, fileName + " has been requested.");
return dataSets.get(fileName);
}

public static void modify(String key, DataSet dataset) {
dataSets.replace(key, dataset);
Logger.log(ContainerHandler.class, key + " was modified, new object[]=" + dataset);
}

public static List<DataSet> getUnpaidDataSets() {
List<DataSet> data = new ArrayList<>();
for (DataSet el : dataSets.values()) {
if (!el.isPaid() && !el.getFileName().equalsIgnoreCase(""))
data.add(el);
}
return data;
}

public static List<DataSet> getPaidDataSets() {
List<DataSet> data = new ArrayList<>();
for (DataSet el : dataSets.values()) {
if (el.isPaid() && !el.getFileName().equalsIgnoreCase(""))
data.add(el);
}
return data;
}
package com.handlers;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import com.Settings;
import com.entities.DataSet;
import com.io.EveLogReader;
import com.io.FileReader;
import com.utils.Logger;

public class ContainerHandler {

private static Map<String, DataSet> dataSets = new TreeMap<>();

public static void init() {
DataSet dataSet;
String fileName;
String[] pathParts;

List<String> unpaid = FileReader.getAllUnfinishedMiningFleetPayments();
for (String line : unpaid) {
dataSet = new DataSet();
dataSet.setPaid(false);
dataSet.setLootList(EveLogReader.convertLogToList(FileReader.getFileContent(line)));
dataSet.generatePlayerStats();
pathParts = line.replaceAll("/", "\\\\").split("\\\\");
fileName = pathParts[pathParts.length - 1].replaceAll(".txt", "");
dataSet.setFileName(fileName);
dataSet.setFilePath(line);
dataSets.put(fileName, dataSet);
Logger.log(ContainerHandler.class, fileName + " with " + dataSet + " has been added to the container");
}

List<String> paid = FileReader.getAllFinishedMiningFleetPayments();
for (String line : paid) {
dataSet = new DataSet();
dataSet.setPaid(true);
dataSet.setLootList(EveLogReader.convertLogToList(FileReader.getFileContent(line)));
dataSet.generatePlayerStats();
pathParts = line.replaceAll("/", "\\\\").split("\\\\");
fileName = pathParts[pathParts.length - 1].replaceAll(".txt", "");
dataSet.setFileName(fileName);
dataSet.setFilePath(line);
dataSets.put(fileName, dataSet);
Logger.log(ContainerHandler.class, fileName + " with " + dataSet + " has been added to the container");
}

createMassiveDataSet();
}

private static void createMassiveDataSet() {
DataSet dataSet = new DataSet(ListHandler.compressMassiveLogList(
EveLogReader.convertFileLocationslistToLogList(FileReader.getAllEVELogFiles())));
dataSet.setFileName("");
dataSet.setPaid(true);
dataSets.put("Overall", dataSet);
}

public static void updateMassiveDataSet() {
DataSet dataSet = new DataSet(ListHandler.compressMassiveLogList(
EveLogReader.convertFileLocationslistToLogList(FileReader.getAllEVELogFiles())));

dataSet.setFileName("");
dataSet.setPaid(true);

if (dataSet.getLootList().size() == get("Overall").getLootList().size())
return;

Settings.trigger_overall_view = true;

modify("Overall", dataSet);
}

public static void remove(Object fileName) {
dataSets.remove(fileName);
Logger.log(ContainerHandler.class, fileName + " has been removed from the container");
}

public static void put(String fileName, DataSet dataSet) {
dataSets.put(fileName, dataSet);
Logger.log(ContainerHandler.class, fileName + " with " + dataSet + " has been added to the container");
}

public static DataSet get(Object fileName) {
Logger.log(ContainerHandler.class, fileName + " has been requested.");
return dataSets.get(fileName);
}

public static void modify(String key, DataSet dataset) {
dataSets.replace(key, dataset);
Logger.log(ContainerHandler.class, key + " was modified, new object[]=" + dataset);
}

public static List<DataSet> getUnpaidDataSets() {
List<DataSet> data = new ArrayList<>();
for (DataSet el : dataSets.values()) {
if (!el.isPaid() && !el.getFileName().equalsIgnoreCase(""))
data.add(el);
}
return data;
}

public static List<DataSet> getPaidDataSets() {
List<DataSet> data = new ArrayList<>();
for (DataSet el : dataSets.values()) {
if (el.isPaid() && !el.getFileName().equalsIgnoreCase(""))
data.add(el);
}
return data;
}
}
@@ -1,61 +1,61 @@
package com.handlers;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.TreeMap;

import com.Settings;

public class DatabaseHandler {

private static TreeMap<String, Double> harvestables = new TreeMap<>();
private static TreeMap<String, Double> lootables = new TreeMap<>();

public static void init() {
setHarvestables(convertDataToMap(Settings.database_Harvestables_File_Name));
setLootables(convertDataToMap(Settings.database_Lootables_File_Name));
}

private static TreeMap<String, Double> convertDataToMap(String fileName) {
TreeMap<String, Double> map = new TreeMap<>();
try (InputStream is = DatabaseHandler.class.getResourceAsStream("/resources/" + fileName);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);) {

String line;
String[] data;
String estPrice;
while ((line = br.readLine()) != null)
{
data = line.split("-");
estPrice = data[1].trim().replaceAll(",", "");
map.put(data[0].trim(), Double.parseDouble(estPrice));
}

br.close();
isr.close();
is.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return map;
}

public static TreeMap<String, Double> getHarvestables() {
return harvestables;
}

public static void setHarvestables(TreeMap<String, Double> harvestables) {
DatabaseHandler.harvestables = harvestables;
}

public static TreeMap<String, Double> getLootables() {
return lootables;
}

public static void setLootables(TreeMap<String, Double> lootables) {
DatabaseHandler.lootables = lootables;
}
package com.handlers;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.TreeMap;

import com.Settings;

public class DatabaseHandler {

private static TreeMap<String, Double> harvestables = new TreeMap<>();
private static TreeMap<String, Double> lootables = new TreeMap<>();

public static void init() {
setHarvestables(convertDataToMap(Settings.database_Harvestables_File_Name));
setLootables(convertDataToMap(Settings.database_Lootables_File_Name));
}

private static TreeMap<String, Double> convertDataToMap(String fileName) {
TreeMap<String, Double> map = new TreeMap<>();
try (InputStream is = DatabaseHandler.class.getResourceAsStream("/resources/" + fileName);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);) {

String line;
String[] data;
String estPrice;
while ((line = br.readLine()) != null)
{
data = line.split("-");
estPrice = data[1].trim().replaceAll(",", "");
map.put(data[0].trim(), Double.parseDouble(estPrice));
}

br.close();
isr.close();
is.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return map;
}

public static TreeMap<String, Double> getHarvestables() {
return harvestables;
}

public static void setHarvestables(TreeMap<String, Double> harvestables) {
DatabaseHandler.harvestables = harvestables;
}

public static TreeMap<String, Double> getLootables() {
return lootables;
}

public static void setLootables(TreeMap<String, Double> lootables) {
DatabaseHandler.lootables = lootables;
}
}
@@ -1,140 +1,140 @@
package com.handlers;

import java.awt.Component;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;

import com.entities.DataSet;
import com.entities.LogLine;
import com.entities.Player;
import com.utils.Formatter;
import com.utils.PaymentCalculator;

public class ListHandler {

public static List<LogLine> compressMassiveLogList(List<LogLine> list) {
List<LogLine> compressedList = new ArrayList<>();
int length = list.size();
int index = 0;
LogLine tempLine;
boolean exists = false;
while (index != length) {
tempLine = list.get(index);

for (int i = 0; i < compressedList.size(); i++) {
if (tempLine.getCharacterName().equalsIgnoreCase(compressedList.get(i).getCharacterName())
&& tempLine.getItemType().equalsIgnoreCase(compressedList.get(i).getItemType())) {
exists = true;
}
}

if (!exists) {
for (int i = 0; i < length; i++) {
if (tempLine.getCharacterName().equalsIgnoreCase(list.get(i).getCharacterName())
&& tempLine.getItemType().equalsIgnoreCase(list.get(i).getItemType())
&& index != i) {
tempLine.setQuantity(tempLine.getQuantity() + list.get(i).getQuantity());
}
}
compressedList.add(tempLine);
}

exists = false;
index++;
}

return compressedList;
}

public static void fillEVELootListTableUsingLogList(List<LogLine> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);

String[] data;
for (LogLine line : list) {
data = line.toString().split("#");
data[4] = Formatter.convertToGroupedNumber(Long.parseLong(data[4]));
model.addRow(data);
}

resizeColumnWidth(table);
}

public static void fillEVEOveralEarningLootList(List<LogLine> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);

String[] data;
String total;
for (LogLine line : list) {
data = line.toString().split("#");
total = Formatter.multiplyTwoStringsIntoReadable(data[3].replaceAll(" ISK", ""), data[4]);
data[4] = Formatter.convertToGroupedNumber(Long.parseLong(data[4]));
model.addRow(
new String[] { data[1], data[2], data[4], data[3], total + " ISK" }
);
}

resizeColumnWidth(table);
}

public static void fillEVEPlayerStatsListUsingPlayerList(List<Player> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
Object[] data;

model.setRowCount(0);

for (Player player : list) {
data = player.toString().split("-");
model.addRow(data);
}

resizeColumnWidth(table);
}

public static void fillEVEPlayerStatsListUsingLogList(List<LogLine> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
List<Player> players = PaymentCalculator.getPayments(list);
Object[] data;

model.setRowCount(0);

for (Player player : players) {
data = player.toString().split("-");
model.addRow(data);
}

resizeColumnWidth(table);
}

private static void resizeColumnWidth(JTable table) {
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++) {
int width = 15; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width + 1, width);
}
columnModel.getColumn(column).setPreferredWidth(width);
}
}

public static void fillEVELootFilesList(List<DataSet> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();

model.setRowCount(0);

for (DataSet data : list) {
model.addRow(new String[] { data.getFileName() });
}

resizeColumnWidth(table);
}

package com.handlers;

import java.awt.Component;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;

import com.entities.DataSet;
import com.entities.LogLine;
import com.entities.Player;
import com.utils.Formatter;
import com.utils.PaymentCalculator;

public class ListHandler {

public static List<LogLine> compressMassiveLogList(List<LogLine> list) {
List<LogLine> compressedList = new ArrayList<>();
int length = list.size();
int index = 0;
LogLine tempLine;
boolean exists = false;
while (index != length) {
tempLine = list.get(index);

for (int i = 0; i < compressedList.size(); i++) {
if (tempLine.getCharacterName().equalsIgnoreCase(compressedList.get(i).getCharacterName())
&& tempLine.getItemType().equalsIgnoreCase(compressedList.get(i).getItemType())) {
exists = true;
}
}

if (!exists) {
for (int i = 0; i < length; i++) {
if (tempLine.getCharacterName().equalsIgnoreCase(list.get(i).getCharacterName())
&& tempLine.getItemType().equalsIgnoreCase(list.get(i).getItemType())
&& index != i) {
tempLine.setQuantity(tempLine.getQuantity() + list.get(i).getQuantity());
}
}
compressedList.add(tempLine);
}

exists = false;
index++;
}

return compressedList;
}

public static void fillEVELootListTableUsingLogList(List<LogLine> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);

String[] data;
for (LogLine line : list) {
data = line.toString().split("#");
data[4] = Formatter.convertToGroupedNumber(Long.parseLong(data[4]));
model.addRow(data);
}

resizeColumnWidth(table);
}

public static void fillEVEOveralEarningLootList(List<LogLine> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);

String[] data;
String total;
for (LogLine line : list) {
data = line.toString().split("#");
total = Formatter.multiplyTwoStringsIntoReadable(data[3].replaceAll(" ISK", ""), data[4]);
data[4] = Formatter.convertToGroupedNumber(Long.parseLong(data[4]));
model.addRow(
new String[] { data[1], data[2], data[4], data[3], total + " ISK" }
);
}

resizeColumnWidth(table);
}

public static void fillEVEPlayerStatsListUsingPlayerList(List<Player> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
Object[] data;

model.setRowCount(0);

for (Player player : list) {
data = player.toString().split("-");
model.addRow(data);
}

resizeColumnWidth(table);
}

public static void fillEVEPlayerStatsListUsingLogList(List<LogLine> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
List<Player> players = PaymentCalculator.getPayments(list);
Object[] data;

model.setRowCount(0);

for (Player player : players) {
data = player.toString().split("-");
model.addRow(data);
}

resizeColumnWidth(table);
}

private static void resizeColumnWidth(JTable table) {
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++) {
int width = 15; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width + 1, width);
}
columnModel.getColumn(column).setPreferredWidth(width);
}
}

public static void fillEVELootFilesList(List<DataSet> list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();

model.setRowCount(0);

for (DataSet data : list) {
model.addRow(new String[] { data.getFileName() });
}

resizeColumnWidth(table);
}

}
@@ -1,59 +1,59 @@
package com.handlers;

import com.Settings;
import com.io.FileReader;
import com.swing.DataSetPanel;
import com.swing.LogPanel;

public class ThreadHandler {

public static Thread get_original_eve_history_log_location_checker(double tick_per_second) {
return new Thread(() -> {
while (true) {

FileReader.transferFilesToUnfinishedIfPossible();
ContainerHandler.updateMassiveDataSet();

try {
Thread.sleep((long)(1000 / tick_per_second));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}

public static Thread file_refresher(LogPanel panel) {
return new Thread(() -> {
while (true) {

panel.updateAll();

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}

public static Thread overall_view_refresher(DataSetPanel panel) {
return new Thread(() -> {
while (true) {

if (Settings.trigger_overall_view) {
panel.updateView("Overall");
Settings.trigger_overall_view = false;
}


try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
package com.handlers;

import com.Settings;
import com.io.FileReader;
import com.swing.DataSetPanel;
import com.swing.LogPanel;

public class ThreadHandler {

public static Thread get_original_eve_history_log_location_checker(double tick_per_second) {
return new Thread(() -> {
while (true) {

FileReader.transferFilesToUnfinishedIfPossible();
ContainerHandler.updateMassiveDataSet();

try {
Thread.sleep((long)(1000 / tick_per_second));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}

public static Thread file_refresher(LogPanel panel) {
return new Thread(() -> {
while (true) {

panel.updateAll();

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}

public static Thread overall_view_refresher(DataSetPanel panel) {
return new Thread(() -> {
while (true) {

if (Settings.trigger_overall_view) {
panel.updateView("Overall");
Settings.trigger_overall_view = false;
}


try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
@@ -1,76 +1,76 @@
package com.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

import com.Settings;

public class ConfigurationReader {

private static void createDefaultProperties() {
try {
File configFile = new File(Settings.CONFIGURATION_USER_SETTINGS_FILE.substring(0, Settings.CONFIGURATION_USER_SETTINGS_FILE.length()-17), "config.properties");
configFile.getParentFile().mkdirs();
Properties config = new Properties();

config.setProperty("unfinished_fleet_payments", "");
config.setProperty("finished_fleet_payments", "");
config.setProperty("default_eve_fleet_history", "");

FileOutputStream fos = new FileOutputStream(configFile);
config.store(fos, "user settings");
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

private static String getKey(String file, String key) {
try {
File configFile = new File(file);
if (!configFile.exists())
createDefaultProperties();

FileInputStream fis = new FileInputStream(configFile);
Properties config = new Properties();
config.load(fis);
fis.close();
return config.getProperty(key);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}

}

public static String getUserKey(String key) {
return getKey(Settings.CONFIGURATION_USER_SETTINGS_FILE, key);
}

public static void modifyUserKey(String key, String value) {
modifyKey(Settings.CONFIGURATION_USER_SETTINGS_FILE, key, value);
}

private static void modifyKey(String file, String key, String value) {
try {
File configFile = new File(file);
Properties config = new Properties();

FileInputStream fis = new FileInputStream(configFile);
config.load(fis);
fis.close();

config.setProperty(key, value);

FileOutputStream fos = new FileOutputStream(configFile);
config.store(fos, "user settings");
fos.close();
} catch (Exception e) {
e.printStackTrace();
}

}

package com.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

import com.Settings;

public class ConfigurationReader {

private static void createDefaultProperties() {
try {
File configFile = new File(Settings.CONFIGURATION_USER_SETTINGS_FILE.substring(0, Settings.CONFIGURATION_USER_SETTINGS_FILE.length()-17), "config.properties");
configFile.getParentFile().mkdirs();
Properties config = new Properties();

config.setProperty("unfinished_fleet_payments", "");
config.setProperty("finished_fleet_payments", "");
config.setProperty("default_eve_fleet_history", "");

FileOutputStream fos = new FileOutputStream(configFile);
config.store(fos, "user settings");
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

private static String getKey(String file, String key) {
try {
File configFile = new File(file);
if (!configFile.exists())
createDefaultProperties();

FileInputStream fis = new FileInputStream(configFile);
Properties config = new Properties();
config.load(fis);
fis.close();
return config.getProperty(key);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}

}

public static String getUserKey(String key) {
return getKey(Settings.CONFIGURATION_USER_SETTINGS_FILE, key);
}

public static void modifyUserKey(String key, String value) {
modifyKey(Settings.CONFIGURATION_USER_SETTINGS_FILE, key, value);
}

private static void modifyKey(String file, String key, String value) {
try {
File configFile = new File(file);
Properties config = new Properties();

FileInputStream fis = new FileInputStream(configFile);
config.load(fis);
fis.close();

config.setProperty(key, value);

FileOutputStream fos = new FileOutputStream(configFile);
config.store(fos, "user settings");
fos.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}
@@ -1,44 +1,44 @@
package com.io;

import java.util.ArrayList;
import java.util.List;

import com.entities.LogLine;
import com.entities.Player;
import com.utils.PaymentCalculator;

public class EveLogReader {

public static List<LogLine> convertLogToList(List<String> list) {
List<LogLine> logList = new ArrayList<>();

String[] lineSub;

for (String line : list) {
if (!line.startsWith("Time")) {
lineSub = line.split("\\t");
for (int i = 0; i < lineSub.length; i++) {
lineSub[i] = lineSub[i].trim();
}
if (lineSub.length == 5)
logList.add(new LogLine(lineSub[0], lineSub[1], lineSub[2], Long.parseLong(lineSub[3]), lineSub[4]));
}
}

return logList;
}

public static List<Player> getPlayerStatsOutOfLogFile(List<LogLine> logFile) {
return PaymentCalculator.getPayments(logFile);
}

public static List<LogLine> convertFileLocationslistToLogList(List<String> fileLocations) {
List<LogLine> logs = new ArrayList<>();

for (String file : fileLocations) {
logs.addAll(convertLogToList(FileReader.getFileContent(file)));
}

return logs;
}
package com.io;

import java.util.ArrayList;
import java.util.List;

import com.entities.LogLine;
import com.entities.Player;
import com.utils.PaymentCalculator;

public class EveLogReader {

public static List<LogLine> convertLogToList(List<String> list) {
List<LogLine> logList = new ArrayList<>();

String[] lineSub;

for (String line : list) {
if (!line.startsWith("Time")) {
lineSub = line.split("\\t");
for (int i = 0; i < lineSub.length; i++) {
lineSub[i] = lineSub[i].trim();
}
if (lineSub.length == 5)
logList.add(new LogLine(lineSub[0], lineSub[1], lineSub[2], Long.parseLong(lineSub[3]), lineSub[4]));
}
}

return logList;
}

public static List<Player> getPlayerStatsOutOfLogFile(List<LogLine> logFile) {
return PaymentCalculator.getPayments(logFile);
}

public static List<LogLine> convertFileLocationslistToLogList(List<String> fileLocations) {
List<LogLine> logs = new ArrayList<>();

for (String file : fileLocations) {
logs.addAll(convertLogToList(FileReader.getFileContent(file)));
}

return logs;
}
}
@@ -1,127 +1,127 @@
package com.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.Settings;
import com.entities.DataSet;
import com.handlers.ContainerHandler;
import com.utils.Logger;

public class FileReader {

public static List<String> getFileContent(String path) {
List<String> list = new ArrayList<String>();

try (BufferedReader reader = new BufferedReader(new java.io.FileReader(new File(path)))) {
String line;

while ((line = reader.readLine()) != null) {
list.add(line);
}

reader.close();
return list;
} catch (IOException e) {
System.err.println(e.getMessage());
return null;
}
}

public static List<String> getAllUnfinishedMiningFleetPayments() {
return scanFilesAtLocation(Settings.unfinishedFleetPaymentsPath);
}

public static List<String> getAllFinishedMiningFleetPayments() {
return scanFilesAtLocation(Settings.finishedFleetPaymentsPath);
}

private static List<String> scanFilesAtLocation(String path) {
try (Stream<Path> paths = Files.walk(Paths.get(path))) {
return paths
.filter(Files::isRegularFile)
.map(e -> e.toString())
.filter(e -> e.contains("Loot - "))
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

public static void transferFleetLogToPaidLocation(String fileName) {
File source = new File(Settings.unfinishedFleetPaymentsPath + File.separator + fileName + ".txt");
File target = new File(Settings.finishedFleetPaymentsPath + File.separator + fileName + ".txt");
try {
Files.move(source.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE);
Logger.log(FileReader.class, "Moved " + source.toPath() + " to " + target.toPath());
DataSet data = ContainerHandler.get(fileName.replaceAll(".txt", ""));
data.setFilePath(target.toPath().toString());
data.setPaid(true);
ContainerHandler.modify(fileName, data);
Settings.trigger_file_list_activated = true;
} catch (IOException e) {
e.printStackTrace();
}
}

public static synchronized void transferFleetLogToUnpaidLocation(String fileName) {
File source = new File(Settings.defaultFleetSavingLocationPath + File.separator + fileName);
File target = new File(Settings.unfinishedFleetPaymentsPath + File.separator + fileName);
try {
Files.move(source.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE);
DataSet data = ContainerHandler.get(fileName.replaceAll(".txt", ""));
data.setFilePath(target.toPath().toString());
ContainerHandler.modify(fileName, data);
Settings.trigger_file_list_activated = true;
} catch (IOException e) {
e.printStackTrace();
}
}

public static synchronized void transferFilesToUnfinishedIfPossible() {
List<String> files = scanFilesAtLocation(Settings.defaultFleetSavingLocationPath);
if (files.size() > 0) {
String name = "";
DataSet data = null;
for (int i = 0; i < files.size(); i++) {
name = files.get(i).substring(files.get(i).length() - 30, files.get(i).length()).trim();
data = new DataSet(EveLogReader.convertLogToList(getFileContent(files.get(i))));
data.setFileName(name.replaceAll(".txt", ""));
data.setFilePath(files.get(i));
ContainerHandler.put(name.replaceAll(".txt", ""), data);

transferFleetLogToUnpaidLocation(name);
Logger.log(FileReader.class, "Moved " + name + " to unfinished payments");
}
Settings.trigger_file_list_activated = true;
}
}

public static List<String> getAllEVELogFiles() {
List<String> result = new ArrayList<>();
result.addAll(getAllUnfinishedMiningFleetPayments());
result.addAll(getAllFinishedMiningFleetPayments());
return result;
}

public static void removeFile(String filePath) {
File file = new File(filePath);
try {
Files.delete(file.toPath());
Logger.log(FileReader.class, "Removed file at " + file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
Settings.trigger_file_list_activated = true;
}
package com.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.Settings;
import com.entities.DataSet;
import com.handlers.ContainerHandler;
import com.utils.Logger;

public class FileReader {

public static List<String> getFileContent(String path) {
List<String> list = new ArrayList<String>();

try (BufferedReader reader = new BufferedReader(new java.io.FileReader(new File(path)))) {
String line;

while ((line = reader.readLine()) != null) {
list.add(line);
}

reader.close();
return list;
} catch (IOException e) {
System.err.println(e.getMessage());
return null;
}
}

public static List<String> getAllUnfinishedMiningFleetPayments() {
return scanFilesAtLocation(Settings.unfinishedFleetPaymentsPath);
}

public static List<String> getAllFinishedMiningFleetPayments() {
return scanFilesAtLocation(Settings.finishedFleetPaymentsPath);
}

private static List<String> scanFilesAtLocation(String path) {
try (Stream<Path> paths = Files.walk(Paths.get(path))) {
return paths
.filter(Files::isRegularFile)
.map(e -> e.toString())
.filter(e -> e.contains("Loot - "))
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

public static void transferFleetLogToPaidLocation(String fileName) {
File source = new File(Settings.unfinishedFleetPaymentsPath + File.separator + fileName + ".txt");
File target = new File(Settings.finishedFleetPaymentsPath + File.separator + fileName + ".txt");
try {
Files.move(source.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE);
Logger.log(FileReader.class, "Moved " + source.toPath() + " to " + target.toPath());
DataSet data = ContainerHandler.get(fileName.replaceAll(".txt", ""));
data.setFilePath(target.toPath().toString());
data.setPaid(true);
ContainerHandler.modify(fileName, data);
Settings.trigger_file_list_activated = true;
} catch (IOException e) {
e.printStackTrace();
}
}

public static synchronized void transferFleetLogToUnpaidLocation(String fileName) {
File source = new File(Settings.defaultFleetSavingLocationPath + File.separator + fileName);
File target = new File(Settings.unfinishedFleetPaymentsPath + File.separator + fileName);
try {
Files.move(source.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE);
DataSet data = ContainerHandler.get(fileName.replaceAll(".txt", ""));
data.setFilePath(target.toPath().toString());
ContainerHandler.modify(fileName, data);
Settings.trigger_file_list_activated = true;
} catch (IOException e) {
e.printStackTrace();
}
}

public static synchronized void transferFilesToUnfinishedIfPossible() {
List<String> files = scanFilesAtLocation(Settings.defaultFleetSavingLocationPath);
if (files.size() > 0) {
String name = "";
DataSet data = null;
for (int i = 0; i < files.size(); i++) {
name = files.get(i).substring(files.get(i).length() - 30, files.get(i).length()).trim();
data = new DataSet(EveLogReader.convertLogToList(getFileContent(files.get(i))));
data.setFileName(name.replaceAll(".txt", ""));
data.setFilePath(files.get(i));
ContainerHandler.put(name.replaceAll(".txt", ""), data);

transferFleetLogToUnpaidLocation(name);
Logger.log(FileReader.class, "Moved " + name + " to unfinished payments");
}
Settings.trigger_file_list_activated = true;
}
}

public static List<String> getAllEVELogFiles() {
List<String> result = new ArrayList<>();
result.addAll(getAllUnfinishedMiningFleetPayments());
result.addAll(getAllFinishedMiningFleetPayments());
return result;
}

public static void removeFile(String filePath) {
File file = new File(filePath);
try {
Files.delete(file.toPath());
Logger.log(FileReader.class, "Removed file at " + file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
Settings.trigger_file_list_activated = true;
}
}
@@ -1,81 +1,81 @@
package com.listeners;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import com.Settings;
import com.entities.DataSet;
import com.handlers.ContainerHandler;
import com.io.FileReader;
import com.swing.LogPanel;

public class ButtonListener {

public static ActionListener get_set_paid_action_listener(LogPanel panel) {
return new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
if (panel.getSelectedIndex() == -1)
return;

int press = JOptionPane.showOptionDialog(
null,
"Press 'Yes' if you want to move this log file to the finished payments location",
"Confirmation",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[] { "Yes, please", "No" },
"No"
);

System.out.println(press);

if (press == 0) {
DataSet data = ContainerHandler.get(panel.getDatasetPanel().getDataset().getFileName());
data.setPaid(true);
ContainerHandler.modify(panel.getDatasetPanel().getDataset().getFileName(), data);
FileReader.transferFleetLogToPaidLocation(panel.getDatasetPanel().getDataset().getFileName());
panel.fillLootFilesList();
panel.resetSelectedIndex();
panel.getDatasetPanel().clear();
Settings.trigger_file_list_activated = true;
}
}

};
}

public static ActionListener get_remove_loot_history_file(LogPanel panel) {
return new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
if (panel.getSelectedIndex() == -1)
return;

int press = JOptionPane.showOptionDialog(
null,
"Press 'Yes' if you want to remove this log file.",
"Confirmation",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[] { "Yes, please", "No" },
"No"
);
if (press == 0) {
FileReader.removeFile(panel.getDatasetPanel().getDataset().getFilePath());
ContainerHandler.remove(panel.getDatasetPanel().getDataset().getFileName());
panel.resetSelectedIndex();
panel.getDatasetPanel().clear();
}
}

};
}

package com.listeners;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import com.Settings;
import com.entities.DataSet;
import com.handlers.ContainerHandler;
import com.io.FileReader;
import com.swing.LogPanel;

public class ButtonListener {

public static ActionListener get_set_paid_action_listener(LogPanel panel) {
return new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
if (panel.getSelectedIndex() == -1)
return;

int press = JOptionPane.showOptionDialog(
null,
"Press 'Yes' if you want to move this log file to the finished payments location",
"Confirmation",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[] { "Yes, please", "No" },
"No"
);

System.out.println(press);

if (press == 0) {
DataSet data = ContainerHandler.get(panel.getDatasetPanel().getDataset().getFileName());
data.setPaid(true);
ContainerHandler.modify(panel.getDatasetPanel().getDataset().getFileName(), data);
FileReader.transferFleetLogToPaidLocation(panel.getDatasetPanel().getDataset().getFileName());
panel.fillLootFilesList();
panel.resetSelectedIndex();
panel.getDatasetPanel().clear();
Settings.trigger_file_list_activated = true;
}
}

};
}

public static ActionListener get_remove_loot_history_file(LogPanel panel) {
return new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
if (panel.getSelectedIndex() == -1)
return;

int press = JOptionPane.showOptionDialog(
null,
"Press 'Yes' if you want to remove this log file.",
"Confirmation",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[] { "Yes, please", "No" },
"No"
);
if (press == 0) {
FileReader.removeFile(panel.getDatasetPanel().getDataset().getFilePath());
ContainerHandler.remove(panel.getDatasetPanel().getDataset().getFileName());
panel.resetSelectedIndex();
panel.getDatasetPanel().clear();
}
}

};
}

}
@@ -1,95 +1,95 @@
package com.swing;

import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

import com.entities.DataSet;
import com.handlers.ContainerHandler;
import com.handlers.ListHandler;
import com.handlers.ThreadHandler;
import com.utils.Table;

public class DataSetPanel extends JPanel {

private static final long serialVersionUID = -4576591025283717970L;

private Table lootTable;
private Table playerTable;

private DataSet dataset;

private boolean isOverall;

public DataSetPanel(DataSet dataset) {
this(dataset, false);
}

public DataSetPanel(DataSet dataset, boolean isOverall) {
super(new BorderLayout());
this.isOverall = isOverall;
setDataset(dataset);
initComponents();
layoutComponents();
if (dataset != null)
fillLists();
if (isOverall)
ThreadHandler.overall_view_refresher(this).start();
}

private void initComponents() {
if (isOverall)
lootTable = new Table("Character", "Item Type", "Quantity", "Est. Market", "Total Market");
else
lootTable = new Table("Time", "Character", "Item Type", "Est. Market", "Quantity", "Item Group");
playerTable = new Table("Character", "Earned", "%");
}

private void layoutComponents() {
if (!isOverall) {
if (dataset != null) {
setBorder(BorderFactory.createTitledBorder(dataset.getFileName()));
} else {
setBorder(BorderFactory.createTitledBorder("No file selected yet."));
}
}
add(lootTable.getTableWithScrollBar(), BorderLayout.CENTER);
add(playerTable.getTableWithScrollBar(), BorderLayout.EAST);
}

private void fillLists() {
if (isOverall)
ListHandler.fillEVEOveralEarningLootList(dataset.getLootList(), lootTable);
else
ListHandler.fillEVELootListTableUsingLogList(dataset.getLootList(), lootTable);
ListHandler.fillEVEPlayerStatsListUsingPlayerList(dataset.getPlayerList(), playerTable);
}

public void updateView(String name) {
setDataset(ContainerHandler.get(name));
fillLists();
if (!isOverall) {
if (dataset != null) {
setBorder(BorderFactory.createTitledBorder(dataset.getFileName()));
} else {
setBorder(BorderFactory.createTitledBorder("No file selected yet."));
}
}
}

public DataSet getDataset() {
return dataset;
}

public void setDataset(DataSet dataset) {
this.dataset = dataset;
}

public void clear() {
lootTable.resetTable();
playerTable.resetTable();
setBorder(BorderFactory.createTitledBorder("No file selected yet."));
}

package com.swing;

import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

import com.entities.DataSet;
import com.handlers.ContainerHandler;
import com.handlers.ListHandler;
import com.handlers.ThreadHandler;
import com.utils.Table;

public class DataSetPanel extends JPanel {

private static final long serialVersionUID = -4576591025283717970L;

private Table lootTable;
private Table playerTable;

private DataSet dataset;

private boolean isOverall;

public DataSetPanel(DataSet dataset) {
this(dataset, false);
}

public DataSetPanel(DataSet dataset, boolean isOverall) {
super(new BorderLayout());
this.isOverall = isOverall;
setDataset(dataset);
initComponents();
layoutComponents();
if (dataset != null)
fillLists();
if (isOverall)
ThreadHandler.overall_view_refresher(this).start();
}

private void initComponents() {
if (isOverall)
lootTable = new Table("Character", "Item Type", "Quantity", "Est. Market", "Total Market");
else
lootTable = new Table("Time", "Character", "Item Type", "Est. Market", "Quantity", "Item Group");
playerTable = new Table("Character", "Earned", "%");
}

private void layoutComponents() {
if (!isOverall) {
if (dataset != null) {
setBorder(BorderFactory.createTitledBorder(dataset.getFileName()));
} else {
setBorder(BorderFactory.createTitledBorder("No file selected yet."));
}
}
add(lootTable.getTableWithScrollBar(), BorderLayout.CENTER);
add(playerTable.getTableWithScrollBar(), BorderLayout.EAST);
}

private void fillLists() {
if (isOverall)
ListHandler.fillEVEOveralEarningLootList(dataset.getLootList(), lootTable);
else
ListHandler.fillEVELootListTableUsingLogList(dataset.getLootList(), lootTable);
ListHandler.fillEVEPlayerStatsListUsingPlayerList(dataset.getPlayerList(), playerTable);
}

public void updateView(String name) {
setDataset(ContainerHandler.get(name));
fillLists();
if (!isOverall) {
if (dataset != null) {
setBorder(BorderFactory.createTitledBorder(dataset.getFileName()));
} else {
setBorder(BorderFactory.createTitledBorder("No file selected yet."));
}
}
}

public DataSet getDataset() {
return dataset;
}

public void setDataset(DataSet dataset) {
this.dataset = dataset;
}

public void clear() {
lootTable.resetTable();
playerTable.resetTable();
setBorder(BorderFactory.createTitledBorder("No file selected yet."));
}

}
@@ -1,17 +1,17 @@
package com.swing;

import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class FilterPanel extends JPanel {

private static final long serialVersionUID = -3361771769563260316L;

public FilterPanel() {
super(new BorderLayout());
setBorder(BorderFactory.createTitledBorder("Filters"));
}

}
package com.swing;

import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class FilterPanel extends JPanel {

private static final long serialVersionUID = -3361771769563260316L;

public FilterPanel() {
super(new BorderLayout());
setBorder(BorderFactory.createTitledBorder("Filters"));
}

}
@@ -1,140 +1,140 @@
package com.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.handlers.ContainerHandler;
import com.handlers.ListHandler;
import com.handlers.ThreadHandler;
import com.listeners.ButtonListener;
import com.utils.Logger;
import com.utils.Table;

public class LogPanel extends JPanel {

private static final long serialVersionUID = -8678598204342703638L;

private Table fileTable;
private DataSetPanel datasetPanel;

private JButton button_RemoveFile;
private JButton button_SetPaid;

private boolean isPaid;
private int selectedIndex = -1;

public LogPanel(boolean isPaid) {
super(new BorderLayout());
setPaid(isPaid);
setDatasetPanel(new DataSetPanel(null));
initComponents();
layoutComponents();
initListeners();
fillLootFilesList();

ThreadHandler.file_refresher(this).start();

}

private void initComponents() {
fileTable = new Table("Files");
if (!isPaid()) {
button_RemoveFile = new JButton("Remove History File");
button_SetPaid = new JButton("Set Paid");
}
}

private void layoutComponents() {
JScrollPane scroll = fileTable.getTableWithScrollBar();
scroll.setPreferredSize(new Dimension(156, 0));
add(scroll, BorderLayout.WEST);

JPanel panel = new JPanel(new BorderLayout());
JPanel buttons = new JPanel(new BorderLayout());

if (!isPaid()) {
buttons.add(button_RemoveFile, BorderLayout.CENTER);
buttons.add(button_SetPaid, BorderLayout.WEST);
}

panel.add(datasetPanel, BorderLayout.CENTER);
if (!isPaid())
panel.add(buttons, BorderLayout.SOUTH);

add(panel, BorderLayout.CENTER);
}

private void initListeners() {
fileTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
if ((!event.getValueIsAdjusting() && fileTable.getSelectedRow() != -1)) {
if (fileTable.getSelectedRow() == selectedIndex)
return;

selectedIndex = fileTable.getSelectedRow();
String name = fileTable.getValueAt(selectedIndex, 0).toString();
datasetPanel.updateView(name);
Logger.log(this, "View window changed to " + name);
}
}
});

if (!isPaid()) {
button_SetPaid.addActionListener(
ButtonListener.get_set_paid_action_listener(this)
);

button_RemoveFile.addActionListener(
ButtonListener.get_remove_loot_history_file(this)
);
}

}

public void updateAll() {
fillLootFilesList();
fileTable.changeSelection(getSelectedIndex(), 0, true, false);
}

public void fillLootFilesList() {
if (isPaid())
ListHandler.fillEVELootFilesList(ContainerHandler.getPaidDataSets(), fileTable);
else
ListHandler.fillEVELootFilesList(ContainerHandler.getUnpaidDataSets(), fileTable);
}

public DataSetPanel getDatasetPanel() {
return datasetPanel;
}

public void setDatasetPanel(DataSetPanel datasetPanel) {
this.datasetPanel = datasetPanel;
}

public boolean isPaid() {
return isPaid;
}

public void setPaid(boolean isPaid) {
this.isPaid = isPaid;
}

public int getSelectedIndex() {
return selectedIndex;
}

public Table getTable() {
return fileTable;
}

public void resetSelectedIndex() {
selectedIndex = -1;
}

package com.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.handlers.ContainerHandler;
import com.handlers.ListHandler;
import com.handlers.ThreadHandler;
import com.listeners.ButtonListener;
import com.utils.Logger;
import com.utils.Table;

public class LogPanel extends JPanel {

private static final long serialVersionUID = -8678598204342703638L;

private Table fileTable;
private DataSetPanel datasetPanel;

private JButton button_RemoveFile;
private JButton button_SetPaid;

private boolean isPaid;
private int selectedIndex = -1;

public LogPanel(boolean isPaid) {
super(new BorderLayout());
setPaid(isPaid);
setDatasetPanel(new DataSetPanel(null));
initComponents();
layoutComponents();
initListeners();
fillLootFilesList();

ThreadHandler.file_refresher(this).start();

}

private void initComponents() {
fileTable = new Table("Files");
if (!isPaid()) {
button_RemoveFile = new JButton("Remove History File");
button_SetPaid = new JButton("Set Paid");
}
}

private void layoutComponents() {
JScrollPane scroll = fileTable.getTableWithScrollBar();
scroll.setPreferredSize(new Dimension(156, 0));
add(scroll, BorderLayout.WEST);

JPanel panel = new JPanel(new BorderLayout());
JPanel buttons = new JPanel(new BorderLayout());

if (!isPaid()) {
buttons.add(button_RemoveFile, BorderLayout.CENTER);
buttons.add(button_SetPaid, BorderLayout.WEST);
}

panel.add(datasetPanel, BorderLayout.CENTER);
if (!isPaid())
panel.add(buttons, BorderLayout.SOUTH);

add(panel, BorderLayout.CENTER);
}

private void initListeners() {
fileTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
if ((!event.getValueIsAdjusting() && fileTable.getSelectedRow() != -1)) {
if (fileTable.getSelectedRow() == selectedIndex)
return;

selectedIndex = fileTable.getSelectedRow();
String name = fileTable.getValueAt(selectedIndex, 0).toString();
datasetPanel.updateView(name);
Logger.log(this, "View window changed to " + name);
}
}
});

if (!isPaid()) {
button_SetPaid.addActionListener(
ButtonListener.get_set_paid_action_listener(this)
);

button_RemoveFile.addActionListener(
ButtonListener.get_remove_loot_history_file(this)
);
}

}

public void updateAll() {
fillLootFilesList();
fileTable.changeSelection(getSelectedIndex(), 0, true, false);
}

public void fillLootFilesList() {
if (isPaid())
ListHandler.fillEVELootFilesList(ContainerHandler.getPaidDataSets(), fileTable);
else
ListHandler.fillEVELootFilesList(ContainerHandler.getUnpaidDataSets(), fileTable);
}

public DataSetPanel getDatasetPanel() {
return datasetPanel;
}

public void setDatasetPanel(DataSetPanel datasetPanel) {
this.datasetPanel = datasetPanel;
}

public boolean isPaid() {
return isPaid;
}

public void setPaid(boolean isPaid) {
this.isPaid = isPaid;
}

public int getSelectedIndex() {
return selectedIndex;
}

public Table getTable() {
return fileTable;
}

public void resetSelectedIndex() {
selectedIndex = -1;
}

}
@@ -1,98 +1,98 @@
package com.swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.Settings;
import com.io.ConfigurationReader;

public class SettingsPanel extends JPanel {

private static final long serialVersionUID = -4528911195291791234L;

private JLabel label_unfinishedFleetPayments;
private JTextField txt_unfinishedFleetPayments;
private JButton button_setUnfinishedFleetPayments;

private JLabel label_finishedFLeetPayments;
private JTextField txt_finishedFleetPayments;
private JButton button_setFinishedFleetPayments;

private JLabel label_defaultEveFleetHistory;
private JTextField txt_defaultEveFleetHistory;
private JButton button_setDefaultEveFleetHistory;

public SettingsPanel() {
super(new BorderLayout());
initComponents();
layoutComponents();
initListeners();
}

private void initComponents() {
label_unfinishedFleetPayments = new JLabel("Unfinished payments: ");
txt_unfinishedFleetPayments = new JTextField(30);
button_setUnfinishedFleetPayments = new JButton("Set");

label_finishedFLeetPayments = new JLabel("Finished payments: ");
txt_finishedFleetPayments = new JTextField(30);
button_setFinishedFleetPayments = new JButton("Set");

label_defaultEveFleetHistory = new JLabel("original EVE log location: ");
txt_defaultEveFleetHistory = new JTextField(30);
button_setDefaultEveFleetHistory = new JButton("Set");
}

private void layoutComponents() {
JPanel panel_0 = new JPanel(new BorderLayout());
panel_0.add(label_unfinishedFleetPayments, BorderLayout.WEST);
panel_0.add(txt_unfinishedFleetPayments, BorderLayout.CENTER);
panel_0.add(button_setUnfinishedFleetPayments, BorderLayout.EAST);

JPanel panel_1 = new JPanel(new BorderLayout());
panel_1.add(label_finishedFLeetPayments, BorderLayout.WEST);
panel_1.add(txt_finishedFleetPayments, BorderLayout.CENTER);
panel_1.add(button_setFinishedFleetPayments, BorderLayout.EAST);

JPanel panel_2 = new JPanel(new BorderLayout());
panel_2.add(label_defaultEveFleetHistory, BorderLayout.WEST);
panel_2.add(txt_defaultEveFleetHistory, BorderLayout.CENTER);
panel_2.add(button_setDefaultEveFleetHistory, BorderLayout.EAST);

JPanel pathMerge = new JPanel(new BorderLayout());
pathMerge.add(panel_0, BorderLayout.NORTH);
pathMerge.add(panel_1, BorderLayout.CENTER);
pathMerge.add(panel_2, BorderLayout.SOUTH);

JPanel locationPaths = new JPanel(new FlowLayout());
locationPaths.setBorder(BorderFactory.createTitledBorder("File locations paths"));

locationPaths.add(pathMerge);

add(locationPaths, BorderLayout.WEST);
}

private void initListeners() {
button_setUnfinishedFleetPayments.addActionListener(e -> {
Settings.unfinishedFleetPaymentsPath = txt_unfinishedFleetPayments.getText();
ConfigurationReader.modifyUserKey("unfinished_fleet_payments", txt_unfinishedFleetPayments.getText());
});

button_setFinishedFleetPayments.addActionListener(e -> {
Settings.finishedFleetPaymentsPath = txt_finishedFleetPayments.getText();
ConfigurationReader.modifyUserKey("finished_fleet_payments", txt_finishedFleetPayments.getText());
});

button_setDefaultEveFleetHistory.addActionListener(e -> {
Settings.defaultFleetSavingLocationPath = txt_defaultEveFleetHistory.getText();
ConfigurationReader.modifyUserKey("default_eve_fleet_history", txt_defaultEveFleetHistory.getText());
});
}

package com.swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.Settings;
import com.io.ConfigurationReader;

public class SettingsPanel extends JPanel {

private static final long serialVersionUID = -4528911195291791234L;

private JLabel label_unfinishedFleetPayments;
private JTextField txt_unfinishedFleetPayments;
private JButton button_setUnfinishedFleetPayments;

private JLabel label_finishedFLeetPayments;
private JTextField txt_finishedFleetPayments;
private JButton button_setFinishedFleetPayments;

private JLabel label_defaultEveFleetHistory;
private JTextField txt_defaultEveFleetHistory;
private JButton button_setDefaultEveFleetHistory;

public SettingsPanel() {
super(new BorderLayout());
initComponents();
layoutComponents();
initListeners();
}

private void initComponents() {
label_unfinishedFleetPayments = new JLabel("Unfinished payments: ");
txt_unfinishedFleetPayments = new JTextField(30);
button_setUnfinishedFleetPayments = new JButton("Set");

label_finishedFLeetPayments = new JLabel("Finished payments: ");
txt_finishedFleetPayments = new JTextField(30);
button_setFinishedFleetPayments = new JButton("Set");

label_defaultEveFleetHistory = new JLabel("original EVE log location: ");
txt_defaultEveFleetHistory = new JTextField(30);
button_setDefaultEveFleetHistory = new JButton("Set");
}

private void layoutComponents() {
JPanel panel_0 = new JPanel(new BorderLayout());
panel_0.add(label_unfinishedFleetPayments, BorderLayout.WEST);
panel_0.add(txt_unfinishedFleetPayments, BorderLayout.CENTER);
panel_0.add(button_setUnfinishedFleetPayments, BorderLayout.EAST);

JPanel panel_1 = new JPanel(new BorderLayout());
panel_1.add(label_finishedFLeetPayments, BorderLayout.WEST);
panel_1.add(txt_finishedFleetPayments, BorderLayout.CENTER);
panel_1.add(button_setFinishedFleetPayments, BorderLayout.EAST);

JPanel panel_2 = new JPanel(new BorderLayout());
panel_2.add(label_defaultEveFleetHistory, BorderLayout.WEST);
panel_2.add(txt_defaultEveFleetHistory, BorderLayout.CENTER);
panel_2.add(button_setDefaultEveFleetHistory, BorderLayout.EAST);

JPanel pathMerge = new JPanel(new BorderLayout());
pathMerge.add(panel_0, BorderLayout.NORTH);
pathMerge.add(panel_1, BorderLayout.CENTER);
pathMerge.add(panel_2, BorderLayout.SOUTH);

JPanel locationPaths = new JPanel(new FlowLayout());
locationPaths.setBorder(BorderFactory.createTitledBorder("File locations paths"));

locationPaths.add(pathMerge);

add(locationPaths, BorderLayout.WEST);
}

private void initListeners() {
button_setUnfinishedFleetPayments.addActionListener(e -> {
Settings.unfinishedFleetPaymentsPath = txt_unfinishedFleetPayments.getText();
ConfigurationReader.modifyUserKey("unfinished_fleet_payments", txt_unfinishedFleetPayments.getText());
});

button_setFinishedFleetPayments.addActionListener(e -> {
Settings.finishedFleetPaymentsPath = txt_finishedFleetPayments.getText();
ConfigurationReader.modifyUserKey("finished_fleet_payments", txt_finishedFleetPayments.getText());
});

button_setDefaultEveFleetHistory.addActionListener(e -> {
Settings.defaultFleetSavingLocationPath = txt_defaultEveFleetHistory.getText();
ConfigurationReader.modifyUserKey("default_eve_fleet_history", txt_defaultEveFleetHistory.getText());
});
}

}
@@ -1,56 +1,56 @@
package com.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import com.Settings;

public class SwingFrame extends JFrame {

private static final long serialVersionUID = 2693157725904702767L;

public SwingFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle(Settings.APP_NAME);

try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e) {
e.printStackTrace();
}

initComponents();

pack();

validate();

setVisible(true);

setMinimumSize(new Dimension(getWidth() + 380, 500));

setLocationRelativeTo(null);
}

private void initComponents() {
JTabbedPane tab = new JTabbedPane();

JPanel mainPanel = new JPanel(new BorderLayout());

mainPanel.add(new FilterPanel(), BorderLayout.NORTH);
mainPanel.add(new TabPanel(), BorderLayout.CENTER);

tab.add("Fleet History Compressor", mainPanel);
tab.add("Settings", new SettingsPanel());

add(tab);
}

package com.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import com.Settings;

public class SwingFrame extends JFrame {

private static final long serialVersionUID = 2693157725904702767L;

public SwingFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle(Settings.APP_NAME);

try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e) {
e.printStackTrace();
}

initComponents();

pack();

validate();

setVisible(true);

setMinimumSize(new Dimension(getWidth() + 380, 500));

setLocationRelativeTo(null);
}

private void initComponents() {
JTabbedPane tab = new JTabbedPane();

JPanel mainPanel = new JPanel(new BorderLayout());

mainPanel.add(new FilterPanel(), BorderLayout.NORTH);
mainPanel.add(new TabPanel(), BorderLayout.CENTER);

tab.add("Fleet History Compressor", mainPanel);
tab.add("Settings", new SettingsPanel());

add(tab);
}

}
@@ -1,27 +1,27 @@
package com.swing;

import java.awt.BorderLayout;

import javax.swing.JPanel;
import javax.swing.JTabbedPane;

import com.handlers.ContainerHandler;

public class TabPanel extends JPanel {

private static final long serialVersionUID = -3270157778518859428L;

private LogPanel unfinishedPayments = new LogPanel(false);
private LogPanel finishedPayments = new LogPanel(true);
private DataSetPanel overall = new DataSetPanel(ContainerHandler.get("Overall"), true);

public TabPanel() {
super(new BorderLayout());
JTabbedPane tab = new JTabbedPane();

tab.add("Total Earnings", overall);
tab.add("Unfinished Payments", unfinishedPayments);
tab.add("Finished Payments", finishedPayments);
add(tab);
}
package com.swing;

import java.awt.BorderLayout;

import javax.swing.JPanel;
import javax.swing.JTabbedPane;

import com.handlers.ContainerHandler;

public class TabPanel extends JPanel {

private static final long serialVersionUID = -3270157778518859428L;

private LogPanel unfinishedPayments = new LogPanel(false);
private LogPanel finishedPayments = new LogPanel(true);
private DataSetPanel overall = new DataSetPanel(ContainerHandler.get("Overall"), true);

public TabPanel() {
super(new BorderLayout());
JTabbedPane tab = new JTabbedPane();

tab.add("Total Earnings", overall);
tab.add("Unfinished Payments", unfinishedPayments);
tab.add("Finished Payments", finishedPayments);
add(tab);
}
}
@@ -1,34 +1,34 @@
package com.utils;

import java.text.DecimalFormat;

public class Formatter {

public static String convertToReadable(double amount) {
return new DecimalFormat("###,###,###,##0.00").format(amount).toString();
}

public static String convertToGroupedNumber(long parseLong) {
return new DecimalFormat("###,###,###,###,###,##0").format(parseLong).toString();
}

public static String multiplyTwoStringsIntoReadable(String a, String b) {
double value_a = Double.parseDouble(a.replaceAll(",", ""));
double value_b = Double.parseDouble(b.replaceAll(",", ""));
return convertToReadable(value_a * value_b);
}

public static String turnLogLineStringIntoDatabaseString(String name) {
String[] data = name.split("_");
String result = "";
for (int i = 0; i < data.length; i++) {
data[i] = data[i].substring(0, 1).toUpperCase() + data[i].substring(1).toLowerCase();
result += data[i] + ((i == data.length-1) ? "" : "_");
}
return result;
}

public static String formatPercentage(double percentage) {
return new DecimalFormat("#0.##").format(percentage).toString() + "%";
}
package com.utils;

import java.text.DecimalFormat;

public class Formatter {

public static String convertToReadable(double amount) {
return new DecimalFormat("###,###,###,##0.00").format(amount).toString();
}

public static String convertToGroupedNumber(long parseLong) {
return new DecimalFormat("###,###,###,###,###,##0").format(parseLong).toString();
}

public static String multiplyTwoStringsIntoReadable(String a, String b) {
double value_a = Double.parseDouble(a.replaceAll(",", ""));
double value_b = Double.parseDouble(b.replaceAll(",", ""));
return convertToReadable(value_a * value_b);
}

public static String turnLogLineStringIntoDatabaseString(String name) {
String[] data = name.split("_");
String result = "";
for (int i = 0; i < data.length; i++) {
data[i] = data[i].substring(0, 1).toUpperCase() + data[i].substring(1).toLowerCase();
result += data[i] + ((i == data.length-1) ? "" : "_");
}
return result;
}

public static String formatPercentage(double percentage) {
return new DecimalFormat("#0.##").format(percentage).toString() + "%";
}
}
@@ -1,31 +1,31 @@
package com.utils;

import java.util.ArrayList;
import java.util.List;

public class Logger {

private static List<String> errList = new ArrayList<>();

public static void log(Object o, String message) {
System.out.println(o.getClass().getSimpleName() + ": " + message + "...");
}

public static void err(Object o, String message) {
System.err.println(o.getClass().getSimpleName() + ": " + message + "...");
}

public static void addErr(Object o, String message) {
String line = o.getClass().getSimpleName() + ": " + message + "...";
if (!errList.contains(line))
errList.add(line);
}

public static void printErr() {
String result = "";
for (String line : errList) {
result += line + "\n";
}
System.err.println("\n############\nErrors: " + errList.size() + "\n############\n" + result);
}
package com.utils;

import java.util.ArrayList;
import java.util.List;

public class Logger {

private static List<String> errList = new ArrayList<>();

public static void log(Object o, String message) {
System.out.println(o.getClass().getSimpleName() + ": " + message + "...");
}

public static void err(Object o, String message) {
System.err.println(o.getClass().getSimpleName() + ": " + message + "...");
}

public static void addErr(Object o, String message) {
String line = o.getClass().getSimpleName() + ": " + message + "...";
if (!errList.contains(line))
errList.add(line);
}

public static void printErr() {
String result = "";
for (String line : errList) {
result += line + "\n";
}
System.err.println("\n############\nErrors: " + errList.size() + "\n############\n" + result);
}
}
@@ -1,45 +1,45 @@
package com.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import com.entities.LogLine;
import com.entities.Player;

public class PaymentCalculator {

public static List<Player> getPayments(List<LogLine> list) {
List<Player> characters = new ArrayList<>();
Object[] uniqueNames;
List<LogLine> mined = new ArrayList<>();
double payment;
Player character;

uniqueNames = list.stream().map(e -> e.getCharacterName())
.distinct().toArray();

for (Object el : uniqueNames) {
final String name = (String) el;

mined = list.stream().filter(e -> e.getCharacterName().equalsIgnoreCase(name)).collect(Collectors.toList());

payment = mined.stream().mapToDouble(e -> e.getTotalPrice()).sum();

character = new Player(name, payment, 0);
characters.add(character);
}

double totalValue = 0;
for (Player player : characters) {
totalValue += player.getTotalPayment();
}

for (Player player : characters) {
player.setPercentage(player.getTotalPayment() / totalValue * 100);
}

return characters;
}

}
package com.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import com.entities.LogLine;
import com.entities.Player;

public class PaymentCalculator {

public static List<Player> getPayments(List<LogLine> list) {
List<Player> characters = new ArrayList<>();
Object[] uniqueNames;
List<LogLine> mined = new ArrayList<>();
double payment;
Player character;

uniqueNames = list.stream().map(e -> e.getCharacterName())
.distinct().toArray();

for (Object el : uniqueNames) {
final String name = (String) el;

mined = list.stream().filter(e -> e.getCharacterName().equalsIgnoreCase(name)).collect(Collectors.toList());

payment = mined.stream().mapToDouble(e -> e.getTotalPrice()).sum();

character = new Player(name, payment, 0);
characters.add(character);
}

double totalValue = 0;
for (Player player : characters) {
totalValue += player.getTotalPayment();
}

for (Player player : characters) {
player.setPercentage(player.getTotalPayment() / totalValue * 100);
}

return characters;
}

}
@@ -1,62 +1,62 @@
package com.utils;

import java.awt.Dimension;
import java.util.regex.PatternSyntaxException;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class Table extends JTable {

private static final long serialVersionUID = 4162204050779075227L;
private boolean isEditable;

private TableRowSorter<DefaultTableModel> sorter;

public Table(String... columnNames) {
this(new Object[0][0], columnNames);
}

public Table(Object[][] data, String... columnNames) {
super(new DefaultTableModel(data, columnNames));
getTableHeader().setReorderingAllowed(false);
sorter = new TableRowSorter<DefaultTableModel>((DefaultTableModel)getModel());
setRowSorter(sorter);
}

@Override
public boolean isCellEditable(int row, int column) {
return isEditable;
}

public void setEditable(boolean isEditable) {
this.isEditable = isEditable;
}

public void addRow(Object... data) {
((DefaultTableModel)getModel()).addRow(data);
}

public void resetTable() {
((DefaultTableModel)getModel()).setRowCount(0);
}

public JScrollPane getTableWithScrollBar() {
JScrollPane pane = new JScrollPane(this);
pane.setPreferredSize(new Dimension(280, 2));
return pane;
}

public void setFilter(String data, int column) {
RowFilter<DefaultTableModel, Object> filter = null;
try {
filter = RowFilter.regexFilter(data, column);
} catch (PatternSyntaxException ex) {
return;
}
sorter.setRowFilter(filter);
}
package com.utils;

import java.awt.Dimension;
import java.util.regex.PatternSyntaxException;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class Table extends JTable {

private static final long serialVersionUID = 4162204050779075227L;
private boolean isEditable;

private TableRowSorter<DefaultTableModel> sorter;

public Table(String... columnNames) {
this(new Object[0][0], columnNames);
}

public Table(Object[][] data, String... columnNames) {
super(new DefaultTableModel(data, columnNames));
getTableHeader().setReorderingAllowed(false);
sorter = new TableRowSorter<DefaultTableModel>((DefaultTableModel)getModel());
setRowSorter(sorter);
}

@Override
public boolean isCellEditable(int row, int column) {
return isEditable;
}

public void setEditable(boolean isEditable) {
this.isEditable = isEditable;
}

public void addRow(Object... data) {
((DefaultTableModel)getModel()).addRow(data);
}

public void resetTable() {
((DefaultTableModel)getModel()).setRowCount(0);
}

public JScrollPane getTableWithScrollBar() {
JScrollPane pane = new JScrollPane(this);
pane.setPreferredSize(new Dimension(280, 2));
return pane;
}

public void setFilter(String data, int column) {
RowFilter<DefaultTableModel, Object> filter = null;
try {
filter = RowFilter.regexFilter(data, column);
} catch (PatternSyntaxException ex) {
return;
}
sorter.setRowFilter(filter);
}
}
@@ -1,16 +1,16 @@
Veldspar - 11.40
Concentrated_Veldspar - 14.60
Dense_Veldspar - 15.50
Stable_Veldspar - 17.10
Scordite - 16.90
Condensed_Scordite - 17.00
Massive_Scordite - 17.80
Glossy_Scordite - 14.70
Pyroxeres - 44.10
Solid_Pyroxeres - 45.10
Viscous_Pyroxeres - 47.40
Opulent_Pyroxeres - 49.60
Plagioclase - 59.30
Azure_Plagioclase - 61.20
Rich_Plagioclase - 62.90
Veldspar - 11.40
Concentrated_Veldspar - 14.60
Dense_Veldspar - 15.50
Stable_Veldspar - 17.10
Scordite - 16.90
Condensed_Scordite - 17.00
Massive_Scordite - 17.80
Glossy_Scordite - 14.70
Pyroxeres - 44.10
Solid_Pyroxeres - 45.10
Viscous_Pyroxeres - 47.40
Opulent_Pyroxeres - 49.60
Plagioclase - 59.30
Azure_Plagioclase - 61.20
Rich_Plagioclase - 62.90
Sparkling_Plagioclase - 57.90