1111import fi .helsinki .cs .tmc .model .TmcCoreSingleton ;
1212import fi .helsinki .cs .tmc .ui .ConvenientDialogDisplayer ;
1313import fi .helsinki .cs .tmc .core .exceptions .TmcCoreException ;
14+ import fi .helsinki .cs .tmc .utilities .BgTask ;
15+ import fi .helsinki .cs .tmc .utilities .BgTaskListener ;
16+ import fi .helsinki .cs .tmc .utilities .CancellableCallable ;
1417import java .awt .event .ActionEvent ;
1518import java .awt .event .ActionListener ;
1619import java .util .List ;
@@ -79,7 +82,6 @@ public void actionPerformed(ActionEvent e) {
7982
8083 @ Override
8184 public void run () {
82- // TODO(jamo): use bg task
8385 if (resetNotifications ) {
8486 reviewDb .forgetReviewsNotifiedAbout ();
8587 }
@@ -94,50 +96,40 @@ public void run() {
9496 if (course .getReviewsUrl () == null ) {
9597 return ;
9698 }
97- getReviews (course );
98-
99- }
100-
101- private void getReviews (Course course ){
102- final ProgressHandle progress = ProgressHandleFactory .createHandle ("Checking for code reviews" );
103- progress .start ();
104- try {
105- ListenableFuture <List <Review >> reviews = TmcCoreSingleton .getInstance ()
106- .getNewReviews (course );
107- Futures .addCallback (reviews , new FutureCallback <List <Review >>() {
108-
109- @ Override
110- public void onSuccess (List <Review > v ) {
111- success (v );
112- progress .finish ();
113-
99+ BgTaskListener bgTaskListener = new BgTaskListener <List <Review >>() {
100+ @ Override
101+ public void bgTaskReady (List <Review > result ) {
102+ boolean newReviews = reviewDb .setReviews (result );
103+ if (!newReviews && notifyAboutNoNewReviews ) {
104+ dialogs .displayMessage ("You have no unread code reviews." );
114105 }
106+ }
115107
116- @ Override
117- public void onFailure (Throwable thrwbl ) {
118- fail (thrwbl );
119- progress .finish ();
108+ @ Override
109+ public void bgTaskFailed (final Throwable ex ) {
110+ final String msg = "Failed to check for code reviews" ;
111+ log .log (Level .INFO , msg , ex );
112+ if (!beQuiet ) {
113+ dialogs .displayError (msg , ex );
120114 }
115+ }
121116
122- });
123- } catch (TmcCoreException ex ) {
124- progress .finish ();
125- Exceptions .printStackTrace (ex );
126- }
127- }
128-
129- private void success (List <Review > list ) {
130- boolean newReviews = reviewDb .setReviews (list );
131- if (!newReviews && notifyAboutNoNewReviews ) {
132- dialogs .displayMessage ("You have no unread code reviews." );
133- }
134- }
117+ @ Override
118+ public void bgTaskCancelled () {
119+ }
120+ };
121+ BgTask .start ("Checking for code reviews" , new CancellableCallable <List <Review >>() {
122+ private ListenableFuture <List <Review >> lf ;
123+ @ Override
124+ public List <Review > call () throws Exception {
125+ lf = TmcCoreSingleton .getInstance ().getNewReviews (courseDb .getCurrentCourse ());
126+ return lf .get ();
127+ }
135128
136- private void fail (Throwable thrwbl ) {
137- final String msg = "Failed to check for code reviews" ;
138- log .log (Level .INFO , msg , thrwbl );
139- if (!beQuiet ) {
140- dialogs .displayError (msg , thrwbl );
141- }
129+ @ Override
130+ public boolean cancel () {
131+ return lf .cancel (true );
132+ }
133+ }, bgTaskListener );
142134 }
143135}
0 commit comments