1- /* Licensed under EPL-2.0 2024. */
1+ /* Licensed under EPL-2.0 2024-2025 . */
22package edu .kit .kastel .sdq .intelligrade .extensions .guis ;
33
44import java .awt .event .ActionEvent ;
55import java .time .ZoneId ;
6- import java .time .format .DateTimeFormatter ;
76import java .util .ArrayList ;
87import java .util .Comparator ;
98import java .util .List ;
2019import com .intellij .ui .components .JBCheckBox ;
2120import com .intellij .ui .components .JBLabel ;
2221import com .intellij .ui .components .JBPanel ;
23- import edu .kit .kastel .sdq .artemis4j .grading .ProgrammingSubmission ;
22+ import edu .kit .kastel .sdq .artemis4j .grading .CorrectionRound ;
23+ import edu .kit .kastel .sdq .artemis4j .grading .PackedAssessment ;
2424import edu .kit .kastel .sdq .intelligrade .state .PluginState ;
2525import edu .kit .kastel .sdq .intelligrade .utils .ArtemisUtils ;
2626import net .miginfocom .swing .MigLayout ;
@@ -33,7 +33,7 @@ public class BacklogPanel extends JPanel {
3333 private final JBLabel shownSubmissionsLabel ;
3434 private final JPanel backlogList ;
3535
36- private List <ProgrammingSubmission > lastFetchedSubmissions = new ArrayList <>();
36+ private List <PackedAssessment > lastFetchedAssessments = new ArrayList <>();
3737 private final List <Runnable > onBacklogUpdate = new ArrayList <>();
3838
3939 public BacklogPanel () {
@@ -83,9 +83,11 @@ public void addBacklogUpdateListener(Runnable listener) {
8383 onBacklogUpdate .add (listener );
8484 }
8585
86- public void setSubmissions (List <ProgrammingSubmission > submissions ) {
87- this .lastFetchedSubmissions = new ArrayList <>(submissions );
88- this .lastFetchedSubmissions .sort (Comparator .comparing (ProgrammingSubmission ::getSubmissionDate ));
86+ public void setAssessments (List <PackedAssessment > assessments ) {
87+ this .lastFetchedAssessments = new ArrayList <>(assessments );
88+ // Sort by submission date, which matches the ordering in the Artemis backlog
89+ this .lastFetchedAssessments .sort (
90+ Comparator .comparing (a -> a .submission ().getSubmissionDate ()));
8991 this .updateBacklog ();
9092 }
9193
@@ -97,78 +99,84 @@ public void clear() {
9799 private void updateBacklog () {
98100 backlogList .removeAll ();
99101
102+ if (PluginState .getInstance ().hasReviewConfig ()) {
103+ shownSubmissionsLabel .setText ("Disabled" );
104+ backlogList .add (new JBLabel ("No backlog in review mode" ));
105+ this .updateUI ();
106+ return ;
107+ }
108+
100109 String searchText = searchField .getText ();
101110 boolean firstRound = showFirstRound .isSelected ();
102111 boolean secondRound = showSecondRound .isSelected ();
103112
104113 int shown = 0 ;
105- for (ProgrammingSubmission submission : lastFetchedSubmissions ) {
106- if (searchText != null && !submission .getParticipantIdentifier ().contains (searchText )) {
114+ for (var assessment : this .lastFetchedAssessments ) {
115+ if (searchText != null
116+ && !assessment .submission ().getParticipantIdentifier ().contains (searchText )) {
107117 continue ;
108118 }
109119
110- if (!firstRound && submission . getCorrectionRound () == 0 ) {
120+ if (!firstRound && assessment . round () == CorrectionRound . FIRST ) {
111121 continue ;
112122 }
113123
114- if (!secondRound && submission . getCorrectionRound () == 1 ) {
124+ if (!secondRound && assessment . round () == CorrectionRound . SECOND ) {
115125 continue ;
116126 }
117127
118128 shown ++;
119129
120130 // Participant
121- backlogList .add (new JBLabel (submission .getParticipantIdentifier ()));
122- addResultDateLabel (submission );
131+ backlogList .add (new JBLabel (assessment . submission () .getParticipantIdentifier ()));
132+ addResultDateLabel (assessment );
123133 // Correction Round
124- backlogList .add (new JBLabel ("Round " + (submission .getCorrectionRound () + 1 )));
125- addScoreItem (submission );
126- addActionButton (submission );
134+ backlogList .add (new JBLabel (
135+ switch (assessment .round ()) {
136+ case FIRST -> "Round 1" ;
137+ case SECOND -> "Round 2" ;
138+ case REVIEW -> "Review" ;
139+ }));
140+ addScoreItem (assessment );
141+ addActionButton (assessment );
127142 }
128143
129- shownSubmissionsLabel .setText ("Showing %d/%d" .formatted (shown , lastFetchedSubmissions .size ()));
144+ shownSubmissionsLabel .setText ("Showing %d/%d" .formatted (shown , lastFetchedAssessments .size ()));
130145
131146 this .updateUI ();
132147 }
133148
134- private void addResultDateLabel (ProgrammingSubmission submission ) {
135- var latestResult = submission .getLatestResult ();
149+ private void addResultDateLabel (PackedAssessment assessment ) {
136150 String resultText = "" ;
137- if (submission .isSubmitted ()) {
138- resultText = latestResult
139- .map (resultDTO -> resultDTO
140- .completionDate ()
141- .withZoneSameInstant (ZoneId .systemDefault ())
142- .format (DateTimeFormatter .ofPattern ("dd.MM.yyyy HH:mm" )))
143- .orElse ("???" );
151+ if (assessment .isSubmitted ()) {
152+ resultText = assessment
153+ .result ()
154+ .completionDate ()
155+ .withZoneSameInstant (ZoneId .systemDefault ())
156+ .format (ArtemisUtils .DATE_TIME_PATTERN );
144157 }
145158 backlogList .add (new JBLabel (resultText ), "alignx right" );
146159 }
147160
148- private void addScoreItem (ProgrammingSubmission submission ) {
161+ private void addScoreItem (PackedAssessment assessment ) {
149162 // Score in percent
150- var latestResult = submission .getLatestResult ();
151163 String resultText = "" ;
152- if (submission .isSubmitted ()) {
153- resultText = latestResult
154- .map (resultDTO -> "%.0f%%" .formatted (resultDTO .score ()))
155- .orElse ("???" );
164+ if (assessment .isSubmitted ()) {
165+ resultText = "%.0f%%" .formatted (assessment .result ().score ());
156166 }
157167 backlogList .add (new JBLabel (resultText ), "alignx right" );
158168 }
159169
160- private void addActionButton (ProgrammingSubmission submission ) {
170+ private void addActionButton (PackedAssessment assessment ) {
161171 // Action Button
162172 JButton reopenButton ;
163- if (submission .isSubmitted ()) {
173+ if (assessment .isSubmitted ()) {
164174 reopenButton = new JButton ("Reopen" );
165- } else if ( ArtemisUtils . isSubmissionStarted ( submission )) {
175+ } else {
166176 reopenButton = new JButton ("Continue" );
167177 reopenButton .setForeground (JBColor .ORANGE );
168- } else {
169- reopenButton = new JButton ("Start" );
170178 }
171- reopenButton .addActionListener (a -> PluginState .getInstance ().reopenAssessment (submission ));
179+ reopenButton .addActionListener (a -> PluginState .getInstance ().reopenAssessment (assessment ));
172180 backlogList .add (reopenButton , "growx" );
173181 }
174182}
0 commit comments