mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
Revert Max's revert
This commit is contained in:
@@ -19,7 +19,6 @@ package forge.util.storage;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -39,9 +38,7 @@ import forge.util.IItemReader;
|
|||||||
*/
|
*/
|
||||||
public class StorageBase<T> implements IStorage<T> {
|
public class StorageBase<T> implements IStorage<T> {
|
||||||
protected final Map<String, T> map;
|
protected final Map<String, T> map;
|
||||||
|
private final String name;
|
||||||
public final static StorageBase<?> emptyMap = new StorageBase<Object>("Empty", new HashMap<String, Object>());
|
|
||||||
public final String name;
|
|
||||||
|
|
||||||
public StorageBase(final String name, final IItemReader<T> io) {
|
public StorageBase(final String name, final IItemReader<T> io) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -64,8 +61,20 @@ public class StorageBase<T> implements IStorage<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<T> iterator() {
|
public final Iterator<T> iterator() {
|
||||||
return this.map.values().iterator();
|
final IStorage<IStorage<T>> folders = getFolders();
|
||||||
|
if (folders == null) { //if no folders, just return map iterator
|
||||||
|
return this.map.values().iterator();
|
||||||
|
}
|
||||||
|
//otherwise return iterator for list containing folder items followed by map's items
|
||||||
|
ArrayList<T> items = new ArrayList<T>();
|
||||||
|
for (IStorage<T> folder : folders) {
|
||||||
|
for (T item : folder) {
|
||||||
|
items.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
items.addAll(this.map.values());
|
||||||
|
return items.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -75,12 +84,16 @@ public class StorageBase<T> implements IStorage<T> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
return this.map.size();
|
int size = this.map.size();
|
||||||
|
if (this.getFolders() != null) {
|
||||||
|
size += this.getFolders().size();
|
||||||
|
}
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public T find(Predicate<T> condition) {
|
public T find(Predicate<T> condition) {
|
||||||
return Iterables.tryFind(map.values(), condition).orNull();
|
return Iterables.tryFind(this, condition).orNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -93,11 +106,9 @@ public class StorageBase<T> implements IStorage<T> {
|
|||||||
throw new UnsupportedOperationException("This is a read-only storage");
|
throw new UnsupportedOperationException("This is a read-only storage");
|
||||||
}
|
}
|
||||||
|
|
||||||
// we don't have nested folders unless that's overridden in a derived class
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
@Override
|
||||||
public IStorage<IStorage<T>> getFolders() {
|
public IStorage<IStorage<T>> getFolders() {
|
||||||
return (IStorage<IStorage<T>>) emptyMap;
|
return null; //no nested folders unless getFolders() overridden in a derived class
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -105,7 +116,6 @@ public class StorageBase<T> implements IStorage<T> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,6 @@ public class StorageImmediatelySerialized<T> extends StorageBase<T> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public IStorage<IStorage<T>> getFolders() {
|
public IStorage<IStorage<T>> getFolders() {
|
||||||
return subfolders == null ? super.getFolders() : subfolders;
|
return subfolders;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user