aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils/LazyInitializedList.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/utils/LazyInitializedList.java')
-rw-r--r--main/src/cgeo/geocaching/utils/LazyInitializedList.java68
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);
+ }
+}