Allows admins to manage grading report templates #14
@ -1,17 +1,42 @@
|
|||||||
package se.su.dsv.scipro.report;
|
package se.su.dsv.scipro.report;
|
||||||
|
|
||||||
import jakarta.persistence.Basic;
|
import jakarta.persistence.Basic;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.EnumType;
|
||||||
|
import jakarta.persistence.Enumerated;
|
||||||
import jakarta.persistence.MappedSuperclass;
|
import jakarta.persistence.MappedSuperclass;
|
||||||
|
|
||||||
@MappedSuperclass
|
@MappedSuperclass
|
||||||
public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
||||||
|
|
||||||
|
public enum Flag {
|
||||||
|
/**
|
||||||
|
* Criterion marked with this flag will extra functionality related
|
||||||
niat8586 marked this conversation as resolved
Outdated
|
|||||||
|
* to the authors submitted reflection. It should only be used on
|
||||||
|
* individual criteria.
|
||||||
|
*/
|
||||||
|
REFLECTION,
|
||||||
|
/**
|
||||||
|
* Criterion marked with this flag will extra functionality related
|
||||||
|
* to the authors performed opposition. For example, it will have its
|
||||||
|
* points and feedback filled in when the seminar supervisor assesses
|
||||||
|
* their opposition and submitted report. It should only be used on
|
||||||
|
* individual criteria.
|
||||||
|
*/
|
||||||
|
OPPOSITION
|
||||||
|
}
|
||||||
|
|
||||||
@Basic(optional = false)
|
@Basic(optional = false)
|
||||||
protected int pointsRequiredToPass;
|
protected int pointsRequiredToPass;
|
||||||
|
|
||||||
@Basic
|
@Basic
|
||||||
private boolean fx = true;
|
private boolean fx = true;
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
@Column(name = "flag")
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
private Flag flag;
|
||||||
|
|
||||||
protected AbstractGradingCriterion() {
|
protected AbstractGradingCriterion() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -21,6 +46,17 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
|||||||
this.pointsRequiredToPass = pointsRequiredToPass;
|
this.pointsRequiredToPass = pointsRequiredToPass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected AbstractGradingCriterion(
|
||||||
|
String title,
|
||||||
|
String titleEn,
|
||||||
|
Integer sortOrder,
|
||||||
|
int pointsRequiredToPass,
|
||||||
|
Flag flag)
|
||||||
|
{
|
||||||
|
this(title, titleEn, sortOrder, pointsRequiredToPass);
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
public abstract boolean isProjectCriterion();
|
public abstract boolean isProjectCriterion();
|
||||||
|
|
||||||
public abstract boolean isIndividualCriterion();
|
public abstract boolean isIndividualCriterion();
|
||||||
@ -35,6 +71,14 @@ public abstract class AbstractGradingCriterion extends AbstractCriterion {
|
|||||||
return this.fx;
|
return this.fx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Flag getFlag() {
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlag(Flag flag) {
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
if (o == this) return true;
|
if (o == this) return true;
|
||||||
|
@ -30,7 +30,7 @@ public abstract class GradingCriterion extends AbstractGradingCriterion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GradingCriterion(GradingReport gradingReport, GradingCriterionTemplate gradingCriterionTemplate) {
|
GradingCriterion(GradingReport gradingReport, GradingCriterionTemplate gradingCriterionTemplate) {
|
||||||
super(gradingCriterionTemplate.getTitle(), gradingCriterionTemplate.getTitleEn(), gradingCriterionTemplate.getSortOrder(), gradingCriterionTemplate.getPointsRequiredToPass());
|
super(gradingCriterionTemplate.getTitle(), gradingCriterionTemplate.getTitleEn(), gradingCriterionTemplate.getSortOrder(), gradingCriterionTemplate.getPointsRequiredToPass(), gradingCriterionTemplate.getFlag());
|
||||||
this.gradingReport = gradingReport;
|
this.gradingReport = gradingReport;
|
||||||
for (GradingCriterionPointTemplate pointTemplate : gradingCriterionTemplate.getGradingCriterionPointTemplates()) {
|
for (GradingCriterionPointTemplate pointTemplate : gradingCriterionTemplate.getGradingCriterionPointTemplates()) {
|
||||||
gradingCriterionPoints.add(new GradingCriterionPoint(
|
gradingCriterionPoints.add(new GradingCriterionPoint(
|
||||||
|
@ -69,13 +69,23 @@ public class GradingReportTemplate extends DomainObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GradingCriterionTemplate addProjectCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates) {
|
public GradingCriterionTemplate addProjectCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates) {
|
||||||
|
return addProjectCriterion(title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GradingCriterionTemplate addProjectCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates, AbstractGradingCriterion.Flag flag) {
|
||||||
GradingCriterionTemplate gradingCriterionTemplate = new ProjectGradingCriterionTemplate(this, criteria.size(), title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates);
|
GradingCriterionTemplate gradingCriterionTemplate = new ProjectGradingCriterionTemplate(this, criteria.size(), title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates);
|
||||||
|
gradingCriterionTemplate.setFlag(flag);
|
||||||
criteria.add(gradingCriterionTemplate);
|
criteria.add(gradingCriterionTemplate);
|
||||||
return gradingCriterionTemplate;
|
return gradingCriterionTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GradingCriterionTemplate addIndividualCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates) {
|
public GradingCriterionTemplate addIndividualCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates) {
|
||||||
|
return addIndividualCriterion(title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GradingCriterionTemplate addIndividualCriterion(String title, String titleEn, int pointsRequiredToPass, List<GradingCriterionPointTemplate> gradingCriterionPointTemplates, AbstractGradingCriterion.Flag flag) {
|
||||||
GradingCriterionTemplate gradingCriterionTemplate = new IndividualGradingCriterionTemplate(this, criteria.size(), title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates);
|
GradingCriterionTemplate gradingCriterionTemplate = new IndividualGradingCriterionTemplate(this, criteria.size(), title, titleEn, pointsRequiredToPass, gradingCriterionPointTemplates);
|
||||||
|
gradingCriterionTemplate.setFlag(flag);
|
||||||
criteria.add(gradingCriterionTemplate);
|
criteria.add(gradingCriterionTemplate);
|
||||||
return gradingCriterionTemplate;
|
return gradingCriterionTemplate;
|
||||||
}
|
}
|
||||||
|
@ -75,20 +75,27 @@ public class GradingReportTemplateRepoImpl extends GenericRepo<GradingReportTemp
|
|||||||
.stream()
|
.stream()
|
||||||
.map(this::toPointTemplate)
|
.map(this::toPointTemplate)
|
||||||
.toList();
|
.toList();
|
||||||
|
AbstractGradingCriterion.Flag flag = criteria.flag() == null ? null : switch (criteria.flag()) {
|
||||||
|
case OPPOSITION -> AbstractGradingCriterion.Flag.OPPOSITION;
|
||||||
|
case REFLECTION -> AbstractGradingCriterion.Flag.REFLECTION;
|
||||||
|
//case null -> null; sigh java 17
|
||||||
|
};
|
||||||
switch (criteria.type()) {
|
switch (criteria.type()) {
|
||||||
case THESIS -> {
|
case THESIS -> {
|
||||||
gradingReportTemplate.addProjectCriterion(
|
gradingReportTemplate.addProjectCriterion(
|
||||||
criteria.title().swedish(),
|
criteria.title().swedish(),
|
||||||
criteria.title().english(),
|
criteria.title().english(),
|
||||||
criteria.minimumPointsRequiredToPass(),
|
criteria.minimumPointsRequiredToPass(),
|
||||||
pointTemplates);
|
pointTemplates,
|
||||||
|
flag);
|
||||||
}
|
}
|
||||||
case INDIVIDUAL -> {
|
case INDIVIDUAL -> {
|
||||||
gradingReportTemplate.addIndividualCriterion(
|
gradingReportTemplate.addIndividualCriterion(
|
||||||
criteria.title().swedish(),
|
criteria.title().swedish(),
|
||||||
criteria.title().english(),
|
criteria.title().english(),
|
||||||
criteria.minimumPointsRequiredToPass(),
|
criteria.minimumPointsRequiredToPass(),
|
||||||
pointTemplates);
|
pointTemplates,
|
||||||
|
flag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
ALTER TABLE `grading_criterion_template`
|
||||||
|
ADD COLUMN `flag` VARCHAR(64);
|
||||||
|
ALTER TABLE `GradingCriterion`
|
||||||
|
ADD COLUMN `flag` VARCHAR(64);
|
@ -85,6 +85,10 @@ class EditingGradingTemplate implements Serializable {
|
|||||||
Point editingPoint = new Point(point);
|
Point editingPoint = new Point(point);
|
||||||
this.points.add(editingPoint);
|
this.points.add(editingPoint);
|
||||||
}
|
}
|
||||||
|
this.flag = criteria.getFlag() == null ? null : switch (criteria.getFlag()) {
|
||||||
|
case OPPOSITION -> Flag.OPPOSITION;
|
||||||
|
case REFLECTION -> Flag.REFLECTION;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private Criteria() {}
|
private Criteria() {}
|
||||||
|
@ -10,3 +10,4 @@ Type.PROJECT=Once per thesis
|
|||||||
Type.INDIVIDUAL=Individually for each author
|
Type.INDIVIDUAL=Individually for each author
|
||||||
minimum.Required=You must set the minimum number of points for each grade
|
minimum.Required=You must set the minimum number of points for each grade
|
||||||
grade.Required=You must set the letter for each grade
|
grade.Required=You must set the letter for each grade
|
||||||
|
flag.nullValid=None
|
||||||
|
@ -121,7 +121,7 @@ public class CriteriaPanel extends GenericPanel<SupervisorGradingReport> {
|
|||||||
grading.add(pf);
|
grading.add(pf);
|
||||||
grading.add(new Label("pfCriteria", item.getModel().combineWith(language, (gc, lang) -> gc.getGradingCriterionPoints().get(1).getDescription(lang))));
|
grading.add(new Label("pfCriteria", item.getModel().combineWith(language, (gc, lang) -> gc.getGradingCriterionPoints().get(1).getDescription(lang))));
|
||||||
|
|
||||||
if (item.getModelObject().getTitle().startsWith("Ö1 ")) {
|
if (item.getModelObject().getFlag() == AbstractGradingCriterion.Flag.OPPOSITION) {
|
||||||
grading.setEnabled(false);
|
grading.setEnabled(false);
|
||||||
}
|
}
|
||||||
item.add(new AjaxConfirmationLink<>("enable", "Are you sure you want to grade this criteria? It is usually filled in by the seminar supervisor") {
|
item.add(new AjaxConfirmationLink<>("enable", "Are you sure you want to grade this criteria? It is usually filled in by the seminar supervisor") {
|
||||||
@ -194,7 +194,7 @@ public class CriteriaPanel extends GenericPanel<SupervisorGradingReport> {
|
|||||||
@Override
|
@Override
|
||||||
protected void onConfigure() {
|
protected void onConfigure() {
|
||||||
super.onConfigure();
|
super.onConfigure();
|
||||||
final boolean isOppositionCriteria = gradingCriterion.getObject().getTitle().startsWith("Ö1 ");
|
final boolean isOppositionCriteria = gradingCriterion.getObject().getFlag() == AbstractGradingCriterion.Flag.OPPOSITION;
|
||||||
setVisibilityAllowed(isOppositionCriteria && isEnabledInHierarchy());
|
setVisibilityAllowed(isOppositionCriteria && isEnabledInHierarchy());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user
"Criterion marked with this flag will extra functionality related ..." should it say "Criterion marked with this flag will add extra functionality related
Same with the other comments i'm guessing.