Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 208 project submissions scoring ui #217

Closed
wants to merge 57 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
784accd
Before digging in to issue #208, move the grade book GUI code into it…
DavidWhitlock Jul 22, 2017
09508eb
Move the event bus classes into their own package so that they can be…
DavidWhitlock Jul 22, 2017
62feb9d
Introduced a simple MVP for displaying project submissions.
DavidWhitlock Jul 22, 2017
0d03e24
Pulled some duplicate code into a superclass of Presenters that are o…
DavidWhitlock Jul 22, 2017
91c2784
Pulled up code into a superclass that will be useful for other UI mai…
DavidWhitlock Jul 22, 2017
b45f283
Began developing a UI for the project submission scorer application.
DavidWhitlock Jul 22, 2017
cba5e50
When you click on the name of a submission, that submission is selected.
DavidWhitlock Jul 22, 2017
650b4a4
Select the first submission when submissions are loaded.
DavidWhitlock Jul 22, 2017
5ad20f9
When a submission is selected, display the name of its test cases.
DavidWhitlock Jul 22, 2017
ebe9345
Hook up the test case presenter to the UI.
DavidWhitlock Jul 22, 2017
8da87de
Select the first test case when a submission is selected.
DavidWhitlock Jul 22, 2017
b70a52a
Publish an event when a test case is selected.
DavidWhitlock Jul 22, 2017
a8cc11d
Begin the test case output presenter.
DavidWhitlock Jul 23, 2017
9ba5403
Added a panel for the test case output to the UI.
DavidWhitlock Jul 23, 2017
ee504fd
A presenter for viewing and editing a project submission's score.
DavidWhitlock Jul 23, 2017
d5297e6
Added a UI for displaying the score of a project submission. Also ad…
DavidWhitlock Jul 23, 2017
4292f5c
Add points deducted to test case output presenter.
DavidWhitlock Jul 23, 2017
8accbf8
Added points deducted and Grader comment to the test case output pres…
DavidWhitlock Jul 23, 2017
d550bf0
Added UI for points deducted and grader comments. Along the way, ref…
DavidWhitlock Jul 23, 2017
4b63738
Public an update event when points are deducted from a test case output.
DavidWhitlock Jul 23, 2017
1c3146f
Display the number of points deducted in the test case list.
DavidWhitlock Jul 23, 2017
5402d30
Update the list of test cases when points are deducted from a test case.
DavidWhitlock Jul 23, 2017
5e825e4
Publish a message when the submission score is saved.
DavidWhitlock Jul 23, 2017
9fdfdca
Added a button to save the project score.
DavidWhitlock Jul 23, 2017
0dbf56f
Rename main class to make it clear that it can grade multiple submiss…
DavidWhitlock Jul 24, 2017
3bfdd5f
Refactor the code for publishing a message to the bus into a supercla…
DavidWhitlock Jul 24, 2017
6583045
Move uncaught exception handling code into the mvp package and instal…
DavidWhitlock Jul 24, 2017
38bf4f8
Update the submission's score when points are deducted for a test case.
DavidWhitlock Jul 24, 2017
b30d440
Added titles to the list of submissions and test cases
DavidWhitlock Jul 24, 2017
c987286
Make distinction between ungraded and graded submissions.
DavidWhitlock Jul 24, 2017
dd9c65d
Added UI components for graded project submissions.
DavidWhitlock Jul 24, 2017
29427de
Update lists of graded/ungraded submissions when the submission score…
DavidWhitlock Jul 24, 2017
7eb05d3
We should never programmatically select one of the graded submissions…
DavidWhitlock Jul 24, 2017
619bec2
When a project submission has it's score saved, but the score hasn't …
DavidWhitlock Jul 24, 2017
df8b75e
When a project's grade has been saved, select the next ungraded project.
DavidWhitlock Jul 24, 2017
e16067e
Display information about a graded submission when it is selected in …
DavidWhitlock Jul 24, 2017
4d87405
When the score for a test case is specified, advance to the next test…
DavidWhitlock Jul 24, 2017
de684eb
Fixed broken unit test.
DavidWhitlock Jul 24, 2017
b3d0af9
Added some unit tests for parsing an output file created by the gradi…
DavidWhitlock Jul 29, 2017
90978f7
Java Doc
susham Jul 29, 2017
cba5bbe
Merge pull request #213 from susham/issue-208-project-submissions-sco…
DavidWhitlock Jul 29, 2017
96e9708
Begin to add support for converting ProjectSubmission objects into XML.
DavidWhitlock Jul 29, 2017
5b6d18b
Merge remote-tracking branch 'origin/issue-208-project-submissions-sc…
DavidWhitlock Jul 29, 2017
4e5ec24
Merge pull request #1 from DavidWhitlock/issue-208-project-submission…
susham Jul 29, 2017
956dbd3
Make sure that you can convert a submissions student id.
DavidWhitlock Jul 29, 2017
2394e85
Convert project submission to XML and back.
DavidWhitlock Jul 30, 2017
19a2ad1
Write a main program that converts a project submission output file t…
DavidWhitlock Jul 30, 2017
323505e
Merge pull request #2 from DavidWhitlock/issue-208-project-submission…
susham Jul 30, 2017
21d1cbf
Added a new presenter that loads project submissions from XML files.
DavidWhitlock Jul 30, 2017
b04c9b6
Added the UI for selecting a directory from which to read project sub…
DavidWhitlock Jul 30, 2017
658d9db
Added the ability to save the project submissions back to the XML fil…
DavidWhitlock Jul 30, 2017
1a5fc33
Added a label that displays the location from which files were loaded.
DavidWhitlock Jul 30, 2017
76407f0
Implementation of ProjectSubmissionOutputFileParser
susham Aug 29, 2017
6d8877b
Merge branch 'master' into issue-208-project-submissions-scoring-ui
DavidWhitlock Aug 30, 2017
5fa1ab5
Import a class that is no longer in the same package.
DavidWhitlock Aug 30, 2017
fffa086
Merge pull request #3 from DavidWhitlock/issue-208-project-submission…
susham Aug 30, 2017
407599c
Made few changes as per the code review
susham Sep 1, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion grader/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@
<configuration>
<jnlp>
<outputFile>grader.jnlp</outputFile>
<mainClass>edu.pdx.cs410J.grader.GradeBookGUI</mainClass>
<mainClass>edu.pdx.cs410J.grader.gradebook.GradeBookGUI</mainClass>
</jnlp>
<!--
defining this will automatically sign the jar and its dependencies
Expand Down
4 changes: 2 additions & 2 deletions grader/src/main/java/edu/pdx/cs410J/grader/GradeBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ public Optional<Student> getStudentWithSsn(String ssn) {
return this.studentsStream().filter(s -> ssn.equals(s.getSsn())).findAny();
}

static class LetterGradeRanges implements Iterable<LetterGradeRanges.LetterGradeRange> {
public static class LetterGradeRanges implements Iterable<LetterGradeRanges.LetterGradeRange> {
private final Map<LetterGrade, LetterGradeRange> ranges = new TreeMap<>();

private LetterGradeRanges() {
Expand Down Expand Up @@ -435,7 +435,7 @@ public Spliterator<LetterGradeRange> spliterator() {
return this.ranges.values().spliterator();
}

static class LetterGradeRange {
public static class LetterGradeRange {
private final LetterGrade letterGrade;
private int maximum;
private int minimum;
Expand Down
31 changes: 21 additions & 10 deletions grader/src/main/java/edu/pdx/cs410J/grader/GraderTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import com.google.common.annotations.VisibleForTesting;
import edu.pdx.cs410J.grader.gradebook.GradeBookGUI;
import edu.pdx.cs410J.grader.poa.ui.PlanOfAttackGrader;
import edu.pdx.cs410J.grader.scoring.ProjectSubmissionXmlConverter;
import edu.pdx.cs410J.grader.scoring.ui.ProjectSubmissionsScorer;
import org.slf4j.LoggerFactory;

import java.io.PrintStream;
Expand Down Expand Up @@ -72,6 +75,12 @@ private static Class getToolClass(String tool) {
case "fixGwtZips":
return GwtZipFixer.class;

case "scoreProjectSubmissions":
return ProjectSubmissionsScorer.class;

case "convertProjectOutFilesToXml":
return ProjectSubmissionXmlConverter.class;

default:
usage("Unknown tool: " + tool);
return null;
Expand All @@ -93,16 +102,18 @@ private static void usage(String message) {
err.println();
err.println("usage: GraderTools tool toolArg*");
err.println(" tool The tool to execute");
err.println(" gradebook The Grade Book GUI");
err.println(" fetch Fetch student surveys or projects from the Grader's");
err.println(" emails account");
err.println(" importFromD2L Import grades from a D2L CSV");
err.println(" importFromProjectReports Import grades from graded project reports");
err.println(" mailFileToStudent Email text files to students");
err.println(" gradePOAs Tool for downloading and grading POAs");
err.println(" generateGradeSummary Generate grade summary report for one or more students");
err.println(" htmlForSurveyResults Generate an html file for the responses to a D2L survey");
err.println(" fixGwtZips Fix zip files for the GWT project to work with grading script");
err.println(" gradebook The Grade Book GUI");
err.println(" fetch Fetch student surveys or projects from the Grader's");
err.println(" emails account");
err.println(" importFromD2L Import grades from a D2L CSV");
err.println(" importFromProjectReports Import grades from graded project reports");
err.println(" mailFileToStudent Email text files to students");
err.println(" gradePOAs Tool for downloading and grading POAs");
err.println(" generateGradeSummary Generate grade summary report for one or more students");
err.println(" htmlForSurveyResults Generate an html file for the responses to a D2L survey");
err.println(" fixGwtZips Fix zip files for the GWT project to work with grading script");
err.println(" scoreProjectSubmissions Review project submissions and assign them scores");
err.println(" convertProjectOutFilesToXml Review project submissions and assign them scores");
err.println(" toolArg A command line argument to send to the tool");
err.println();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
/**
* This class parses XML data that describes a <code>Student</code>.
*/
class XmlStudentParser extends XmlHelper {
public class XmlStudentParser extends XmlHelper {

/** The Reader from which the XML Data is read */
private Reader reader;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.Assignment;
import edu.pdx.cs410J.grader.GradeBook;
import edu.pdx.cs410J.grader.Notable;
import edu.pdx.cs410J.grader.XmlGradeBookParser;

import javax.swing.*;
import java.awt.*;
Expand Down Expand Up @@ -326,4 +330,5 @@ public void windowClosing(WindowEvent e) {
frame.pack();
frame.setVisible(true);
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.*;

import javax.swing.*;
import javax.swing.border.Border;
Expand Down Expand Up @@ -262,7 +263,7 @@ void displayAssignments(GradeBook book) {
assignmentNames.addAll(book.getAssignmentNames());
this.assignmentsList.setListData(assignmentNames);
}

/**
* Displays an assignment in the appropriate fields
*/
Expand Down Expand Up @@ -290,7 +291,7 @@ public static void main(String[] args) {
} catch (FileNotFoundException ex) {
System.err.println("** Could not find file: " + ex.getMessage());
System.exit(1);

} catch (IOException ex) {
System.err.println("** IOException during parsing: " + ex.getMessage());
System.exit(1);
Expand Down Expand Up @@ -322,7 +323,7 @@ public void windowClosing(WindowEvent e) {
});

frame.getContentPane().add(classPanel);

frame.pack();
frame.setVisible(true);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package edu.pdx.cs410J.grader;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.*;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
Expand All @@ -14,24 +15,6 @@
import java.util.TimerTask;
import java.util.prefs.Preferences;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;

import edu.pdx.cs410J.ParserException;

/**
* This class is a main GUI for manipulate the grade book for CS410J.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.*;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.*;

import javax.swing.*;
import javax.swing.border.Border;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.grader.GradeBook;
import edu.pdx.cs410J.grader.LetterGrade;
import edu.pdx.cs410J.grader.Student;

import javax.swing.*;
import java.awt.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.grader.Assignment;

import java.awt.BorderLayout;
import java.awt.Container;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.grader.Notable;

import java.awt.*;
import java.awt.event.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.*;

import javax.swing.*;
import java.awt.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package edu.pdx.cs410J.grader;
package edu.pdx.cs410J.grader.gradebook;

import edu.pdx.cs410J.ParserException;
import edu.pdx.cs410J.grader.GradeBook;
import edu.pdx.cs410J.grader.Student;
import edu.pdx.cs410J.grader.XmlGradeBookParser;

import javax.swing.*;
import java.awt.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package edu.pdx.cs410J.grader.poa;
package edu.pdx.cs410J.grader.mvp;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package edu.pdx.cs410J.grader.mvp;

import com.google.common.eventbus.EventBus;

public class PresenterOnEventBus {
private final EventBus bus;

public PresenterOnEventBus(EventBus bus) {
this.bus = bus;
this.bus.register(this);
}

protected void publishEvent(Object event) {
this.bus.post(event);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package edu.pdx.cs410J.grader.poa;
package edu.pdx.cs410J.grader.mvp;

public class UnhandledExceptionEvent {
private final Throwable unhandledException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package edu.pdx.cs410J.grader.poa;
package edu.pdx.cs410J.grader.mvp;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package edu.pdx.cs410J.grader.poa;
package edu.pdx.cs410J.grader.mvp;

public interface UnhandledExceptionView {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package edu.pdx.cs410J.grader.poa.ui;
package edu.pdx.cs410J.grader.mvp.ui;

import com.google.inject.Singleton;

Expand Down
37 changes: 37 additions & 0 deletions grader/src/main/java/edu/pdx/cs410J/grader/mvp/ui/UIMain.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package edu.pdx.cs410J.grader.mvp.ui;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import org.slf4j.Logger;

public class UIMain {
protected final TopLevelJFrame parent;

public UIMain(TopLevelJFrame parent) {
this.parent = parent;
}

private static void printStackTraceForUncaughtException(Throwable e, Logger logger) {
e.fillInStackTrace();
e.printStackTrace(System.err);
logger.error("Uncaught exception", e);
}

protected static void logAllEventsOnBusAtDebugLevel(EventBus bus, Logger logger) {
bus.register(new Object() {
@Subscribe
public void logEvent(Object event) {
logger.debug("Event " + event);
}
});
}

protected static void logAllUncaughtExceptions(Logger logger) {
Thread.currentThread().setUncaughtExceptionHandler((t, e) -> printStackTraceForUncaughtException(e, logger));
}

protected void display() {
parent.pack();
parent.setVisible(true);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package edu.pdx.cs410J.grader.poa.ui;
package edu.pdx.cs410J.grader.mvp.ui;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import edu.pdx.cs410J.grader.poa.UnhandledExceptionView;
import edu.pdx.cs410J.grader.mvp.UnhandledExceptionView;

import javax.swing.*;
import java.awt.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,26 @@
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import edu.pdx.cs410J.grader.mvp.PresenterOnEventBus;

@Singleton
public class EmailCredentialsPresenter {
private final EventBus bus;
public class EmailCredentialsPresenter extends PresenterOnEventBus {
private final EmailCredentialsView view;
private String emailAddress;
private String password;

@Inject
public EmailCredentialsPresenter(EventBus bus, EmailCredentialsView view) {
this.bus = bus;
super(bus);
this.view = view;

this.bus.register(this);

this.view.addEmailAddressValueListener(this::setEmailAddress);
this.view.addPasswordValueListener(this::setPassword);
this.view.addSubmitCredentialsListener(this::fireEmailCredentialsEvent);
}

private void fireEmailCredentialsEvent() {
this.bus.post(new EmailCredentials(this.emailAddress, this.password));
publishEvent(new EmailCredentials(this.emailAddress, this.password));
}

@Subscribe
Expand Down
Loading