Support for nested folders that store constructed decks - part 1 of ≈3

This commit is contained in:
Maxmtg
2013-08-19 20:48:21 +00:00
parent 8b97275195
commit df6860294d
9 changed files with 81 additions and 27 deletions

1
.gitattributes vendored
View File

@@ -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/StorageReaderBase.java -text
src/main/java/forge/util/storage/StorageReaderFile.java -text
src/main/java/forge/util/storage/StorageReaderFileSections.java -text
src/main/java/forge/util/storage/StorageReaderFolder.java -text

View File

@@ -28,6 +28,7 @@ import com.google.common.collect.Lists;
import forge.util.IItemReader;
import forge.util.storage.StorageBase;
import forge.util.storage.StorageReaderBase;
public final class EditionCollection extends StorageBase<CardEdition> {
@@ -107,7 +108,7 @@ public final class EditionCollection extends StorageBase<CardEdition> {
*/
public IItemReader<SealedProductTemplate> getBoosterGenerator() {
// TODO Auto-generated method stub
return new IItemReader<SealedProductTemplate>() {
return new StorageReaderBase<SealedProductTemplate>(null) {
@Override
public Map<String, SealedProductTemplate> readAll() {

View File

@@ -23,6 +23,8 @@ import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.ImmutableList;
import forge.deck.Deck;
import forge.deck.DeckGroup;
import forge.util.FileUtil;
@@ -111,7 +113,7 @@ public class DeckGroupSerializer extends StorageReaderFolder<DeckGroup> implemen
* @return the file
*/
public File makeFileFor(final DeckGroup decks) {
return new File(this.getDirectory(), decks.getBestFileName());
return new File(this.directory, decks.getBestFileName());
}
/*
@@ -134,4 +136,10 @@ public class DeckGroupSerializer extends StorageReaderFolder<DeckGroup> implemen
};
}
@Override
public Iterable<File> getSubFolders() {
// Sealed decks are kept in separate folders, no further drilling possible
return ImmutableList.of();
}
}

View File

@@ -40,6 +40,7 @@ import forge.properties.NewConstants;
import forge.util.FileSection;
import forge.util.FileSectionManual;
import forge.util.FileUtil;
import forge.util.IItemReader;
import forge.util.IItemSerializer;
import forge.util.storage.StorageReaderFolder;
import freemarker.template.Configuration;
@@ -194,7 +195,7 @@ public class DeckSerializer extends StorageReaderFolder<Deck> implements IItemSe
}
public File makeFileFor(final Deck deck) {
return new File(this.getDirectory(), deck.getBestFileName() + FILE_EXTENSION);
return new File(this.directory, deck.getBestFileName() + FILE_EXTENSION);
}
@Override
@@ -245,4 +246,14 @@ public class DeckSerializer extends StorageReaderFolder<Deck> implements IItemSe
return null;
}
/* (non-Javadoc)
* @see forge.util.storage.StorageReaderBase#getReaderForFolder(java.io.File)
*/
@Override
public IItemReader<Deck> getReaderForFolder(File subfolder) {
if ( !subfolder.getParentFile().equals(directory) )
throw new UnsupportedOperationException("Only child folders of " + directory + " may be processed");
return new DeckSerializer(subfolder, false);
}
}

View File

@@ -17,6 +17,7 @@
*/
package forge.util;
import java.io.File;
import java.util.Map;
/**
@@ -41,4 +42,8 @@ public interface IItemReader<T> {
* @return the item key
*/
String getItemKey(T item);
Iterable<File> getSubFolders();
IItemReader<T> getReaderForFolder(File subfolder);
}

View File

@@ -0,0 +1,27 @@
package forge.util.storage;
import java.io.File;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import forge.util.IItemReader;
public abstract class StorageReaderBase<T> implements IItemReader<T> {
protected final Function<? super T, String> keySelector;
public StorageReaderBase(final Function<? super T, String> keySelector0) {
keySelector = keySelector0;
}
@Override
public Iterable<File> getSubFolders() {
// TODO Auto-generated method stub
return ImmutableList.of();
}
@Override
public IItemReader<T> getReaderForFolder(File subfolder) {
throw new UnsupportedOperationException("This reader is not supposed to have nested folders");
}
}

View File

@@ -28,7 +28,6 @@ import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Function;
import forge.util.FileUtil;
import forge.util.IItemReader;
/**
* This class treats every line of a given file as a source for a named object.
@@ -36,10 +35,10 @@ import forge.util.IItemReader;
* @param <T>
* the generic type
*/
public abstract class StorageReaderFile<T> implements IItemReader<T> {
public abstract class StorageReaderFile<T> extends StorageReaderBase<T> {
private final File file;
private final Function<? super T, String> keySelector;
/**
* Instantiates a new storage reader file.
@@ -58,8 +57,8 @@ public abstract class StorageReaderFile<T> implements IItemReader<T> {
* @param keySelector0 the key selector0
*/
public StorageReaderFile(final File file0, final Function<? super T, String> keySelector0) {
super(keySelector0);
this.file = file0;
this.keySelector = keySelector0;
}
/* (non-Javadoc)
@@ -121,5 +120,4 @@ public abstract class StorageReaderFile<T> implements IItemReader<T> {
public String getItemKey(final T item) {
return this.keySelector.apply(item);
}
}

View File

@@ -30,7 +30,6 @@ import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Function;
import forge.util.FileUtil;
import forge.util.IItemReader;
/**
* This class treats every line of a given file as a source for a named object.
@@ -38,18 +37,18 @@ import forge.util.IItemReader;
* @param <T>
* the generic type
*/
public abstract class StorageReaderFileSections<T> implements IItemReader<T> {
public abstract class StorageReaderFileSections<T> extends StorageReaderBase<T> {
private final File file;
private final Function<? super T, String> keySelector;
public StorageReaderFileSections(final String pathname, final Function<? super T, String> keySelector0) {
this(new File(pathname), keySelector0);
}
public StorageReaderFileSections(final File file0, final Function<? super T, String> keySelector0) {
super(keySelector0);
this.file = file0;
this.keySelector = keySelector0;
}
/* (non-Javadoc)

View File

@@ -18,9 +18,11 @@
package forge.util.storage;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -34,7 +36,6 @@ import com.google.common.base.Function;
import forge.deck.io.OldDeckFileFormatException;
import forge.error.BugReporter;
import forge.util.IItemReader;
/**
* This class treats every file in the given folder as a source for a named
@@ -43,19 +44,9 @@ import forge.util.IItemReader;
*
* @param <T> the generic type
*/
public abstract class StorageReaderFolder<T> implements IItemReader<T> {
public abstract class StorageReaderFolder<T> extends StorageReaderBase<T> {
private final File directory;
private final Function<? super T, String> keySelector;
/**
* Gets the directory.
*
* @return the directory
*/
protected final File getDirectory() {
return this.directory;
}
protected final File directory;
/**
* Instantiates a new storage reader folder.
@@ -63,9 +54,9 @@ public abstract class StorageReaderFolder<T> implements IItemReader<T> {
* @param deckDir0 the deck dir0
*/
public StorageReaderFolder(final File deckDir0, Function<? super T, String> keySelector0) {
super(keySelector0);
this.directory = deckDir0;
keySelector = keySelector0;
if (this.directory == null) {
throw new IllegalArgumentException("No deck directory specified");
@@ -154,4 +145,17 @@ public abstract class StorageReaderFolder<T> implements IItemReader<T> {
return keySelector.apply(item);
}
// methods handling nested folders are provided. It's up to consumer whether to use these or not.
@Override
public Iterable<File> getSubFolders() {
File[] list = this.directory.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory() && !file.isHidden();
}
});
return Arrays.asList(list);
}
}