michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: package org.mozilla.gecko.background.sync.helpers; michael@0: michael@0: import java.util.concurrent.ExecutorService; michael@0: michael@0: import org.mozilla.gecko.background.common.log.Logger; michael@0: import org.mozilla.gecko.sync.repositories.RepositorySession; michael@0: import org.mozilla.gecko.sync.repositories.RepositorySessionBundle; michael@0: import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate; michael@0: michael@0: public class DefaultFinishDelegate extends DefaultDelegate implements RepositorySessionFinishDelegate { michael@0: michael@0: @Override michael@0: public void onFinishFailed(Exception ex) { michael@0: performNotify("Finish failed", ex); michael@0: } michael@0: michael@0: @Override michael@0: public void onFinishSucceeded(RepositorySession session, RepositorySessionBundle bundle) { michael@0: performNotify("Hit default finish delegate", null); michael@0: } michael@0: michael@0: @Override michael@0: public RepositorySessionFinishDelegate deferredFinishDelegate(final ExecutorService executor) { michael@0: final RepositorySessionFinishDelegate self = this; michael@0: michael@0: Logger.info("DefaultFinishDelegate", "Deferring…"); michael@0: return new RepositorySessionFinishDelegate() { michael@0: @Override michael@0: public void onFinishSucceeded(final RepositorySession session, michael@0: final RepositorySessionBundle bundle) { michael@0: Logger.info("DefaultFinishDelegate", "Executing onFinishSucceeded Runnable…"); michael@0: executor.execute(new Runnable() { michael@0: @Override michael@0: public void run() { michael@0: self.onFinishSucceeded(session, bundle); michael@0: }}); michael@0: } michael@0: michael@0: @Override michael@0: public void onFinishFailed(final Exception ex) { michael@0: executor.execute(new Runnable() { michael@0: @Override michael@0: public void run() { michael@0: self.onFinishFailed(ex); michael@0: }}); michael@0: } michael@0: michael@0: @Override michael@0: public RepositorySessionFinishDelegate deferredFinishDelegate(ExecutorService newExecutor) { michael@0: if (newExecutor == executor) { michael@0: return this; michael@0: } michael@0: throw new IllegalArgumentException("Can't re-defer this delegate."); michael@0: } michael@0: }; michael@0: } michael@0: }