Revert Max's revert

This commit is contained in:
drdev
2014-01-18 00:31:45 +00:00
parent 22b78255bb
commit e9ddf8400b
2 changed files with 23 additions and 13 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}