Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: tools/immic/lib/src/resources/java/immi/ImmiRoot.java

Issue 2035023003: Remove service-compiler related code. (Closed) Base URL: git@github.com:dartino/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE.md file.
4
5 // Generated file. Do not edit.
6
7 package immi;
8
9 import java.util.concurrent.ExecutorService;
10 import java.util.concurrent.Executors;
11
12 import dartino.ImmiServiceLayer;
13 import dartino.ImmiServiceLayer.RefreshCallback;
14 import dartino.PatchData;
15
16 public final class ImmiRoot {
17
18 // Public interface.
19
20 public void refresh() {
21 refreshThread.submit(requestRefresh);
22 }
23
24 public void reset() {
25 refreshThread.submit(requestReset);
26 }
27
28 // Package private implementation.
29
30 // For construction see ImmiService.registerPresenter.
31 ImmiRoot(int id, AnyNodePresenter presenter) {
32 assert id > 0;
33 this.id = id;
34 this.presenter = presenter;
35 }
36
37 void dispatch(Runnable event) {
38 event.run();
39 // TODO(zerny): Consider other strategies than eagerly requesting a refresh
40 // on each dispatch.
41 refresh();
42 }
43
44 // Private implementation.
45
46 // No assumptions are made on which thread patch application is performed on.
47 // Initiating a refresh is controlled by requestRefresh and finishRefresh belo w.
48 // Single thread executor guaranties mutual exclusion of requestRefresh and fi nishRefresh.
49 private RefreshCallback applyPatch = new RefreshCallback() {
50 @Override
51 public void handle(PatchData data) {
52 if (data.isNode()) {
53 AnyNodePatch patch = new AnyNodePatch(data.getNode(), previous, ImmiRoot .this);
54 previous = patch.getCurrent();
55 patch.applyTo(presenter);
56 }
57 refreshThread.submit(finishRefresh);
58 }
59 };
60
61 private Runnable requestRefresh = new Runnable() {
62 @Override
63 public void run() {
64 if (refreshPending) {
65 // Request a refresh once the pending refresh finishes.
66 refreshRequired = true;
67 } else {
68 // Initiate a new refresh.
69 refreshPending = true;
70 ImmiServiceLayer.refreshAsync(id, applyPatch);
71 }
72 }
73 };
74
75 private Runnable finishRefresh = new Runnable() {
76 @Override
77 public void run() {
78 assert refreshPending;
79 if (refreshRequired) {
80 // A refresh request is outstanding so immediately initiate a new refres h.
81 refreshRequired = false;
82 ImmiServiceLayer.refreshAsync(id, applyPatch);
83 } else {
84 refreshPending = false;
85 }
86 }
87 };
88
89 // To guarantee order of refresh and reset we schedule reset on the same execu tor.
90 private Runnable requestReset = new Runnable() {
91 @Override
92 public void run() {
93 ImmiServiceLayer.resetAsync(id, null);
94 }
95 };
96
97 private int id;
98 private AnyNodePresenter presenter;
99 private AnyNode previous;
100 private boolean refreshPending = false;
101 private boolean refreshRequired = false;
102 private final static ExecutorService refreshThread = Executors.newSingleThread Executor();
103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698