From e9ddf8400b096ebfac7fc1d3891a944bba622acf Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 18 Jan 2014 00:31:45 +0000 Subject: [PATCH] Revert Max's revert --- .../java/forge/util/storage/StorageBase.java | 34 ++++++++++++------- .../storage/StorageImmediatelySerialized.java | 2 +- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/forge-core/src/main/java/forge/util/storage/StorageBase.java b/forge-core/src/main/java/forge/util/storage/StorageBase.java index 03e5afa3347..9b5bfb40578 100644 --- a/forge-core/src/main/java/forge/util/storage/StorageBase.java +++ b/forge-core/src/main/java/forge/util/storage/StorageBase.java @@ -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 implements IStorage { protected final Map map; - - public final static StorageBase emptyMap = new StorageBase("Empty", new HashMap()); - public final String name; + private final String name; public StorageBase(final String name, final IItemReader io) { this.name = name; @@ -64,8 +61,20 @@ public class StorageBase implements IStorage { } @Override - public Iterator iterator() { - return this.map.values().iterator(); + public final Iterator iterator() { + final IStorage> 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 items = new ArrayList(); + for (IStorage 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 implements IStorage { @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 condition) { - return Iterables.tryFind(map.values(), condition).orNull(); + return Iterables.tryFind(this, condition).orNull(); } @Override @@ -93,11 +106,9 @@ public class StorageBase implements IStorage { 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> getFolders() { - return (IStorage>) emptyMap; + return null; //no nested folders unless getFolders() overridden in a derived class } /* (non-Javadoc) @@ -105,7 +116,6 @@ public class StorageBase implements IStorage { */ @Override public String getName() { - // TODO Auto-generated method stub return name; } } diff --git a/forge-core/src/main/java/forge/util/storage/StorageImmediatelySerialized.java b/forge-core/src/main/java/forge/util/storage/StorageImmediatelySerialized.java index ca3ab2a6d7a..154ddf15d95 100644 --- a/forge-core/src/main/java/forge/util/storage/StorageImmediatelySerialized.java +++ b/forge-core/src/main/java/forge/util/storage/StorageImmediatelySerialized.java @@ -87,6 +87,6 @@ public class StorageImmediatelySerialized extends StorageBase { */ @Override public IStorage> getFolders() { - return subfolders == null ? super.getFolders() : subfolders; + return subfolders; } }