<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Forgot to include the link to gist:&nbsp;<a href="https://gist.github.com/TadeasKriz/499e8ae51102887a38ae">https://gist.github.com/TadeasKriz/499e8ae51102887a38ae</a><br><div apple-content-edited="true">
<div>—</div><div>Tadeas Kriz</div><div><a href="mailto:tkriz@redhat.com">tkriz@redhat.com</a></div>
</div>
<br><div><div>On 08 Jan 2014, at 11:51, Tadeas Kriz &lt;<a href="mailto:tkriz@redhat.com">tkriz@redhat.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hey everyone,<br><br>I’ve been recently going through the DataManager API in aerogear-android. In this email, I’d like to suggest addiction of two method (or possibly three) into the `Store&lt;T&gt;` interface. These would be:<br><br>```java<br>/**<br> * If store is open, it can be read or written to.<br> */<br>boolean isOpen();<br><br>/**<br> * Opens store in current thread (blocking).<br> */<br>Store&lt;T&gt; open();<br><br>/**<br> * Opens store in background thread and then callback#onSuccess is called.<br> */<br>void open(Callback&lt;Store&lt;T&gt;&gt; callback);<br>```<br><br>From my point of view, this makes sense to be in the `Store&lt;T&gt;` so I can switch between stores easily during development with no need to change other code. Also, if `read` or `write` operations are done with closed store, there are two possible workflows. First one is, that I’d fail and throw an exception. Second (and for me a preferred one) is, that all those methods would internally check if the store is open and if not, they’d call the `open` method. This also leads me to another API change for `Store&lt;T&gt;`.<br><br>```java<br>/**<br> * Reads all the data from the underlying storage system asynchronously.<br> */<br>void readAll(Callback&lt;Collection&lt;T&gt;&gt; callback);<br><br>/**<br> * Reads a specific object/record from the underlying storage system asynchronously.<br> */<br>void read(Serializable id, Callback&lt;T&gt; callback);<br><br>/**<br> * Search for objects/records from the underlying storage system asynchronously.<br> */<br>void readWithFilter(ReadFilter filter, Callback&lt;List&lt;T&gt;&gt; callback);<br><br>/**<br> * Saves the given object in the underlying storage system asynchronously.<br> */<br>void save(T item, Callback&lt;Void&gt; callback);<br><br>/**<br> * Resets the entire storage system asynchronously.<br> */<br>void reset(Callback&lt;Void&gt; callback);<br><br>/**<br> * Removes a specific object/record from the underlying storage system asynchronously.<br> */<br>void remove(Serializable id, Callback&lt;Void&gt; callback);<br><br>/**<br> * Checks if the storage system contains no stored elements asynchronously.<br> */<br>void isEmpty(Callback&lt;Boolean&gt; callback);<br>```<br><br>That’s right, async methods for easy access to the storage from background thread, without the pain of writing it myself (for example, it makes no sense if I want to just call `store.save(..)` and I’d have to write all the `AsyncTask` boilerplate).<br><br>So, what do you think?<br><br>PS: You can find the whole text with highlighted syntax here: <br><br>—<br>Tadeas Kriz<br><a href="mailto:tkriz@redhat.com">tkriz@redhat.com</a><br><br></blockquote></div><br></body></html>