mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Support loading more information into model
This commit is contained in:
142
forge-core/src/main/java/forge/deck/io/DeckGroupSerializer.java
Normal file
142
forge-core/src/main/java/forge/deck/io/DeckGroupSerializer.java
Normal file
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Forge: Play Magic: the Gathering.
|
||||
* Copyright (C) 2011 Forge Team
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.deck.io;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckGroup;
|
||||
import forge.util.IItemSerializer;
|
||||
import forge.util.storage.StorageReaderFolder;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckGroupSerializer extends StorageReaderFolder<DeckGroup> implements IItemSerializer<DeckGroup> {
|
||||
private final String humanDeckFile = "human.dck";
|
||||
|
||||
/**
|
||||
* Instantiates a new deck group serializer.
|
||||
*
|
||||
* @param deckDir0 the deck dir0
|
||||
*/
|
||||
public DeckGroupSerializer(final File deckDir0) {
|
||||
super(deckDir0, DeckGroup.FN_NAME_SELECTOR);
|
||||
}
|
||||
|
||||
/** The Constant MAX_DRAFT_PLAYERS. */
|
||||
public static final int MAX_DRAFT_PLAYERS = 8;
|
||||
|
||||
/**
|
||||
* Write draft Decks.
|
||||
*
|
||||
* @param unit the unit
|
||||
*/
|
||||
@Override
|
||||
public void save(final DeckGroup unit) {
|
||||
final File f = this.makeFileFor(unit);
|
||||
f.mkdir();
|
||||
DeckSerializer.writeDeck(unit.getHumanDeck(), new File(f, this.humanDeckFile));
|
||||
final List<Deck> aiDecks = unit.getAiDecks();
|
||||
for (int i = 1; i <= aiDecks.size(); i++) {
|
||||
DeckSerializer.writeDeck(aiDecks.get(i - 1), new File(f, "ai-" + i + ".dck"));
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.util.StorageReaderFolder#read(java.io.File)
|
||||
*/
|
||||
@Override
|
||||
protected final DeckGroup read(final File file) {
|
||||
|
||||
final Deck human = DeckSerializer.fromFile(new File(file, this.humanDeckFile));
|
||||
if (null == human) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final DeckGroup d = new DeckGroup(human.getName());
|
||||
d.setHumanDeck(human);
|
||||
for (int i = 1; i < DeckGroupSerializer.MAX_DRAFT_PLAYERS; i++) {
|
||||
final File theFile = new File(file, "ai-" + i + ".dck");
|
||||
if (!theFile.exists()) {
|
||||
break;
|
||||
}
|
||||
|
||||
d.addAiDeck(DeckSerializer.fromFile(theFile));
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see forge.deck.IDeckSerializer#erase(forge.item.CardCollectionBase,
|
||||
* java.io.File)
|
||||
*/
|
||||
@Override
|
||||
public void erase(final DeckGroup unit) {
|
||||
final File dir = this.makeFileFor(unit);
|
||||
final File[] files = dir.listFiles();
|
||||
for (final File f : files) {
|
||||
f.delete();
|
||||
}
|
||||
dir.delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Make file for.
|
||||
*
|
||||
* @param decks the decks
|
||||
* @return the file
|
||||
*/
|
||||
public File makeFileFor(final DeckGroup decks) {
|
||||
return new File(this.directory, decks.getBestFileName());
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see forge.deck.io.DeckSerializerBase#getFileFilter()
|
||||
*/
|
||||
@Override
|
||||
protected FilenameFilter getFileFilter() {
|
||||
return new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
final File testSubject = new File(dir, name);
|
||||
final boolean isVisibleFolder = testSubject.isDirectory() && !testSubject.isHidden();
|
||||
final boolean hasGoodName = StringUtils.isNotEmpty(name) && !name.startsWith(".");
|
||||
final File fileHumanDeck = new File(testSubject, DeckGroupSerializer.this.humanDeckFile);
|
||||
return isVisibleFolder && hasGoodName && fileHumanDeck.exists();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<File> getSubFolders() {
|
||||
// Sealed decks are kept in separate folders, no further drilling possible
|
||||
return ImmutableList.of();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user