magarena/src/magic/data/MagicSetDefinitions.java

97 lines
3.4 KiB
Java
Raw Normal View History

2014-09-03 22:37:26 -07:00
package magic.data;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Path;
2014-09-03 22:37:26 -07:00
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
2020-01-15 12:02:42 -08:00
import magic.model.MagicCardDefinition;
import magic.model.MagicSetDefinition;
import magic.ui.helpers.DesktopHelper;
import magic.utility.MagicFileSystem;
import magic.utility.MagicFileSystem.DataPath;
import magic.utility.MagicResources;
2014-09-03 22:37:26 -07:00
public class MagicSetDefinitions {
2015-01-08 06:40:46 -08:00
private static final HashMap<MagicSets, MagicSetDefinition> loadedSets = new HashMap<>();
2014-09-03 22:37:26 -07:00
private static MagicSetDefinition loadMagicSet(final MagicSets magicSet) {
final MagicSetDefinition magicSetDef = new MagicSetDefinition(magicSet.toString());
2015-01-08 06:56:57 -08:00
try (final Scanner sc = new Scanner(MagicResources.getFileContent(magicSet))) {
2014-09-03 22:37:26 -07:00
while (sc.hasNextLine()) {
2016-07-16 19:06:48 -07:00
magicSetDef.add(sc.nextLine());
2014-09-03 22:37:26 -07:00
}
}
return magicSetDef;
}
public static boolean isCardInSet(final MagicCardDefinition card, final MagicSets magicSet) {
2014-09-03 22:37:26 -07:00
if (!loadedSets.containsKey(magicSet)) {
loadedSets.put(magicSet, loadMagicSet(magicSet));
}
return loadedSets.get(magicSet).containsCard(card);
2014-09-03 22:37:26 -07:00
}
public static void clearLoadedSets() {
loadedSets.clear();
}
/**
* Creates a csv file containing a list of all sets and the
* total number of playable/unplayable/potential cards in each.
*/
public static void createSetStatistics() throws IOException {
final List<MagicCardDefinition> cards = CardDefinitions.getAllCards();
final Path savePath = MagicFileSystem.getDataPath(DataPath.LOGS).resolve("CardStatistics.csv");
try (final PrintWriter writer = new PrintWriter(savePath.toFile(), UTF_8.name())) {
writer.println("Set,Cards,Playable,Unimplemented,Potential,No Status");
for (MagicSets set : MagicSets.values()) {
int totalPlayable = 0;
int totalUnplayable = 0;
int totalPotential = 0;
int totalStatus = 0;
for (MagicCardDefinition card : cards) {
if (isCardInSet(card, set)) {
if (!card.hasStatus() && CardDefinitions.isPotential(card)) {
totalStatus++;
}
if (card.isPlayable()) {
if (card.isInvalid()) {
if (CardDefinitions.isPotential(card)) {
totalPotential++;
} else {
totalUnplayable++;
}
} else {
totalPlayable++;
}
}
}
}
writer.printf("%s %s,%d,%d,%d,%d,%d\n",
set.name().replaceAll("_", ""),
set.getSetName(),
2016-10-24 14:57:54 -07:00
totalPlayable + totalUnplayable + totalPotential,
totalPlayable,
totalUnplayable + totalPotential,
totalPotential,
totalStatus
);
}
}
DesktopHelper.tryOpen(MagicFileSystem.getDataPath(DataPath.LOGS).toFile());
}
2014-09-03 22:37:26 -07:00
}