Skip to content

Commit c0e4a18

Browse files
committed
Merge pull request #32 from rage/submit-in-bgtask
Submit in cancellable bg task
2 parents cbb82a5 + e192222 commit c0e4a18

27 files changed

+269
-385
lines changed

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,25 @@ public void receive(CourseDb.ChangedEvent event) throws Throwable {
2828
}
2929
}, this);
3030
}
31-
31+
3232
protected abstract ProjectMediator getProjectMediator();
3333
protected abstract CourseDb getCourseDb();
34-
34+
3535
@Override
3636
protected boolean enable(Node[] nodes) {
3737
return enable(projectsFromNodes(nodes).toArray(new Project[0]));
3838
}
39-
39+
4040
@Override
4141
public HelpCtx getHelpCtx() {
4242
return HelpCtx.DEFAULT_HELP;
4343
}
44-
44+
4545
@Override
4646
protected boolean asynchronous() {
4747
return false;
4848
}
49-
49+
5050
/*package (for tests)*/
5151
public boolean enable(Project ... projects) {
5252
if (projects.length == 0) {
@@ -56,7 +56,7 @@ public boolean enable(Project ... projects) {
5656
if (projects.length != 1 && !enabledForMultipleProjects()) {
5757
return false;
5858
}
59-
59+
6060
for (Project project : projects) {
6161
Exercise exercise = exerciseForProject(project);
6262
if (exercise != null && enabledFor(exercise)) {
@@ -69,11 +69,11 @@ public boolean enable(Project ... projects) {
6969
protected boolean enabledForMultipleProjects() {
7070
return false;
7171
}
72-
72+
7373
protected boolean enabledFor(Exercise exercise) {
7474
return (exercise.isReturnable() && !exercise.hasDeadlinePassed());
7575
}
76-
76+
7777
protected List<Project> projectsFromNodes(Node[] nodes) {
7878
ArrayList<Project> result = new ArrayList<Project>();
7979
for (Node node : nodes) {
@@ -84,7 +84,7 @@ protected List<Project> projectsFromNodes(Node[] nodes) {
8484
removeDuplicates(result);
8585
return result;
8686
}
87-
87+
8888
private <T> void removeDuplicates(List<T> list) {
8989
int n = 0;
9090
Iterator<T> i = list.iterator();
@@ -97,7 +97,7 @@ private <T> void removeDuplicates(List<T> list) {
9797
}
9898
}
9999
}
100-
100+
101101
private List<Project> projectsFromDataObjects(Collection<? extends DataObject> dataObjects) {
102102
ArrayList<Project> result = new ArrayList<Project>();
103103
for (DataObject dataObj : dataObjects) {
@@ -108,13 +108,13 @@ private List<Project> projectsFromDataObjects(Collection<? extends DataObject> d
108108
}
109109
return result;
110110
}
111-
111+
112112
private Project projectFromDataObject(DataObject dataObj) {
113113
FileObject fileObj = dataObj.getPrimaryFile();
114114
return FileOwnerQuery.getOwner(fileObj);
115115
}
116-
116+
117117
protected Exercise exerciseForProject(Project project) {
118118
return getProjectMediator().tryGetExerciseForProject(getProjectMediator().wrapProject(project), getCourseDb());
119119
}
120-
}
120+
}

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

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,31 @@
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;
3+
import static java.util.logging.Level.INFO;
4+
65
import fi.helsinki.cs.tmc.core.domain.Course;
76
import fi.helsinki.cs.tmc.core.domain.Review;
87
import fi.helsinki.cs.tmc.model.CourseDb;
9-
import fi.helsinki.cs.tmc.model.NbTmcSettings;
108
import fi.helsinki.cs.tmc.model.ReviewDb;
119
import fi.helsinki.cs.tmc.model.TmcCoreSingleton;
1210
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
13-
import fi.helsinki.cs.tmc.core.exceptions.TmcCoreException;
1411
import fi.helsinki.cs.tmc.utilities.BgTask;
1512
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
1613
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
17-
import java.awt.event.ActionEvent;
18-
import java.awt.event.ActionListener;
19-
import java.util.List;
20-
import java.util.logging.Level;
21-
import java.util.logging.Logger;
22-
import javax.swing.SwingUtilities;
23-
import org.netbeans.api.progress.ProgressHandle;
24-
import org.netbeans.api.progress.ProgressHandleFactory;
14+
15+
import com.google.common.util.concurrent.ListenableFuture;
16+
2517
import org.openide.awt.ActionID;
2618
import org.openide.awt.ActionReference;
2719
import org.openide.awt.ActionReferences;
2820
import org.openide.awt.ActionRegistration;
29-
import org.openide.util.Exceptions;
3021
import org.openide.util.NbBundle;
3122

23+
import java.awt.event.ActionEvent;
24+
import java.awt.event.ActionListener;
25+
import java.util.List;
26+
import java.util.logging.Logger;
27+
import javax.swing.SwingUtilities;
28+
3229
@ActionID(category = "TMC",
3330
id = "fi.helsinki.cs.tmc.actions.CheckForNewReviews")
3431
@ActionRegistration(displayName = "#CTL_CheckForNewReviews")
@@ -108,7 +105,7 @@ public void bgTaskReady(List<Review> result) {
108105
@Override
109106
public void bgTaskFailed(final Throwable ex) {
110107
final String msg = "Failed to check for code reviews";
111-
log.log(Level.INFO, msg, ex);
108+
log.log(INFO, msg, ex);
112109
if (!beQuiet) {
113110
dialogs.displayError(msg, ex);
114111
}
@@ -132,4 +129,4 @@ public boolean cancel() {
132129
}
133130
}, bgTaskListener);
134131
}
135-
}
132+
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@
66
import fi.helsinki.cs.tmc.model.TmcProjectInfo;
77
import fi.helsinki.cs.tmc.model.NbTmcSettings;
88
import fi.helsinki.cs.tmc.ui.TmcNotificationDisplayer;
9+
10+
import org.openide.awt.NotificationDisplayer;
11+
import org.openide.util.ImageUtilities;
12+
913
import java.awt.event.ActionEvent;
1014
import java.awt.event.ActionListener;
1115
import java.util.ArrayList;
1216
import java.util.List;
1317
import javax.swing.Icon;
14-
import org.openide.awt.NotificationDisplayer;
15-
import org.openide.util.ImageUtilities;
1618

1719
public class CheckForUnopenedExercises implements ActionListener {
20+
1821
public static boolean shouldRunOnStartup() {
1922
return NbTmcSettings.getDefault().isCheckingForUnopenedAtStartup();
2023
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import fi.helsinki.cs.tmc.model.TmcCoreSingleton;
1010
import fi.helsinki.cs.tmc.model.TmcProjectInfo;
1111
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
12-
import fi.helsinki.cs.tmc.utilities.AggregatingBgTaskListener;
1312
import fi.helsinki.cs.tmc.utilities.BgTask;
1413
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
1514
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
@@ -22,7 +21,6 @@
2221
import java.util.Collection;
2322
import java.util.List;
2423
import java.util.logging.Logger;
25-
import javax.swing.SwingUtilities;
2624

2725
/**
2826
* Downloads and opens the given exercises in the background.
@@ -79,7 +77,7 @@ public boolean cancel() {
7977
}, listener);
8078
}
8179

82-
private BgTaskListener<Collection<Exercise>> whenDownloadsFinished = new BgTaskListener<Collection<Exercise>>() {
80+
private final BgTaskListener<Collection<Exercise>> whenDownloadsFinished = new BgTaskListener<Collection<Exercise>>() {
8381
@Override
8482
public void bgTaskReady(Collection<Exercise> exercises) {
8583
logger.log(INFO, "Opening projects.");

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,4 +203,4 @@ public JComponent[] synchMenuPresenters(JComponent[] jcs) {
203203
}
204204

205205
}
206-
}
206+
}

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

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
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;
63
import fi.helsinki.cs.tmc.core.domain.Exercise;
74
import fi.helsinki.cs.tmc.model.CourseDb;
85
import fi.helsinki.cs.tmc.model.ProjectMediator;
@@ -12,28 +9,28 @@
129
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
1310
import fi.helsinki.cs.tmc.ui.PastebinDialog;
1411
import fi.helsinki.cs.tmc.ui.PastebinResponseDialog;
15-
import fi.helsinki.cs.tmc.core.exceptions.TmcCoreException;
1612
import fi.helsinki.cs.tmc.utilities.BgTask;
1713
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
1814
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
19-
import java.awt.event.ActionEvent;
20-
import java.awt.event.ActionListener;
21-
import java.net.URI;
22-
import java.nio.file.Path;
23-
import java.nio.file.Paths;
24-
import java.util.List;
25-
import java.util.concurrent.Callable;
26-
import java.util.logging.Level;
27-
import java.util.logging.Logger;
15+
16+
import com.google.common.util.concurrent.ListenableFuture;
17+
2818
import org.netbeans.api.project.Project;
19+
2920
import org.openide.awt.ActionID;
3021
import org.openide.awt.ActionReference;
3122
import org.openide.awt.ActionReferences;
3223
import org.openide.awt.ActionRegistration;
3324
import org.openide.nodes.Node;
34-
import org.openide.util.Exceptions;
3525
import org.openide.util.NbBundle.Messages;
3626

27+
import java.awt.event.ActionEvent;
28+
import java.awt.event.ActionListener;
29+
import java.net.URI;
30+
import java.util.List;
31+
import java.util.logging.Level;
32+
import java.util.logging.Logger;
33+
3734
@ActionID(
3835
category = "TMC",
3936
id = "fi.helsinki.cs.tmc.actions.PastebinAction")
@@ -112,7 +109,6 @@ public void actionPerformed(ActionEvent e) {
112109
private void submitPaste(final TmcProjectInfo projectInfo, final Exercise exercise,
113110
final String messageForReviewer) {
114111
projectMediator.saveAllFiles();
115-
final String errorMsgLocale = settings.getErrorMsgLocale().toString();
116112
BgTask.start("Sending tmc-paste", new CancellableCallable<URI>() {
117113
ListenableFuture<URI> result;
118114

@@ -151,4 +147,4 @@ public void bgTaskFailed(Throwable ex) {
151147
public String getName() {
152148
return "Send code to TMC Pastebin";
153149
}
154-
}
150+
}

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

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

3-
import com.google.common.util.concurrent.ListenableFuture;
4-
import fi.helsinki.cs.tmc.core.TmcCore;
53
import fi.helsinki.cs.tmc.core.domain.Course;
64
import fi.helsinki.cs.tmc.data.CourseListUtils;
75
import fi.helsinki.cs.tmc.model.CourseDb;
@@ -10,14 +8,13 @@
108
import fi.helsinki.cs.tmc.model.TmcCoreSingleton;
119
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
1210
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
13-
import fi.helsinki.cs.tmc.utilities.FutureCallbackList;
1411
import fi.helsinki.cs.tmc.core.TmcCore;
15-
import fi.helsinki.cs.tmc.core.exceptions.TmcCoreException;
16-
import java.net.URI;
17-
import java.net.URISyntaxException;
1812
import fi.helsinki.cs.tmc.utilities.BgTask;
1913
import fi.helsinki.cs.tmc.utilities.BgTaskListenerList;
2014
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
15+
16+
import com.google.common.util.concurrent.ListenableFuture;
17+
2118
import java.util.ArrayList;
2219
import java.util.List;
2320
import java.util.logging.Level;
@@ -187,4 +184,4 @@ public void bgTaskFailed(Throwable ex) {
187184
}
188185
}
189186
}
190-
}
187+
}

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fi.helsinki.cs.tmc.actions;
22

3-
import com.google.gson.Gson;
43
import fi.helsinki.cs.tmc.core.domain.Exercise;
54
import fi.helsinki.cs.tmc.events.TmcEventBus;
65
import fi.helsinki.cs.tmc.model.CourseDb;
@@ -15,6 +14,18 @@
1514
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
1615
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
1716
import fi.helsinki.cs.tmc.utilities.zip.RecursiveZipper;
17+
18+
import com.google.gson.Gson;
19+
20+
import org.netbeans.api.project.Project;
21+
22+
import org.openide.awt.ActionID;
23+
import org.openide.awt.ActionReference;
24+
import org.openide.awt.ActionReferences;
25+
import org.openide.awt.ActionRegistration;
26+
import org.openide.nodes.Node;
27+
import org.openide.util.NbBundle;
28+
1829
import java.awt.event.ActionEvent;
1930
import java.awt.event.ActionListener;
2031
import java.net.URI;
@@ -25,13 +36,6 @@
2536
import java.util.concurrent.Callable;
2637
import java.util.logging.Level;
2738
import java.util.logging.Logger;
28-
import org.netbeans.api.project.Project;
29-
import org.openide.awt.ActionID;
30-
import org.openide.awt.ActionReference;
31-
import org.openide.awt.ActionReferences;
32-
import org.openide.awt.ActionRegistration;
33-
import org.openide.nodes.Node;
34-
import org.openide.util.NbBundle;
3539

3640
@ActionID(category = "TMC", id = "fi.helsinki.cs.tmc.actions.RequestReviewAction")
3741
@ActionRegistration(displayName = "#CTL_RequestReviewAction", lazy = false)
@@ -188,4 +192,4 @@ private ReviewRequested(Exercise exercise, URI submissionUrl) {
188192
this.submissionUrl = submissionUrl.toString();
189193
}
190194
}
191-
}
195+
}

0 commit comments

Comments
 (0)