mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
Subfolders for constructed decks work in r/o mode (part 2 of ~3)
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -15193,6 +15193,7 @@ src/main/java/forge/util/package-info.java -text
|
||||
src/main/java/forge/util/storage/IStorage.java -text
|
||||
src/main/java/forge/util/storage/StorageBase.java -text
|
||||
src/main/java/forge/util/storage/StorageImmediatelySerialized.java svneol=native#text/plain
|
||||
src/main/java/forge/util/storage/StorageNestedFolders.java -text
|
||||
src/main/java/forge/util/storage/StorageReaderBase.java -text
|
||||
src/main/java/forge/util/storage/StorageReaderFile.java -text
|
||||
src/main/java/forge/util/storage/StorageReaderFileSections.java -text
|
||||
|
||||
@@ -49,7 +49,7 @@ public class CardCollections {
|
||||
public CardCollections() {
|
||||
StopWatch sw = new StopWatch();
|
||||
sw.start();
|
||||
this.constructed = new StorageImmediatelySerialized<Deck>(new DeckSerializer(new File(NewConstants.DECK_CONSTRUCTED_DIR), true));
|
||||
this.constructed = new StorageImmediatelySerialized<Deck>(new DeckSerializer(new File(NewConstants.DECK_CONSTRUCTED_DIR), true), true);
|
||||
this.draft = new StorageImmediatelySerialized<DeckGroup>(new DeckGroupSerializer(new File(NewConstants.DECK_DRAFT_DIR)));
|
||||
this.sealed = new StorageImmediatelySerialized<DeckGroup>(new DeckGroupSerializer(new File(NewConstants.DECK_SEALED_DIR)));
|
||||
this.cube = new StorageImmediatelySerialized<Deck>(new DeckSerializer(new File(NewConstants.DECK_CUBE_DIR)));
|
||||
|
||||
@@ -77,7 +77,14 @@ public class Deck extends DeckBase implements Iterable<Entry<DeckSection, CardPo
|
||||
getOrCreate(DeckSection.Main);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.item.InventoryItem#getItemType()
|
||||
*/
|
||||
@Override
|
||||
public String getItemType() {
|
||||
return "Deck";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return this.getName().hashCode();
|
||||
|
||||
@@ -19,11 +19,13 @@ package forge.deck;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import forge.item.InventoryItem;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public abstract class DeckBase implements Serializable, Comparable<DeckBase> {
|
||||
public abstract class DeckBase implements Serializable, Comparable<DeckBase>, InventoryItem {
|
||||
private static final long serialVersionUID = -7538150536939660052L;
|
||||
// gameType is from Constant.GameType, like GameType.Regular
|
||||
|
||||
|
||||
@@ -135,4 +135,13 @@ public class DeckGroup extends DeckBase {
|
||||
}
|
||||
};
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.item.InventoryItem#getItemType()
|
||||
*/
|
||||
@Override
|
||||
public String getItemType() {
|
||||
// TODO Auto-generated method stub
|
||||
return "Set of limited mode decks";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -105,7 +105,16 @@ public class DeckgenUtil {
|
||||
* @return {@link forge.deck.Deck}
|
||||
*/
|
||||
public static Deck getConstructedDeck(final String selection) {
|
||||
return Singletons.getModel().getDecks().getConstructed().get(selection);
|
||||
IStorage<Deck> path = Singletons.getModel().getDecks().getConstructed();
|
||||
String name = selection;
|
||||
int idxSlash = name.indexOf('/');
|
||||
while( idxSlash > 0 ) {
|
||||
String sf = name.substring(0, idxSlash);
|
||||
path = path.getFolders().get(sf);
|
||||
name = name.substring(idxSlash+1);
|
||||
idxSlash = name.indexOf('/');
|
||||
};
|
||||
return path.get(name);
|
||||
}
|
||||
|
||||
public static Deck getPreconDeck(String selection) {
|
||||
|
||||
@@ -82,6 +82,15 @@ public class CustomLimited extends DeckBase {
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.item.InventoryItem#getItemType()
|
||||
*/
|
||||
@Override
|
||||
public String getItemType() {
|
||||
// TODO Auto-generated method stub
|
||||
return "Limited game setup";
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the.
|
||||
*
|
||||
|
||||
@@ -29,7 +29,7 @@ import forge.gui.toolbox.FList;
|
||||
import forge.gui.toolbox.FRadioButton;
|
||||
import forge.gui.toolbox.FScrollPane;
|
||||
import forge.gui.toolbox.JXButtonPanel;
|
||||
import forge.item.PreconDeck;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.quest.QuestController;
|
||||
import forge.quest.QuestEvent;
|
||||
import forge.quest.QuestEventChallenge;
|
||||
@@ -194,8 +194,7 @@ public class FDeckChooser extends JPanel {
|
||||
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
final List<String> customNames = new ArrayList<String>();
|
||||
final IStorage<Deck> allDecks = Singletons.getModel().getDecks().getConstructed();
|
||||
for (final Deck d : allDecks) { customNames.add(d.getName()); }
|
||||
addDecksRecursive(Singletons.getModel().getDecks().getConstructed(), customNames, null);
|
||||
|
||||
lst.setListData(customNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
||||
lst.setName(DeckgenUtil.DeckTypes.CUSTOM.toString());
|
||||
@@ -210,14 +209,23 @@ public class FDeckChooser extends JPanel {
|
||||
lst.setSelectedIndex(0);
|
||||
}
|
||||
|
||||
private <T extends InventoryItem> void addDecksRecursive(IStorage<T> node, List<String> customNames, String namePrefix ) {
|
||||
String path = namePrefix == null ? "" : namePrefix + "/";
|
||||
for (final String fn : node.getFolders().getNames() )
|
||||
{
|
||||
IStorage<T> f = node.getFolders().get(fn);
|
||||
addDecksRecursive(f, customNames, path + fn);
|
||||
}
|
||||
for (final T d : node) { customNames.add(path + d.getName()); }
|
||||
}
|
||||
|
||||
/** Handles all control for "custom" radio button click. */
|
||||
private void updatePrecons() {
|
||||
final JList<String> lst = getLstDecks();
|
||||
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
final List<String> customNames = new ArrayList<String>();
|
||||
final IStorage<PreconDeck> allDecks = QuestController.getPrecons();
|
||||
for (final PreconDeck d : allDecks) { customNames.add(d.getName()); }
|
||||
addDecksRecursive(QuestController.getPrecons(), customNames, null);
|
||||
|
||||
lst.setListData(customNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
||||
lst.setName(DeckgenUtil.DeckTypes.PRECON.toString());
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
*/
|
||||
package forge.util.storage;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
||||
import forge.util.IItemReader;
|
||||
import forge.util.IItemSerializer;
|
||||
|
||||
//reads and writeDeck Deck objects
|
||||
@@ -32,6 +35,15 @@ import forge.util.IItemSerializer;
|
||||
public class StorageImmediatelySerialized<T> extends StorageBase<T> {
|
||||
|
||||
private final IItemSerializer<T> serializer;
|
||||
private final IStorage<IStorage<T>> subfolders;
|
||||
|
||||
private final Function<IItemReader<T>, IStorage<T>> nestedFactory = new Function<IItemReader<T>, IStorage<T>>() {
|
||||
@Override
|
||||
public IStorage<T> apply(IItemReader<T> io) {
|
||||
return new StorageImmediatelySerialized<T>((IItemSerializer<T>) io, true);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for DeckManager.
|
||||
@@ -40,8 +52,14 @@ public class StorageImmediatelySerialized<T> extends StorageBase<T> {
|
||||
* @param io the io
|
||||
*/
|
||||
public StorageImmediatelySerialized(final IItemSerializer<T> io) {
|
||||
this(io, false);
|
||||
}
|
||||
|
||||
|
||||
public StorageImmediatelySerialized(final IItemSerializer<T> io, boolean withSubFolders) {
|
||||
super(io);
|
||||
this.serializer = io;
|
||||
subfolders = withSubFolders ? new StorageNestedFolders<T>(io, nestedFactory) : null;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -65,4 +83,12 @@ public class StorageImmediatelySerialized<T> extends StorageBase<T> {
|
||||
public final void delete(final String deckName) {
|
||||
this.serializer.erase(this.map.remove(deckName));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.util.storage.StorageBase#getFolders()
|
||||
*/
|
||||
@Override
|
||||
public IStorage<IStorage<T>> getFolders() {
|
||||
return subfolders == null ? super.getFolders() : subfolders;
|
||||
}
|
||||
}
|
||||
|
||||
36
src/main/java/forge/util/storage/StorageNestedFolders.java
Normal file
36
src/main/java/forge/util/storage/StorageNestedFolders.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package forge.util.storage;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.apache.commons.lang.NotImplementedException;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
||||
import forge.util.IItemReader;
|
||||
|
||||
|
||||
public class StorageNestedFolders<T> extends StorageBase<IStorage<T>> {
|
||||
|
||||
public StorageNestedFolders(IItemReader<T> io, Function<IItemReader<T>, IStorage<T>> factory) {
|
||||
super(new HashMap<String, IStorage<T>>());
|
||||
for(File sf : io.getSubFolders() )
|
||||
{
|
||||
map.put(sf.getName(), factory.apply(io.getReaderForFolder(sf)));
|
||||
}
|
||||
}
|
||||
|
||||
// need code implementations for folder create/delete operations
|
||||
|
||||
@Override
|
||||
public void add(IStorage<T> deck) {
|
||||
// need folder name here!
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String deckName) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user