|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 package org.mozilla.gecko.sync.repositories.delegates; |
|
6 |
|
7 import java.util.concurrent.ExecutorService; |
|
8 |
|
9 import org.mozilla.gecko.sync.repositories.RepositorySession; |
|
10 import org.mozilla.gecko.sync.repositories.RepositorySessionBundle; |
|
11 |
|
12 public class DeferredRepositorySessionFinishDelegate implements |
|
13 RepositorySessionFinishDelegate { |
|
14 protected final ExecutorService executor; |
|
15 protected final RepositorySessionFinishDelegate inner; |
|
16 |
|
17 public DeferredRepositorySessionFinishDelegate(RepositorySessionFinishDelegate inner, |
|
18 ExecutorService executor) { |
|
19 this.executor = executor; |
|
20 this.inner = inner; |
|
21 } |
|
22 |
|
23 @Override |
|
24 public void onFinishSucceeded(final RepositorySession session, |
|
25 final RepositorySessionBundle bundle) { |
|
26 executor.execute(new Runnable() { |
|
27 @Override |
|
28 public void run() { |
|
29 inner.onFinishSucceeded(session, bundle); |
|
30 } |
|
31 }); |
|
32 } |
|
33 |
|
34 @Override |
|
35 public void onFinishFailed(final Exception ex) { |
|
36 executor.execute(new Runnable() { |
|
37 @Override |
|
38 public void run() { |
|
39 inner.onFinishFailed(ex); |
|
40 } |
|
41 }); |
|
42 } |
|
43 |
|
44 @Override |
|
45 public RepositorySessionFinishDelegate deferredFinishDelegate(ExecutorService newExecutor) { |
|
46 if (newExecutor == executor) { |
|
47 return this; |
|
48 } |
|
49 throw new IllegalArgumentException("Can't re-defer this delegate."); |
|
50 } |
|
51 } |