Skip to content

Commit 9795649

Browse files
committed
feedback integrated
1 parent b198dc0 commit 9795649

File tree

6 files changed

+106
-40
lines changed

6 files changed

+106
-40
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package fi.helsinki.cs.tmc.actions;
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;
6+
import fi.helsinki.cs.tmc.data.FeedbackAnswer;
7+
8+
import fi.helsinki.cs.tmc.model.NBTmcSettings;
9+
import fi.helsinki.cs.tmc.model.TmcCoreSingleton;
10+
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
11+
import fi.helsinki.cs.tmc.utilities.ExceptionUtils;
12+
import hy.tmc.core.TmcCore;
13+
import hy.tmc.core.communication.HttpResult;
14+
import hy.tmc.core.domain.submission.SubmissionResult;
15+
import hy.tmc.core.exceptions.TmcCoreException;
16+
import java.io.IOException;
17+
import java.util.HashMap;
18+
import java.util.List;
19+
import java.util.Map;
20+
import java.util.logging.Level;
21+
import java.util.logging.Logger;
22+
import org.openide.util.Exceptions;
23+
24+
public class SendFeedbackAction {
25+
26+
private List<FeedbackAnswer> answers;
27+
private TmcCore core;
28+
private ConvenientDialogDisplayer dialogs;
29+
private final SubmissionResult result;
30+
private NBTmcSettings settings = NBTmcSettings.getDefault();
31+
private static final Logger log = Logger.getLogger(SendFeedbackAction.class.getName());
32+
33+
public SendFeedbackAction(List<FeedbackAnswer> answers, SubmissionResult result) {
34+
this.answers = answers;
35+
this.core = TmcCoreSingleton.getInstance();
36+
this.dialogs = ConvenientDialogDisplayer.getDefault();
37+
this.result = result;
38+
}
39+
40+
public void run() {
41+
try {
42+
ListenableFuture<HttpResult> feedbackFuture;
43+
feedbackFuture = core.sendFeedback(
44+
getFeedbackAnswers(), result.getFeedbackAnswerUrl(), settings
45+
);
46+
Futures.addCallback(feedbackFuture, new FeedbackReplyCallback());
47+
} catch (TmcCoreException ex) {
48+
Exceptions.printStackTrace(ex);
49+
} catch (IOException ex) {
50+
Exceptions.printStackTrace(ex);
51+
}
52+
}
53+
54+
private Map<String, String> getFeedbackAnswers() {
55+
Map<String, String> answerMap = new HashMap<String, String>();
56+
57+
for (FeedbackAnswer answer : answers) {
58+
answerMap.put("" + answer.getQuestion().getId(), answer.getAnswer());
59+
}
60+
61+
return answerMap;
62+
}
63+
64+
private class FeedbackReplyCallback implements FutureCallback<HttpResult> {
65+
66+
@Override
67+
public void onSuccess(HttpResult v) {
68+
System.out.println(v.getData() + " " + v.getStatusCode());
69+
}
70+
71+
@Override
72+
public void onFailure(Throwable ex) {
73+
String msg = "Failed to send feedback :-(\n" + ex.getMessage();
74+
String msgWithBacktrace = msg + "\n" + ExceptionUtils.backtraceToString(ex);
75+
log.log(Level.INFO, msgWithBacktrace);
76+
dialogs.displayError(msg);
77+
}
78+
}
79+
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.google.common.util.concurrent.Futures;
55
import com.google.common.util.concurrent.ListenableFuture;
66
import fi.helsinki.cs.tmc.data.ResultCollector;
7+
import fi.helsinki.cs.tmc.events.TmcEvent;
78
import fi.helsinki.cs.tmc.events.TmcEventBus;
8-
import fi.helsinki.cs.tmc.exerciseSubmitter.ExerciseSubmitter;
99

1010
import fi.helsinki.cs.tmc.model.CourseDb;
1111
import fi.helsinki.cs.tmc.model.NBTmcSettings;
@@ -37,6 +37,13 @@ public final class SubmitExerciseAction extends AbstractExerciseSensitiveAction
3737
private NBTmcSettings settings;
3838
private ConvenientDialogDisplayer dialogs;
3939

40+
public static class InvokedEvent implements TmcEvent {
41+
public final TmcProjectInfo projectInfo;
42+
public InvokedEvent(TmcProjectInfo projectInfo) {
43+
this.projectInfo = projectInfo;
44+
}
45+
}
46+
4047
public SubmitExerciseAction() {
4148
this.courseDb = CourseDb.getInstance();
4249
this.projectMediator = ProjectMediator.getInstance();
@@ -65,7 +72,7 @@ protected void performAction(Node[] nodes) {
6572
Project[] projects = projectsFromNodes(nodes).toArray(new Project[0]);
6673
for (Project project : projects) {
6774
TmcProjectInfo info = projectMediator.wrapProject(project);
68-
TmcEventBus.getDefault().post(new ExerciseSubmitter.InvokedEvent(info));
75+
TmcEventBus.getDefault().post(new SubmitExerciseAction.InvokedEvent(info));
6976
submitProject(info);
7077
}
7178
}

tmc-plugin/src/fi/helsinki/cs/tmc/exerciseSubmitter/ExerciseSubmitter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import org.netbeans.api.project.Project;
3232

33+
@Deprecated
3334
public class ExerciseSubmitter {
3435

3536
private static final Logger log = Logger.getLogger(SubmitExerciseAction.class.getName());

tmc-plugin/src/fi/helsinki/cs/tmc/runners/TestRunHandler.java

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

3-
import static fi.helsinki.cs.tmc.langs.RunResult.Status.COMPILE_FAILED;
3+
import static fi.helsinki.cs.tmc.langs.domain.RunResult.Status.COMPILE_FAILED;
44

55
import com.google.common.base.Throwables;
66
import com.google.common.collect.ImmutableList;
@@ -13,8 +13,9 @@
1313
import fi.helsinki.cs.tmc.events.TmcEvent;
1414
import fi.helsinki.cs.tmc.events.TmcEventBus;
1515
import fi.helsinki.cs.tmc.exerciseSubmitter.ExerciseSubmitter;
16-
import fi.helsinki.cs.tmc.langs.RunResult;
17-
import fi.helsinki.cs.tmc.langs.TestResult;
16+
import fi.helsinki.cs.tmc.langs.domain.RunResult;
17+
import fi.helsinki.cs.tmc.langs.domain.TestResult;
18+
1819
import fi.helsinki.cs.tmc.model.CourseDb;
1920
import fi.helsinki.cs.tmc.model.NBTmcSettings;
2021
import fi.helsinki.cs.tmc.model.ProjectMediator;

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

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
package fi.helsinki.cs.tmc.ui;
22

3+
import fi.helsinki.cs.tmc.actions.SendFeedbackAction;
34
import hy.tmc.core.domain.Exercise;
45
import fi.helsinki.cs.tmc.data.FeedbackAnswer;
56
import fi.helsinki.cs.tmc.data.ResultCollector;
67
import hy.tmc.core.domain.submission.SubmissionResult;
78
import fi.helsinki.cs.tmc.data.TestCaseResult;
8-
import fi.helsinki.cs.tmc.langs.TestResult;
9-
import fi.helsinki.cs.tmc.model.ServerAccess;
109
import fi.helsinki.cs.tmc.stylerunner.validation.Strategy;
11-
import fi.helsinki.cs.tmc.utilities.BgTask;
12-
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
13-
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
14-
import fi.helsinki.cs.tmc.utilities.ExceptionUtils;
1510
import hy.tmc.core.domain.submission.TestCase;
1611
import java.awt.Dialog;
1712
import java.awt.event.ActionEvent;
1813
import java.awt.event.ActionListener;
1914
import java.util.ArrayList;
2015
import java.util.List;
21-
import java.util.logging.Level;
2216
import java.util.logging.Logger;
2317
import org.apache.commons.lang3.StringEscapeUtils;
2418
import org.apache.commons.lang3.StringUtils;
@@ -76,24 +70,7 @@ private void displaySuccessfulSubmissionMsg(Exercise exercise, final SubmissionR
7670
public void actionPerformed(ActionEvent e) {
7771
List<FeedbackAnswer> answers = dialog.getFeedbackAnswers();
7872
if (!answers.isEmpty()) {
79-
CancellableCallable<String> task = new ServerAccess().getFeedbackAnsweringJob(result.getFeedbackAnswerUrl(), answers);
80-
BgTask.start("Sending feedback", task, new BgTaskListener<String>() {
81-
@Override
82-
public void bgTaskReady(String result) {
83-
}
84-
85-
@Override
86-
public void bgTaskCancelled() {
87-
}
88-
89-
@Override
90-
public void bgTaskFailed(Throwable ex) {
91-
String msg = "Failed to send feedback :-(\n" + ex.getMessage();
92-
String msgWithBacktrace = msg + "\n" + ExceptionUtils.backtraceToString(ex);
93-
log.log(Level.INFO, msgWithBacktrace);
94-
dialogs.displayError(msg);
95-
}
96-
});
73+
new SendFeedbackAction(answers, result).run();
9774
}
9875
}
9976
});

tmc-plugin/test/unit/src/fi/helsinki/cs/tmc/data/serialization/SubmissionResultParserTest.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
import java.util.List;
44
import hy.tmc.core.domain.submission.SubmissionResult;
5-
import fi.helsinki.cs.tmc.data.TestCaseResult;
6-
import fi.helsinki.cs.tmc.testrunner.CaughtException;
5+
import hy.tmc.core.domain.submission.StackTrace;
76
import static hy.tmc.core.domain.submission.SubmissionResult.Status.*;
7+
import hy.tmc.core.domain.submission.TestCase;
8+
import hy.tmc.core.domain.submission.TestException;
89
import org.junit.Test;
910
import static org.junit.Assert.*;
1011

@@ -52,7 +53,7 @@ public void testFail() {
5253
assertEquals(1, result.getPoints().size());
5354
assertEquals("1.1", result.getPoints().get(0));
5455

55-
List<TestCaseResult> testCases = result.getTestCases();
56+
List<TestCase> testCases = result.getTestCases();
5657
assertEquals(2, testCases.size());
5758
assertEquals("Some test", testCases.get(0).getName());
5859
assertEquals("Another test", testCases.get(1).getName());
@@ -70,16 +71,16 @@ public void testExceptions() {
7071
String input = "{status: \"fail\", test_cases: " + testCasesJson + ", points: []}";
7172

7273
SubmissionResult result = parse(input);
73-
74-
CaughtException cex = result.getTestCases().get(0).getException();
74+
75+
TestException cex = result.getTestCases().get(0).getException();
7576
assertNotNull(cex);
76-
assertEquals("FooEx", cex.className);
77-
assertEquals("xoo", cex.message);
78-
assertNull(null, cex.cause);
77+
assertEquals("FooEx", cex.getClassName());
78+
assertEquals("xoo", cex.getMessage());
79+
assertNull(null, cex.getCause());
7980

80-
StackTraceElement[] trace = cex.stackTrace;
81+
StackTrace[] trace = cex.getStackTrace();
8182
assertNotNull(trace);
82-
assertEquals("Foo", trace[0].getClassName());
83+
assertEquals("Foo", trace[0].getDeclaringClass()); // getClassName());
8384
assertEquals("bar", trace[0].getMethodName());
8485
assertEquals("Foo.java", trace[0].getFileName());
8586
assertEquals(123, trace[0].getLineNumber());

0 commit comments

Comments
 (0)