<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;">Just to get some discussions going and have something to talk about I’ve drafted some API, so what do you think?<div><br></div><div><pre class="line-pre" style="font-family: Consolas, 'Liberation Mono', Courier, monospace; line-height: 16px; width: 1008px; margin-top: 0px; margin-bottom: 0px; padding: 0px; background-color: rgb(255, 255, 255); position: static; z-index: auto;"><div class="line" id="file-sync-java-LC1"><span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// [option 1 fully automatic we create a pipe and add the posibilty to add a store for failover and sync just happens at on- and offline events]</span></div><div class="line" id="file-sync-java-LC2"><span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// and because merging can fail users can add a conflict handlers</span></div><div class="line" id="file-sync-java-LC3">&nbsp;</div><div class="line" id="file-sync-java-LC4"><span class="n" style="color: rgb(51, 51, 51);">Builder</span> <span class="n" style="color: rgb(51, 51, 51);">builder</span> <span class="o" style="font-weight: bold;">=</span> <span class="n" style="color: rgb(51, 51, 51);">Builder</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">createPipe</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">pipeConfig</span><span class="o" style="font-weight: bold;">).</span><span class="na" style="color: teal;">addFailoverStore</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">storeConfig</span><span class="o" style="font-weight: bold;">);</span></div><div class="line" id="file-sync-java-LC5"><span class="n" style="color: rgb(51, 51, 51);">Pipe</span><span class="o" style="font-weight: bold;">&lt;</span><span class="n" style="color: rgb(51, 51, 51);">Car</span><span class="o" style="font-weight: bold;">&gt;</span> <span class="n" style="color: rgb(51, 51, 51);">pipe</span> <span class="o" style="font-weight: bold;">=</span> <span class="n" style="color: rgb(51, 51, 51);">builder</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">pipe</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">Car</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">class</span><span class="o" style="font-weight: bold;">);</span></div><div class="line" id="file-sync-java-LC6">&nbsp;</div><div class="line" id="file-sync-java-LC7"><span class="n" style="color: rgb(51, 51, 51);">pipe</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">addConfictHandler</span><span class="o" style="font-weight: bold;">(</span><span class="k" style="font-weight: bold;">new</span> <span class="n" style="color: rgb(51, 51, 51);">ConflictHandler</span><span class="o" style="font-weight: bold;">()</span> <span class="o" style="font-weight: bold;">{</span></div><div class="line" id="file-sync-java-LC8">        <span class="kd" style="font-weight: bold;">public</span> <span class="kt" style="color: rgb(68, 85, 136); font-weight: bold;">void</span> <span class="nf" style="color: rgb(153, 0, 0); font-weight: bold;">conflict</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">Field</span> <span class="n" style="color: rgb(51, 51, 51);">originalField</span><span class="o" style="font-weight: bold;">,</span> <span class="n" style="color: rgb(51, 51, 51);">Field</span> <span class="n" style="color: rgb(51, 51, 51);">newField</span><span class="o" style="font-weight: bold;">)</span> <span class="o" style="font-weight: bold;">{</span></div><div class="line" id="file-sync-java-LC9">                <span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// user interaction</span></div><div class="line" id="file-sync-java-LC10">        <span class="o" style="font-weight: bold;">}</span></div><div class="line" id="file-sync-java-LC11"><span class="o" style="font-weight: bold;">});</span></div><div class="line" id="file-sync-java-LC12">&nbsp;</div><div class="line" id="file-sync-java-LC13"><span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// [option 2 explicit let the user specify when to sync and what to sync]</span></div><div class="line" id="file-sync-java-LC14"><span class="n" style="color: rgb(51, 51, 51);">SyncedPipe</span> <span class="n" style="color: rgb(51, 51, 51);">pipe</span> <span class="o" style="font-weight: bold;">=</span> <span class="n" style="color: rgb(51, 51, 51);">SyncPipeBuilder</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">build</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">options</span><span class="o" style="font-weight: bold;">);</span> <span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// SyncPipe Store and Pipe togheter</span></div><div class="line" id="file-sync-java-LC15">&nbsp;</div><div class="line" id="file-sync-java-LC16"><span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// or we only use a store to sync and tell the sync manager where to sync to</span></div><div class="line" id="file-sync-java-LC17"><span class="n" style="color: rgb(51, 51, 51);">SyncManager</span> <span class="n" style="color: rgb(51, 51, 51);">syncManager</span> <span class="o" style="font-weight: bold;">=</span> <span class="k" style="font-weight: bold;">new</span> <span class="n" style="color: rgb(51, 51, 51);">SyncManger</span><span class="o" style="font-weight: bold;">();</span></div><div class="line" id="file-sync-java-LC18"><span class="n" style="color: rgb(51, 51, 51);">syncManger</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">filter</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">readFilter</span><span class="o" style="font-weight: bold;">);</span> <span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// maybe we don't want to sync all data but just some part</span></div><div class="line" id="file-sync-java-LC19">&nbsp;</div><div class="line" id="file-sync-java-LC20"><span class="n" style="color: rgb(51, 51, 51);">syncManager</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">addConnectionHandler</span><span class="o" style="font-weight: bold;">(</span><span class="k" style="font-weight: bold;">new</span> <span class="n" style="color: rgb(51, 51, 51);">ConnectionHandler</span><span class="o" style="font-weight: bold;">()</span> <span class="o" style="font-weight: bold;">{</span></div><div class="line" id="file-sync-java-LC21">        <span class="kd" style="font-weight: bold;">public</span> <span class="kt" style="color: rgb(68, 85, 136); font-weight: bold;">void</span> <span class="nf" style="color: rgb(153, 0, 0); font-weight: bold;">onConnection</span><span class="o" style="font-weight: bold;">()</span> <span class="o" style="font-weight: bold;">{</span></div><div class="line" id="file-sync-java-LC22">          <span class="n" style="color: rgb(51, 51, 51);">syncManger</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">sync</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">pipe</span><span class="o" style="font-weight: bold;">);</span></div><div class="line" id="file-sync-java-LC23">        <span class="o" style="font-weight: bold;">}</span></div><div class="line" id="file-sync-java-LC24"><span class="o" style="font-weight: bold;">});</span></div><div class="line" id="file-sync-java-LC25">&nbsp;</div><div class="line" id="file-sync-java-LC26"><span class="n" style="color: rgb(51, 51, 51);">syncManger</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: teal;">addConfictHandler</span><span class="o" style="font-weight: bold;">(</span><span class="k" style="font-weight: bold;">new</span> <span class="n" style="color: rgb(51, 51, 51);">ConflictHandler</span><span class="o" style="font-weight: bold;">()</span> <span class="o" style="font-weight: bold;">{</span></div><div class="line" id="file-sync-java-LC27">        <span class="kd" style="font-weight: bold;">public</span> <span class="kt" style="color: rgb(68, 85, 136); font-weight: bold;">void</span> <span class="nf" style="color: rgb(153, 0, 0); font-weight: bold;">conflict</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(51, 51, 51);">Field</span> <span class="n" style="color: rgb(51, 51, 51);">original</span><span class="o" style="font-weight: bold;">,</span> <span class="n" style="color: rgb(51, 51, 51);">Field</span> <span class="k" style="font-weight: bold;">new</span><span class="o" style="font-weight: bold;">)</span> <span class="o" style="font-weight: bold;">{</span></div><div class="line" id="file-sync-java-LC28">                <span class="c1" style="color: rgb(153, 153, 136); font-style: italic;">// user interaction</span></div><div class="line" id="file-sync-java-LC29">        <span class="o" style="font-weight: bold;">}</span></div><div class="line" id="file-sync-java-LC30"><span class="o" style="font-weight: bold;">});</span></div></pre><div><br></div></div><div>Cheers,</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Erik Jan</div></body></html>