@Override public void deleteAll() { cache.removeAll(); writer.deleteAll(); }
@Override public boolean deleteDocumentFile(DatabaseDocument<T> d, String fileName) { return writer.deleteDocumentFile(d, fileName); }
@Override public boolean insert(DatabaseDocument<T> d) { return writer.insert(d); }
@Override public Collection<DatabaseDocument<T>> getAndTag(DatabaseQuery<T> query, int n, String... tags) { Collection<DatabaseDocument<T>> list = new ArrayList<DatabaseDocument<T>>(); Collection<DatabaseDocument<T>> c = cache.getAndTag(query, n, tags); if (c != null) { list.addAll(c); } if (list.size() == 0) { for (String t : tags) { query.requireNotFetchedByStage(t); } list = writer.getAndTag(query, n, addCacheTag(tags)); for (DatabaseDocument<T> d : list) { for (String t : tags) { d.setFetchedBy(t, new Date()); } } cache.add(list); } return list; }
@Override public void prepare() { writer.prepare(); cache.prepare(); }
@Override public void delete(DatabaseDocument<T> d) { cache.remove(d.getID()); writer.delete(d); }
@Override public boolean markProcessed(DatabaseDocument<T> d, String stage) { DatabaseDocument<T> cached = cache.getDocumentById(d.getID()); if (cached != null) { d.putAll(cached); cache.remove(d.getID()); } if (writer.markProcessed(d, stage)) { return true; } return false; }
@Override public boolean markFailed(DatabaseDocument<T> d, String stage) { DatabaseDocument<T> cached = cache.getDocumentById(d.getID()); d.putAll(cached); cache.remove(d.getID()); if (writer.markFailed(d, stage)) { return true; } return false; }
@Override public boolean markDiscarded(DatabaseDocument<T> d, String stage) { DatabaseDocument<T> cached = cache.getDocumentById(d.getID()); d.putAll(cached); cache.remove(d.getID()); if (writer.markDiscarded(d, stage)) { return true; } return false; }
@Override public boolean markPending(DatabaseDocument<T> d, String stage) { DatabaseDocument<T> cached = cache.getDocumentById(d.getID()); d.putAll(cached); cache.remove(d.getID()); return writer.markPending(d, stage); }
@Override public DatabaseDocument<T> getAndTag(DatabaseQuery<T> query, String... tags) { DatabaseDocument<T> doc = cache.getAndTag(query, tags); if (doc == null) { for (String t : tags) { query.requireNotFetchedByStage(t); } doc = writer.getAndTag(query, addCacheTag(tags)); if (doc != null) { for (String t : tags) { doc.setFetchedBy(t, new Date()); } cache.add(doc); } } return getCopy(doc); }
@Override public boolean insert(DatabaseDocument<T> d, List<DocumentFile<T>> attachments) { return writer.insert(d, attachments); }