diff --git a/Mage.Common/src/mage/db/EntityManager.java b/Mage.Common/src/mage/db/EntityManager.java index c04fa485e05..5bb804c3d77 100644 --- a/Mage.Common/src/mage/db/EntityManager.java +++ b/Mage.Common/src/mage/db/EntityManager.java @@ -99,6 +99,7 @@ public enum EntityManager implements Storage { } args.add(arg); } + log.setArguments(args); logs.add(log); } rs.close(); diff --git a/Mage.Common/src/mage/db/Statistics.java b/Mage.Common/src/mage/db/Statistics.java new file mode 100644 index 00000000000..4ef55b42286 --- /dev/null +++ b/Mage.Common/src/mage/db/Statistics.java @@ -0,0 +1,114 @@ +package mage.db; + +import mage.db.model.Log; + +import java.util.*; + +/** + * @author noxx + */ +public class Statistics { + + public static void main(String[] args) throws Exception { + EntityManager.instance.testDB(); + List logs = EntityManager.instance.getAllLogs(); + System.out.println("logs found: " + logs.size()); + + Map nicknames = displayCommonNumbers(logs); + List games = displayTop3(nicknames); + displayPlayedOnlyOnce(games); + + System.out.println("Done"); + } + + private static void displayPlayedOnlyOnce(List games) { + Integer oneGame = 0; + for (Integer numberOfGames : games) { + if (numberOfGames == 1) { + oneGame++; + } + } + + System.out.println("Number of players played only one game: " + oneGame); + } + + private static List displayTop3(Map nicknames) { + Collection values = nicknames.values(); + List games = new ArrayList(); + games.addAll(values); + Collections.sort(games, new Comparator() { + @Override + public int compare(Integer i1, Integer i2) { + return i2.compareTo(i1); + } + }); + + // Top-3 + List numbersToFind = new ArrayList(); + for (Integer numberOfGames : games) { + numbersToFind.add(numberOfGames); + if (numbersToFind.size() == 3) { + break; + } + } + + Map players = new LinkedHashMap(); + for (Map.Entry entry : nicknames.entrySet()) { + if (check(numbersToFind, entry.getValue())) { + players.put(entry.getValue(), entry.getKey()); + } + if (players.size() == 3) { + break; + } + } + + System.out.println("Top-3"); + for (Map.Entry entry : players.entrySet()) { + System.out.println(" " + entry.getValue() + ": " + entry.getKey()); + } + return games; + } + + private static Map displayCommonNumbers(List logs) { + int count = 0; + Map nicknames = new HashMap(); + for (Log log : logs) { + if (log.getKey().equals("gameStarted")) { + if (log.getArguments() != null) { + int index = 0; + for (String argument : log.getArguments()) { + if (index > 0) { + inc(nicknames, argument); + } + index++; + } + } + count++; + } + } + + System.out.println("********************************"); + System.out.println("Games played: " + count); + System.out.println("Number of players: " + nicknames.size()); + return nicknames; + } + + public static void inc(Map map, String player) { + if (map.containsKey(player)) { + Integer count = map.get(player); + count++; + map.put(player, count); + } else { + map.put(player, 1); + } + } + + public static boolean check(List numbers, Integer value) { + for (Integer number : numbers) { + if (number.equals(value)) { + return true; + } + } + return false; + } +}