diff options
Diffstat (limited to 'main/src/cgeo/geocaching/utils/LazyInitializedList.java')
| -rw-r--r-- | main/src/cgeo/geocaching/utils/LazyInitializedList.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/utils/LazyInitializedList.java b/main/src/cgeo/geocaching/utils/LazyInitializedList.java new file mode 100644 index 0000000..6061394 --- /dev/null +++ b/main/src/cgeo/geocaching/utils/LazyInitializedList.java @@ -0,0 +1,68 @@ +package cgeo.geocaching.utils; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public abstract class LazyInitializedList<ElementType> implements Iterable<ElementType> { + + private List<ElementType> list; + + public List<ElementType> get() { + initializeList(); + return list; + } + + private void initializeList() { + if (list == null) { + list = loadFromDatabase(); + } + } + + protected abstract List<ElementType> loadFromDatabase(); + + public void add(final ElementType element) { + initializeList(); + list.add(element); + } + + public void prepend(final ElementType element) { + initializeList(); + list.add(0, element); + } + + public void set(final List<ElementType> elements) { + list = new ArrayList<ElementType>(elements); + } + + public boolean isEmpty() { + initializeList(); + return list.isEmpty(); + } + + public ElementType remove(final int index) { + initializeList(); + return list.remove(index); + } + + public void add(int index, final ElementType element) { + initializeList(); + list.add(index, element); + } + + public int size() { + initializeList(); + return list.size(); + } + + @Override + public Iterator<ElementType> iterator() { + initializeList(); + return list.iterator(); + } + + public ElementType get(final int index) { + initializeList(); + return list.get(index); + } +} |
