mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 02:08:00 +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.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -39,9 +38,7 @@ import forge.util.IItemReader;
|
||||
*/
|
||||
public class StorageBase<T> implements IStorage<T> {
|
||||
protected final Map<String, T> map;
|
||||
|
||||
public final static StorageBase<?> emptyMap = new StorageBase<Object>("Empty", new HashMap<String, Object>());
|
||||
public final String name;
|
||||
private final String name;
|
||||
|
||||
public StorageBase(final String name, final IItemReader<T> io) {
|
||||
this.name = name;
|
||||
@@ -64,8 +61,20 @@ public class StorageBase<T> implements IStorage<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<T> iterator() {
|
||||
return this.map.values().iterator();
|
||||
public final Iterator<T> 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
|
||||
@@ -75,12 +84,16 @@ public class StorageBase<T> implements IStorage<T> {
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return this.map.size();
|
||||
int size = this.map.size();
|
||||
if (this.getFolders() != null) {
|
||||
size += this.getFolders().size();
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T find(Predicate<T> condition) {
|
||||
return Iterables.tryFind(map.values(), condition).orNull();
|
||||
return Iterables.tryFind(this, condition).orNull();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -93,11 +106,9 @@ public class StorageBase<T> implements IStorage<T> {
|
||||
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
|
||||
public IStorage<IStorage<T>> getFolders() {
|
||||
return (IStorage<IStorage<T>>) emptyMap;
|
||||
return null; //no nested folders unless getFolders() overridden in a derived class
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -105,7 +116,6 @@ public class StorageBase<T> implements IStorage<T> {
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
// TODO Auto-generated method stub
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +87,6 @@ public class StorageImmediatelySerialized<T> extends StorageBase<T> {
|
||||
*/
|
||||
@Override
|
||||
public IStorage<IStorage<T>> getFolders() {
|
||||
return subfolders == null ? super.getFolders() : subfolders;
|
||||
return subfolders;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user