@Override public DeckCardLists importDeck(String filename, StringBuilder errorMessages) { try { Document doc = getXmlDocument(filename); DeckCardLists decklist = new DeckCardLists(); List<Node> mainCards = getNodes(doc, "/cockatrice_deck/zone[@name='main']/card"); decklist.setCards(mainCards.stream() .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) .collect(Collectors.toList())); List<Node> sideboardCards = getNodes(doc, "/cockatrice_deck/zone[@name='side']/card"); decklist.setSideboard(sideboardCards.stream() .flatMap(toDeckCardInfo(getCardLookup(), errorMessages)) .collect(Collectors.toList())); getNodes(doc, "/cockatrice_deck/deckname") .forEach(n -> decklist.setName(n.getTextContent().trim())); return decklist; } catch (Exception e) { logger.error("Error loading deck", e); errorMessages.append("There was an error loading the deck."); return new DeckCardLists(); } }
private static Function<Node, Stream<DeckCardInfo>> toDeckCardInfo(CardLookup lookup, StringBuilder errors) { return node -> { String name = node.getAttributes().getNamedItem("name").getNodeValue().trim(); Optional<CardInfo> cardInfo = lookup.lookupCardInfo(name); if (cardInfo.isPresent()) { CardInfo info = cardInfo.get(); return Collections.nCopies( getQuantityFromNode(node), new DeckCardInfo(info.getName(), info.getCardNumber(), info.getSetCode())).stream(); } else { errors.append("Could not find card: '").append(name).append("'\n"); return Stream.empty(); } }; }
public static DeckImporter getDeckImporter(String file) { if (file == null) { return null; } if (file.toLowerCase(Locale.ENGLISH).endsWith("dec")) { return new DecDeckImporter(); } else if (file.toLowerCase(Locale.ENGLISH).endsWith("mwdeck")) { return new MWSDeckImporter(); } else if (file.toLowerCase(Locale.ENGLISH).endsWith("txt")) { return new TxtDeckImporter(haveSideboardSection(file)); } else if (file.toLowerCase(Locale.ENGLISH).endsWith("dck")) { return new DckDeckImporter(); } else if (file.toLowerCase(Locale.ENGLISH).endsWith("dek")) { return new DekDeckImporter(); } else if (file.toLowerCase(Locale.ENGLISH).endsWith("cod")) { return new CodDeckImporter(); } else if (file.toLowerCase(Locale.ENGLISH).endsWith("o8d")) { return new O8dDeckImporter(); } else { return null; } }