diff --git a/api/src/main/java/com/todoroo/andlib/data/Callback.java b/api/src/main/java/com/todoroo/andlib/data/Callback.java new file mode 100644 index 000000000..7956c5a2b --- /dev/null +++ b/api/src/main/java/com/todoroo/andlib/data/Callback.java @@ -0,0 +1,5 @@ +package com.todoroo.andlib.data; + +public interface Callback { + void apply(T entry); +} diff --git a/api/src/main/java/com/todoroo/andlib/data/DatabaseDao.java b/api/src/main/java/com/todoroo/andlib/data/DatabaseDao.java index 27321d981..41c0db88f 100644 --- a/api/src/main/java/com/todoroo/andlib/data/DatabaseDao.java +++ b/api/src/main/java/com/todoroo/andlib/data/DatabaseDao.java @@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -86,6 +87,30 @@ public class DatabaseDao { // --- dao methods + public List toList(Query query) { + final List result = new ArrayList<>(); + query(new Callback() { + @Override + public void apply(TYPE entry) { + result.add(entry); + } + }, query); + return result; + } + + public void query(Callback callback, Query query) { + TodorooCursor cursor = query(query); + try { + for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { + callback.apply(cursorConstructor.newInstance(cursor)); + } + } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) { + throw new RuntimeException(e); + } finally { + cursor.close(); + } + } + /** * Construct a query with SQL DSL objects */