1
1
package fi .helsinki .cs .tmc .actions ;
2
2
3
+ import com .google .common .util .concurrent .FutureCallback ;
4
+ import com .google .common .util .concurrent .Futures ;
5
+ import com .google .common .util .concurrent .ListenableFuture ;
3
6
import hy .tmc .core .domain .Course ;
4
- import fi . helsinki . cs . tmc .data .Review ;
7
+ import hy . tmc .core . domain .Review ;
5
8
import fi .helsinki .cs .tmc .model .CourseDb ;
9
+ import fi .helsinki .cs .tmc .model .NBTmcSettings ;
6
10
import fi .helsinki .cs .tmc .model .ReviewDb ;
7
11
import fi .helsinki .cs .tmc .model .ServerAccess ;
12
+ import fi .helsinki .cs .tmc .model .TmcCoreSingleton ;
8
13
import fi .helsinki .cs .tmc .ui .ConvenientDialogDisplayer ;
9
14
import fi .helsinki .cs .tmc .utilities .BgTask ;
10
15
import fi .helsinki .cs .tmc .utilities .BgTaskListener ;
16
+ import hy .tmc .core .exceptions .TmcCoreException ;
11
17
import java .awt .event .ActionEvent ;
12
18
import java .awt .event .ActionListener ;
13
19
import java .util .List ;
18
24
import org .openide .awt .ActionReference ;
19
25
import org .openide .awt .ActionReferences ;
20
26
import org .openide .awt .ActionRegistration ;
27
+ import org .openide .util .Exceptions ;
21
28
import org .openide .util .NbBundle ;
22
29
23
30
@ ActionID (category = "TMC" ,
24
- id = "fi.helsinki.cs.tmc.actions.CheckForNewReviews" )
31
+ id = "fi.helsinki.cs.tmc.actions.CheckForNewReviews" )
25
32
@ ActionRegistration (displayName = "#CTL_CheckForNewReviews" )
26
33
@ ActionReferences ({
27
34
@ ActionReference (path = "Menu/TM&C" , position = -40 )
28
35
})
29
36
@ NbBundle .Messages ("CTL_CheckForNewReviews=Check for new code &reviews" )
30
37
public class CheckForNewReviews implements ActionListener , Runnable {
38
+
31
39
private static final Logger log = Logger .getLogger (CheckForNewReviews .class .getName ());
32
-
40
+
33
41
private static CheckForNewReviews instance ;
34
-
42
+
35
43
public static void startTimer () {
36
44
if (instance == null ) {
37
45
instance = new CheckForNewReviews (true , false , false );
38
- int interval = 20 * 60 * 1000 ; // 20 minutes
46
+ int interval = 20 * 60 * 1000 ; // 20 minutes
39
47
javax .swing .Timer timer = new javax .swing .Timer (interval , instance );
40
48
timer .setRepeats (true );
41
49
timer .start ();
@@ -44,15 +52,15 @@ public static void startTimer() {
44
52
log .warning ("CheckForNewReviews.startTimer() called twice" );
45
53
}
46
54
}
47
-
55
+
48
56
private ServerAccess serverAccess ;
49
57
private CourseDb courseDb ;
50
58
private ReviewDb reviewDb ;
51
59
private ConvenientDialogDisplayer dialogs ;
52
60
private boolean beQuiet ;
53
61
private boolean resetNotifications ;
54
62
private boolean notifyAboutNoNewReviews ;
55
-
63
+
56
64
CheckForNewReviews () {
57
65
this (false , true , true );
58
66
}
@@ -71,13 +79,13 @@ public static void startTimer() {
71
79
public void actionPerformed (ActionEvent e ) {
72
80
run ();
73
81
}
74
-
82
+
75
83
@ Override
76
84
public void run () {
77
85
if (resetNotifications ) {
78
86
reviewDb .forgetReviewsNotifiedAbout ();
79
87
}
80
-
88
+
81
89
Course course = courseDb .getCurrentCourse ();
82
90
if (course == null ) {
83
91
if (!beQuiet ) {
@@ -88,28 +96,43 @@ public void run() {
88
96
if (course .getReviewsUrl () == null ) {
89
97
return ;
90
98
}
91
-
92
- BgTask .start ("Checking for code reviews" , serverAccess .getDownloadingReviewListTask (course ), new BgTaskListener <List <Review >>() {
93
- @ Override
94
- public void bgTaskReady (List <Review > result ) {
95
- boolean newReviews = reviewDb .setReviews (result );
96
- if (!newReviews && notifyAboutNoNewReviews ) {
97
- dialogs .displayMessage ("You have no unread code reviews." );
99
+ getReviews (course );
100
+
101
+ }
102
+
103
+ private void getReviews (Course course ){
104
+ try {
105
+ ListenableFuture <List <Review >> reviews = TmcCoreSingleton .getInstance ().getNewReviews (course , NBTmcSettings .getDefault ());
106
+ Futures .addCallback (reviews , new FutureCallback <List <Review >>() {
107
+
108
+ @ Override
109
+ public void onSuccess (List <Review > v ) {
110
+ success (v );
98
111
}
99
- }
100
112
101
- @ Override
102
- public void bgTaskFailed (final Throwable ex ) {
103
- final String msg = "Failed to check for code reviews" ;
104
- log .log (Level .INFO , msg , ex );
105
- if (!beQuiet ) {
106
- dialogs .displayError (msg , ex );
113
+ @ Override
114
+ public void onFailure (Throwable thrwbl ) {
115
+ fail (thrwbl );
107
116
}
108
- }
109
117
110
- @ Override
111
- public void bgTaskCancelled () {
112
- }
113
- });
118
+ });
119
+ } catch (TmcCoreException ex ) {
120
+ Exceptions .printStackTrace (ex );
121
+ }
122
+ }
123
+
124
+ private void success (List <Review > list ) {
125
+ boolean newReviews = reviewDb .setReviews (list );
126
+ if (!newReviews && notifyAboutNoNewReviews ) {
127
+ dialogs .displayMessage ("You have no unread code reviews." );
128
+ }
129
+ }
130
+
131
+ private void fail (Throwable thrwbl ) {
132
+ final String msg = "Failed to check for code reviews" ;
133
+ log .log (Level .INFO , msg , thrwbl );
134
+ if (!beQuiet ) {
135
+ dialogs .displayError (msg , thrwbl );
136
+ }
114
137
}
115
138
}
0 commit comments