Skip to content

Commit 5232a93

Browse files
author
Toivanen Pihla I
committed
Code review & imports changed to TmcCore Review
1 parent 5b47d2b commit 5232a93

File tree

7 files changed

+127
-60
lines changed

7 files changed

+127
-60
lines changed
Lines changed: 51 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package fi.helsinki.cs.tmc.actions;
22

3+
import com.google.common.util.concurrent.FutureCallback;
4+
import com.google.common.util.concurrent.Futures;
5+
import com.google.common.util.concurrent.ListenableFuture;
36
import hy.tmc.core.domain.Course;
4-
import fi.helsinki.cs.tmc.data.Review;
7+
import hy.tmc.core.domain.Review;
58
import fi.helsinki.cs.tmc.model.CourseDb;
9+
import fi.helsinki.cs.tmc.model.NBTmcSettings;
610
import fi.helsinki.cs.tmc.model.ReviewDb;
711
import fi.helsinki.cs.tmc.model.ServerAccess;
12+
import fi.helsinki.cs.tmc.model.TmcCoreSingleton;
813
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
914
import fi.helsinki.cs.tmc.utilities.BgTask;
1015
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
16+
import hy.tmc.core.exceptions.TmcCoreException;
1117
import java.awt.event.ActionEvent;
1218
import java.awt.event.ActionListener;
1319
import java.util.List;
@@ -18,24 +24,26 @@
1824
import org.openide.awt.ActionReference;
1925
import org.openide.awt.ActionReferences;
2026
import org.openide.awt.ActionRegistration;
27+
import org.openide.util.Exceptions;
2128
import org.openide.util.NbBundle;
2229

2330
@ActionID(category = "TMC",
24-
id = "fi.helsinki.cs.tmc.actions.CheckForNewReviews")
31+
id = "fi.helsinki.cs.tmc.actions.CheckForNewReviews")
2532
@ActionRegistration(displayName = "#CTL_CheckForNewReviews")
2633
@ActionReferences({
2734
@ActionReference(path = "Menu/TM&C", position = -40)
2835
})
2936
@NbBundle.Messages("CTL_CheckForNewReviews=Check for new code &reviews")
3037
public class CheckForNewReviews implements ActionListener, Runnable {
38+
3139
private static final Logger log = Logger.getLogger(CheckForNewReviews.class.getName());
32-
40+
3341
private static CheckForNewReviews instance;
34-
42+
3543
public static void startTimer() {
3644
if (instance == null) {
3745
instance = new CheckForNewReviews(true, false, false);
38-
int interval = 20*60*1000; // 20 minutes
46+
int interval = 20 * 60 * 1000; // 20 minutes
3947
javax.swing.Timer timer = new javax.swing.Timer(interval, instance);
4048
timer.setRepeats(true);
4149
timer.start();
@@ -44,15 +52,15 @@ public static void startTimer() {
4452
log.warning("CheckForNewReviews.startTimer() called twice");
4553
}
4654
}
47-
55+
4856
private ServerAccess serverAccess;
4957
private CourseDb courseDb;
5058
private ReviewDb reviewDb;
5159
private ConvenientDialogDisplayer dialogs;
5260
private boolean beQuiet;
5361
private boolean resetNotifications;
5462
private boolean notifyAboutNoNewReviews;
55-
63+
5664
CheckForNewReviews() {
5765
this(false, true, true);
5866
}
@@ -71,13 +79,13 @@ public static void startTimer() {
7179
public void actionPerformed(ActionEvent e) {
7280
run();
7381
}
74-
82+
7583
@Override
7684
public void run() {
7785
if (resetNotifications) {
7886
reviewDb.forgetReviewsNotifiedAbout();
7987
}
80-
88+
8189
Course course = courseDb.getCurrentCourse();
8290
if (course == null) {
8391
if (!beQuiet) {
@@ -88,28 +96,43 @@ public void run() {
8896
if (course.getReviewsUrl() == null) {
8997
return;
9098
}
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);
98111
}
99-
}
100112

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);
107116
}
108-
}
109117

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+
}
114137
}
115138
}

tmc-plugin/src/fi/helsinki/cs/tmc/actions/ReviewEventListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package fi.helsinki.cs.tmc.actions;
22

33
import com.google.gson.Gson;
4-
import fi.helsinki.cs.tmc.data.Review;
4+
import hy.tmc.core.domain.Review;
55
import fi.helsinki.cs.tmc.events.TmcEventBus;
66
import fi.helsinki.cs.tmc.events.TmcEventListener;
77
import fi.helsinki.cs.tmc.model.CourseDb;

tmc-plugin/src/fi/helsinki/cs/tmc/data/Review.java

Lines changed: 71 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,50 @@
11
package fi.helsinki.cs.tmc.data;
22

3+
import com.google.common.base.Optional;
34
import com.google.gson.annotations.SerializedName;
4-
import java.util.ArrayList;
5-
import java.util.Date;
5+
import hy.tmc.core.communication.HttpResult;
6+
import hy.tmc.core.communication.UrlCommunicator;
7+
import hy.tmc.core.exceptions.TmcCoreException;
8+
import java.io.IOException;
9+
import java.util.HashMap;
10+
import java.util.List;
11+
import java.util.Map;
612

713
public class Review {
8-
@SerializedName("id")
9-
private int id;
14+
1015
@SerializedName("submission_id")
1116
private int submissionId;
17+
1218
@SerializedName("exercise_name")
1319
private String exerciseName;
20+
21+
private int id;
22+
1423
@SerializedName("marked_as_read")
1524
private boolean markedAsRead;
25+
1626
@SerializedName("reviewer_name")
1727
private String reviewerName;
28+
1829
@SerializedName("review_body")
1930
private String reviewBody;
20-
@SerializedName("points")
21-
private ArrayList<String> points;
31+
32+
private List<String> points;
33+
2234
@SerializedName("points_not_awarded")
23-
private ArrayList<String> pointsNotAwarded;
24-
@SerializedName("url")
35+
private List<String> pointsNotAwarded;
36+
2537
private String url;
38+
2639
@SerializedName("update_url")
2740
private String updateUrl;
41+
2842
@SerializedName("created_at")
29-
private Date createdAt;
30-
@SerializedName("updated_at")
31-
private Date updatedAt;
43+
private String createdAt;
3244

33-
public int getId() {
34-
return id;
35-
}
45+
@SerializedName("updated_at")
46+
private String updatedAt;
3647

37-
public void setId(int id) {
38-
this.id = id;
39-
}
40-
4148
public int getSubmissionId() {
4249
return submissionId;
4350
}
@@ -54,6 +61,14 @@ public void setExerciseName(String exerciseName) {
5461
this.exerciseName = exerciseName;
5562
}
5663

64+
public int getId() {
65+
return id;
66+
}
67+
68+
public void setId(int id) {
69+
this.id = id;
70+
}
71+
5772
public boolean isMarkedAsRead() {
5873
return markedAsRead;
5974
}
@@ -78,19 +93,19 @@ public void setReviewBody(String reviewBody) {
7893
this.reviewBody = reviewBody;
7994
}
8095

81-
public ArrayList<String> getPoints() {
96+
public List<String> getPoints() {
8297
return points;
8398
}
8499

85-
public void setPoints(ArrayList<String> points) {
100+
public void setPoints(List<String> points) {
86101
this.points = points;
87102
}
88103

89-
public ArrayList<String> getPointsNotAwarded() {
104+
public List<String> getPointsNotAwarded() {
90105
return pointsNotAwarded;
91106
}
92107

93-
public void setPointsNotAwarded(ArrayList<String> pointsNotAwarded) {
108+
public void setPointsNotAwarded(List<String> pointsNotAwarded) {
94109
this.pointsNotAwarded = pointsNotAwarded;
95110
}
96111

@@ -110,20 +125,49 @@ public void setUpdateUrl(String updateUrl) {
110125
this.updateUrl = updateUrl;
111126
}
112127

113-
public Date getCreatedAt() {
128+
public String getCreatedAt() {
114129
return createdAt;
115130
}
116131

117-
public void setCreatedAt(Date createdAt) {
132+
public void setCreatedAt(String createdAt) {
118133
this.createdAt = createdAt;
119134
}
120135

121-
public Date getUpdatedAt() {
136+
public String getUpdatedAt() {
122137
return updatedAt;
123138
}
124139

125-
public void setUpdatedAt(Date updatedAt) {
140+
public void setUpdatedAt(String updatedAt) {
126141
this.updatedAt = updatedAt;
127142
}
128-
143+
144+
public void markAs(boolean read, UrlCommunicator urlCommunicator) throws IOException, TmcCoreException {
145+
Map<String, String> headers = addHeaders(read);
146+
HttpResult result = urlCommunicator.makePutRequest(putUrl(), Optional.of(headers));
147+
if (result.getData().contains("OK")) {
148+
this.markedAsRead = read;
149+
}
150+
}
151+
152+
private Map<String, String> addHeaders(boolean read) {
153+
Map<String, String> headers = new HashMap<String, String>();
154+
String readUpdate = "mark_as_";
155+
if (read) {
156+
readUpdate += "read";
157+
} else {
158+
readUpdate += "unread";
159+
}
160+
headers.put(readUpdate, "1");
161+
return headers;
162+
}
163+
164+
private String putUrl() {
165+
return this.updateUrl + ".json?api_version=7";
166+
}
167+
168+
@Override
169+
public String toString() {
170+
return exerciseName + " reviewed by " + reviewerName + ":\n" + reviewBody + "\n"
171+
+ this.url;
172+
}
129173
}

tmc-plugin/src/fi/helsinki/cs/tmc/data/serialization/ReviewListParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5-
import fi.helsinki.cs.tmc.data.Review;
5+
import hy.tmc.core.domain.Review;
66
import java.util.Arrays;
77
import java.util.Date;
88
import java.util.List;

tmc-plugin/src/fi/helsinki/cs/tmc/model/ReviewDb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fi.helsinki.cs.tmc.model;
22

3-
import fi.helsinki.cs.tmc.data.Review;
3+
import hy.tmc.core.domain.Review;
44
import fi.helsinki.cs.tmc.events.TmcEvent;
55
import fi.helsinki.cs.tmc.events.TmcEventBus;
66
import java.util.ArrayList;

tmc-plugin/src/fi/helsinki/cs/tmc/model/ServerAccess.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import hy.tmc.core.domain.Course;
1212
import hy.tmc.core.domain.Exercise;
1313
import fi.helsinki.cs.tmc.data.FeedbackAnswer;
14-
import fi.helsinki.cs.tmc.data.Review;
14+
import hy.tmc.core.domain.Review;
1515
import fi.helsinki.cs.tmc.data.serialization.CourseInfoParser;
1616
import fi.helsinki.cs.tmc.data.serialization.CourseListParser;
1717
import fi.helsinki.cs.tmc.data.serialization.ReviewListParser;

tmc-plugin/src/fi/helsinki/cs/tmc/ui/CodeReviewDialog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fi.helsinki.cs.tmc.ui;
22

3-
import fi.helsinki.cs.tmc.data.Review;
3+
import hy.tmc.core.domain.Review;
44
import java.awt.Dimension;
55
import java.awt.Toolkit;
66
import java.awt.event.ActionListener;

0 commit comments

Comments
 (0)