diff --git a/.gitattributes b/.gitattributes index 8bd64727cf9..35ad11eb112 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9745,8 +9745,6 @@ src/main/java/forge/card/trigger/Trigger_TurnFaceUp.java svneol=native#text/plai src/main/java/forge/card/trigger/Trigger_Unequip.java svneol=native#text/plain src/main/java/forge/card/trigger/Trigger_Untaps.java svneol=native#text/plain src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain -src/main/java/forge/deck/Deck.java svneol=native#text/plain -src/main/java/forge/deck/DeckManager.java svneol=native#text/plain src/main/java/forge/deck/DownloadDeck.java svneol=native#text/plain src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain src/main/java/forge/deck/generate/Generate3ColorDeck.java svneol=native#text/plain diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java deleted file mode 100644 index f5bbaf5aaf1..00000000000 --- a/src/main/java/forge/deck/Deck.java +++ /dev/null @@ -1,346 +0,0 @@ -package forge.deck; - -import forge.Constant; -import forge.card.CardDb; -import forge.card.CardPool; -import forge.card.CardPoolView; -import forge.card.CardPrinted; - -import java.io.Serializable; -import java.util.*; - -/** - *

Deck class.

- * - * @author Forge - * @version $Id$ - */ -public final class Deck implements Comparable, Serializable { - /** - * - */ - private static final long serialVersionUID = -7478025567887481994L; - - //gameType is from Constant.GameType, like Constant.GameType.Regular - - private Map metadata = new HashMap(); - - private CardPool main; - private CardPool sideboard; - - /** Constant NAME="Name" */ - public static final String NAME = "Name"; - /** Constant DECK_TYPE="Deck Type" */ - public static final String DECK_TYPE = "Deck Type"; - /** Constant COMMENT="Comment" */ - public static final String COMMENT = "Comment"; - /** Constant DESCRIPTION="Description" */ - public static final String DESCRIPTION = "Description"; - /** Constant DIFFICULTY="Difficulty" */ - public static final String DIFFICULTY = "Difficulty"; - - - //gameType is from Constant.GameType, like Constant.GameType.Regular - /** - *

Constructor for Deck.

- */ - public Deck() { - main = new CardPool(); - sideboard = new CardPool(); - } - - /** - *

Constructor for Deck.

- * - * @param deckType a {@link java.lang.String} object. - * @param main a {@link java.util.List} object. - * @param sideboard a {@link java.util.List} object. - * @param name a {@link java.lang.String} object. - */ - public Deck(String deckType, List main, List sideboard, String name) { - setDeckType(deckType); - setName(name); - - this.main = new CardPool(main); - this.sideboard = new CardPool(sideboard); - } - - /** - *

Constructor for Deck.

- * - * @param type a {@link java.lang.String} object. - */ - public Deck(final String type) { - this(); - setDeckType(type); - } - - /** - *

Getter for the field main.

- * - * @return a {@link java.util.List} object. - */ - public CardPoolView getMain() { - return main.getView(); - } - - /** - *

Getter for the field sideboard.

- * - * @return a {@link java.util.List} object. - */ - public CardPoolView getSideboard() { - return sideboard.getView(); - } - - /** - *

getDeckType.

- * - * @return a {@link java.lang.String} object. - */ - public String getDeckType() { - return metadata.get(DECK_TYPE); - } - - //can only call this method ONCE - /** - *

setDeckType.

- * - * @param deckType a {@link java.lang.String} object. - */ - void setDeckType(String deckType) { - if (this.getDeckType() != null) { - throw new IllegalStateException( - "Deck : setDeckType() error, deck type has already been set"); - } - - if (!Constant.GameType.GameTypes.contains(deckType)) { - throw new RuntimeException( - "Deck : setDeckType() error, invalid deck type - " + deckType); - } - - metadata.put(DECK_TYPE, deckType); - } - - /** - *

setName.

- * - * @param s a {@link java.lang.String} object. - */ - public void setName(String s) { - metadata.put(NAME, s); - } - - /** - *

getName.

- * - * @return a {@link java.lang.String} object. - */ - public String getName() { - return metadata.get(NAME); - } - - /** - *

setComment.

- * - * @param comment a {@link java.lang.String} object. - */ - public void setComment(String comment) { - metadata.put(COMMENT, comment); - } - - /** - *

getComment.

- * - * @return a {@link java.lang.String} object. - */ - public String getComment() { - return metadata.get(COMMENT); - - } - - /** - *

addMain.

- * - * @param cardName a {@link java.lang.String} object. - */ - public void addMain(final String cardName) { addMain(CardDb.instance().getCard(cardName)); } - public void addMain(final CardPrinted card) { main.add(card); } - public void addMain(final CardPoolView list) { main.addAll(list); } - public void removeMain(final CardPrinted card) { main.remove(card); } - public void removeMain(final CardPrinted card, final int amount) { main.remove(card, amount); } - public int countMain() { return main.countAll(); } - - /** - *

addSideboard.

- * - * @param cardName a {@link java.lang.String} object. - */ - public final void addSideboard(final String cardName) { addSideboard(CardDb.instance().getCard(cardName)); } - public final void addSideboard(final CardPrinted card) { sideboard.add(card); } - public final void addSideboard(final CardPrinted card, final int amount) { sideboard.add(card, amount); } - public final void addSideboard(final CardPoolView cards) { sideboard.addAll(cards); } - - /** - *

countSideboard.

- * - * @return a int. - */ - public int countSideboard() { - return sideboard.countAll(); - } - - /** - *

removeSideboard.

- * - * @param index a int. - * @return a {@link java.lang.String} object. - */ - public void removeFromSideboard(CardPrinted card) { - sideboard.remove(card); - } - - /** - *

isDraft.

- * - * @return a boolean. - */ - public boolean isDraft() { - return getDeckType().equals(Constant.GameType.Draft); - } - - /** - *

isSealed.

- * - * @return a boolean. - */ - public boolean isSealed() { - return getDeckType().equals(Constant.GameType.Sealed); - } - - /** - *

isRegular.

- * - * @return a boolean. - */ - public boolean isRegular() { - return getDeckType().equals(Constant.GameType.Constructed); - } - - /** - *

hashCode.

- * - * @return a int. - */ - public int hashCode() { - return getName().hashCode(); - } - - /** {@inheritDoc} */ - @Override - public String toString() { - return getName(); - } - - - // The setters and getters below are for Quest decks - /** - *

setDifficulty.

- * - * @param s a {@link java.lang.String} object. - */ - public void setDifficulty(String s) { - metadata.put(DIFFICULTY, s); - } - - /** - *

getDifficulty.

- * - * @return a {@link java.lang.String} object. - */ - public String getDifficulty() { - return metadata.get(DIFFICULTY); - } - - /** - *

setDescription.

- * - * @param s a {@link java.lang.String} object. - */ - public void setDescription(String s) { - metadata.put(DESCRIPTION, s); - } - - /** - *

getDescription.

- * - * @return a {@link java.lang.String} object. - */ - public String getDescription() { - return metadata.get(DESCRIPTION); - } - - /** - *

compareTo.

- * - * @param d a {@link forge.deck.Deck} object. - * @return a int. - */ - public int compareTo(Deck d) { - return getName().compareTo(d.getName()); - } - - /** {@inheritDoc} */ - public boolean equals(Object o) { - if (o instanceof Deck) { - Deck d = (Deck) o; - return getName().equals(d.getName()); - } - return false; - } - - /** - *

Getter for the field metadata.

- * - * @return a {@link java.util.Set} object. - */ - public Set> getMetadata() { - return metadata.entrySet(); - } - - /** - *

Getter for the field metadata.

- * - * @param key a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - * @since 1.0.15 - */ - public String getMetadata(String key) { - if (metadata.containsKey(key)) - return metadata.get(key); - - System.err.println("In forge.deck/Deck.java, getMetadata() failed "+ - "for property '"+key+"' in deck '"+getName()+"'."); - return ""; - } - - /** - *

addMetaData.

- * - * @param key a {@link java.lang.String} object. - * @param value a {@link java.lang.String} object. - */ - public void addMetaData(String key, String value) { - metadata.put(key, value); - } - - public void clearSideboard() { - sideboard.clear(); - } - - public void clearMain() { - main.clear(); - - } - -} diff --git a/src/main/java/forge/deck/DeckManager.java b/src/main/java/forge/deck/DeckManager.java deleted file mode 100644 index fd2de901ca1..00000000000 --- a/src/main/java/forge/deck/DeckManager.java +++ /dev/null @@ -1,487 +0,0 @@ -package forge.deck; - - -import forge.Constant; -import forge.card.CardPrinted; -import forge.error.ErrorViewer; - -import java.io.*; -import java.util.*; -import java.util.Map.Entry; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.lang3.StringUtils; - -import static java.lang.Integer.parseInt; -import static java.lang.String.format; -import static java.util.Arrays.asList; - - -//reads and writeDeck Deck objects -/** - *

DeckManager class.

- * - * @author Forge - * @version $Id$ - */ -public class DeckManager { - /** Constant BDKFileFilter */ - private static FilenameFilter BDKFileFilter = new FilenameFilter() { - public boolean accept(File dir, String name) { - return name.endsWith(".bdk"); - } - }; - - /** Constant DCKFileFilter */ - private static FilenameFilter DCKFileFilter = new FilenameFilter() { - public boolean accept(File dir, String name) { - return name.endsWith(".dck"); - } - }; - - - private File deckDir; - Map deckMap; - Map draftMap; - - /** - *

Constructor for DeckManager.

- * - * @param deckDir a {@link java.io.File} object. - */ - public DeckManager(File deckDir) { - if (deckDir == null) { - throw new IllegalArgumentException("No deck directory specified"); - } - try { - this.deckDir = deckDir; - - if (deckDir.isFile()) { - throw new IOException("Not a directory"); - } else { - deckDir.mkdirs(); - if (!deckDir.isDirectory()) { - throw new IOException("Directory can't be created"); - } - this.deckMap = new HashMap(); - this.draftMap = new HashMap(); - readAllDecks(); - } - } catch (IOException ex) { - ErrorViewer.showError(ex); - throw new RuntimeException("DeckManager : writeDeck() error, " + ex.getMessage()); - } - } - - - /** - *

isUnique.

- * - * @param deckName a {@link java.lang.String} object. - * @return a boolean. - */ - public boolean isUnique(String deckName) { - return !deckMap.containsKey(deckName); - } - - /** - *

isUniqueDraft.

- * - * @param deckName a {@link java.lang.String} object. - * @return a boolean. - */ - public boolean isUniqueDraft(String deckName) { - return !draftMap.keySet().contains(deckName); - } - - /** - *

getDeck.

- * - * @param deckName a {@link java.lang.String} object. - * @return a {@link forge.deck.Deck} object. - */ - public Deck getDeck(String deckName) { - return deckMap.get(deckName); - } - - - /** - *

addDeck.

- * - * @param deck a {@link forge.deck.Deck} object. - */ - public void addDeck(Deck deck) { - if (deck.getDeckType().equals(Constant.GameType.Draft)) { - throw new RuntimeException( - "DeckManager : addDeck() error, deck type is Draft"); - } - - deckMap.put(deck.getName(), deck); - } - - /** - *

deleteDeck.

- * - * @param deckName a {@link java.lang.String} object. - */ - public void deleteDeck(String deckName) { - deckMap.remove(deckName); - } - - /** - *

getDraftDeck.

- * - * @param deckName a {@link java.lang.String} object. - * @return an array of {@link forge.deck.Deck} objects. - */ - public Deck[] getDraftDeck(String deckName) { - if (!draftMap.containsKey(deckName)) { - throw new RuntimeException( - "DeckManager : getDraftDeck() error, deck name not found - " + deckName); - } - - return draftMap.get(deckName); - } - - /** - *

addDraftDeck.

- * - * @param deck an array of {@link forge.deck.Deck} objects. - */ - public void addDraftDeck(Deck[] deck) { - checkDraftDeck(deck); - - draftMap.put(deck[0].toString(), deck); - } - - /** - *

deleteDraftDeck.

- * - * @param deckName a {@link java.lang.String} object. - */ - public void deleteDraftDeck(String deckName) { - if (!draftMap.containsKey(deckName)) { - throw new RuntimeException( - "DeckManager : deleteDraftDeck() error, deck name not found - " + deckName); - } - - draftMap.remove(deckName); - } - - /** - *

checkDraftDeck.

- * - * @param deck an array of {@link forge.deck.Deck} objects. - */ - private void checkDraftDeck(Deck[] deck) { - if (deck == null || deck.length != 8 || deck[0].getName().equals("") - || (!deck[0].getDeckType().equals(Constant.GameType.Draft))) { - throw new RuntimeException("DeckManager : checkDraftDeck() error, invalid deck"); - } - } - - - /** - *

getDecks.

- * - * @return a {@link java.util.Collection} object. - */ - public Collection getDecks() { - return deckMap.values(); - } - - /** - *

getDraftDecks.

- * - * @return a {@link java.util.Map} object. - */ - public Map getDraftDecks() { - return new HashMap(draftMap); - } - - /** - *

close.

- */ - public void close() { - writeAllDecks(); - } - - - /** - *

readAllDecks.

- */ - public void readAllDecks() { - deckMap.clear(); - draftMap.clear(); - - File[] files; - - files = deckDir.listFiles(DCKFileFilter); - for (File file : files) { - Deck newDeck = readDeck(file); - deckMap.put(newDeck.getName(), newDeck); - } - - files = deckDir.listFiles(BDKFileFilter); - for (File file : files) { - Deck[] d = new Deck[8]; - - for (int i = 0; i < d.length; i++) { - d[i] = readDeck(new File(file, i + ".dck")); - } - - draftMap.put(d[0].getName(), d); - } - } - - /** - *

readDeck.

- * - * @param deckFile a {@link java.io.File} object. - * @return a {@link forge.deck.Deck} object. - */ - public static Deck readDeck(File deckFile) { - - List lines = new LinkedList(); - - try { - BufferedReader r = new BufferedReader(new FileReader(deckFile)); - - String line; - while ((line = r.readLine()) != null) { - lines.add(line); - } - - r.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - ListIterator lineIterator = lines.listIterator(); - - String line = lineIterator.next(); - - //Old text-based format - if (!line.equals("[metadata]")) { - lineIterator.previous(); - return readDeckOld(lineIterator); - } - - Deck d = new Deck(); - - //read metadata - while (!(line = lineIterator.next()).equals("[main]")) { - String[] linedata = line.split("=", 2); - d.addMetaData(linedata[0], linedata[1]); - } - - addCardList(lineIterator, d); - - return d; - - } - - /** - *

readDeckOld.

- * - * @param iterator a {@link java.util.ListIterator} object. - * @return a {@link forge.deck.Deck} object. - */ - private static Deck readDeckOld(ListIterator iterator) { - - String line; - //readDeck name - String name = iterator.next(); - - //readDeck comments - String comment = null; - while ((line = iterator.next()) != null && !line.equals("[general]")) { - if (comment == null) { - comment = line; - } else { - comment += "\n" + line; - } - } - - //readDeck deck type - String deckType = iterator.next(); - - Deck d = new Deck(); - d.setName(name); - d.setComment(comment); - d.setDeckType(deckType); - - //go to [main] - while ((line = iterator.next()) != null && !line.equals("[main]")) { - System.err.println("unexpected line: " + line); - } - - addCardList(iterator, d); - - return d; - } - - /** - *

addCardList.

- * - * @param lineIterator a {@link java.util.ListIterator} object. - * @param d a {@link forge.deck.Deck} object. - */ - private static void addCardList(ListIterator lineIterator, Deck d) { - String line; - - Pattern p = Pattern.compile("\\s*((\\d+)\\s+)?(.*?)\\s*"); - - //readDeck main deck - while (lineIterator.hasNext() && !(line = lineIterator.next()).equals("[sideboard]")) { - Matcher m = p.matcher(line); - m.matches(); - String s = m.group(2); - int count = s == null ? 1 : parseInt(s); - - for (int i = 0; i < count; i++) { - d.addMain(m.group(3)); - } - } - - //readDeck sideboard - while (lineIterator.hasNext()) { - line = lineIterator.next(); - Matcher m = p.matcher(line); - m.matches(); - String s = m.group(2); - String cardName = m.group(3); - if (StringUtils.isBlank(cardName)) { continue; } - - int count = s == null ? 1 : parseInt(s); - for (int i = 0; i < count; i++) { - d.addSideboard(cardName); - } - } - } - - /** - *

deriveFileName.

- * - * @param deckName a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - */ - private String deriveFileName(String deckName) { - //skips all but the listed characters - return deckName.replaceAll("[^-_$#@.{[()]} a-zA-Z0-9]", ""); - } - - /** - *

writeAllDecks.

- */ - public void writeAllDecks() { - try { - //store the files that do exist - List files = new ArrayList(); - files.addAll(asList(deckDir.listFiles(DCKFileFilter))); - - //save the files and remove them from the list - for (Deck deck : deckMap.values()) { - File f = new File(deckDir, deriveFileName(deck.getName()) + ".dck"); - files.remove(f); - BufferedWriter out = new BufferedWriter(new FileWriter(f)); - writeDeck(deck, out); - out.close(); - } - //delete the files that were not written out: the decks that were deleted - for (File file : files) { - file.delete(); - } - - //store the files that do exist - files.clear(); - files.addAll(asList(deckDir.listFiles(BDKFileFilter))); - - //save the files and remove them from the list - for (Entry e : draftMap.entrySet()) { - File f = new File(deckDir, deriveFileName(e.getValue()[0].getName()) + ".bdk"); - f.mkdir(); - for (int i = 0; i < e.getValue().length; i++) { - BufferedWriter out = new BufferedWriter(new FileWriter(new File(f, i + ".dck"))); - writeDeck(e.getValue()[i], out); - out.close(); - } - } - /* - //delete the files that were not written out: the decks that were deleted - for(File file:files) { - for(int i = 0; i < 8; i++) - new File(file, i + ".dck").delete(); - file.delete(); - } - */ - } catch (IOException ex) { - ErrorViewer.showError(ex); - throw new RuntimeException("DeckManager : writeDeck() error, " + ex.getMessage()); - } - } - - /** - *

writeDeck.

- * - * @param d a {@link forge.deck.Deck} object. - * @param out a {@link java.io.BufferedWriter} object. - * @throws java.io.IOException if any. - */ - private static void writeDeck(Deck d, BufferedWriter out) throws IOException { - out.write("[metadata]\n"); - - for (Entry entry : d.getMetadata()) { - if (entry.getValue() != null) - out.write(format("%s=%s%n", entry.getKey(), entry.getValue().replaceAll("\n", ""))); - } - - out.write(format("%s%n", "[main]")); - for (Entry e : d.getMain()) { - out.write(format("%d %s%n", e.getValue(), e.getKey().getName())); - } - out.write(format("%s%n", "[sideboard]")); - for (Entry e : d.getSideboard()) { - out.write(format("%d %s%n", e.getValue(), e.getKey().getName())); - } - } - - /** - *

count.

- * - * @param src a {@link java.util.List} object. - * @return a {@link java.util.Map} object. - */ - private static Map count(List src) { - Map result = new HashMap(); - for (String s : src) { - Integer dstValue = result.get(s); - if (dstValue == null) { - result.put(s, 1); - } else { - result.put(s, dstValue + 1); - } - } - return result; - } - - /** - *

writeDeck.

- * - * @param d a {@link forge.deck.Deck} object. - * @param f a {@link java.io.File} object. - */ - public static void writeDeck(Deck d, File f) { - try { - BufferedWriter writer = new BufferedWriter(new FileWriter(f)); - writeDeck(d, writer); - - writer.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - } - -}