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

View File

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