diff --git a/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataService.java b/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataService.java index 173f85b9cc..7e3118d786 100644 --- a/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataService.java +++ b/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataService.java @@ -6,4 +6,6 @@ public interface PublicationMetadataService { PublicationMetadata getByProject(Project project); void save(PublicationMetadata publicationMetadata); + + boolean hasSuppliedPublicationMetadata(Project project, boolean noNationalSubjectCategoriesAvailable); } diff --git a/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataServiceImpl.java index 5f141f9d19..ddc34c04a5 100644 --- a/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataServiceImpl.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.grading; import se.su.dsv.scipro.project.Project; +import se.su.dsv.scipro.system.Language; import javax.inject.Inject; import java.util.Objects; @@ -29,4 +30,17 @@ class PublicationMetadataServiceImpl implements PublicationMetadataService { public void save(PublicationMetadata publicationMetadata) { publicationMetadataRepository.save(publicationMetadata); } + + @Override + public boolean hasSuppliedPublicationMetadata(Project project, boolean noNationalSubjectCategoriesAvailable) { + final PublicationMetadata metadata = getByProject(project); + return notBlank(metadata.getAbstractEnglish()) && + (project.getLanguage() == Language.ENGLISH || notBlank(metadata.getAbstractSwedish())) && + (noNationalSubjectCategoriesAvailable || metadata.getNationalSubjectCategory() != null); + } + + private boolean notBlank(String s) { + return s != null && !s.isBlank(); + } + } diff --git a/view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessment.html b/view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessmentPanel.html similarity index 100% rename from view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessment.html rename to view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessmentPanel.html diff --git a/view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessment.java b/view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessmentPanel.java similarity index 92% rename from view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessment.java rename to view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessmentPanel.java index 39af1b6660..6468da55a3 100644 --- a/view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessment.java +++ b/view/src/main/java/se/su/dsv/scipro/grading/IndividualAuthorAssessmentPanel.java @@ -33,8 +33,10 @@ import java.util.List; import java.util.Objects; import java.util.function.Predicate; -public class IndividualAuthorAssessment extends GenericPanel<User> { +public class IndividualAuthorAssessmentPanel extends GenericPanel<User> { + @Inject + private NationalSubjectCategoryService nationalSubjectCategoryService; @Inject private GradingReportService gradingReportService; @Inject @@ -48,7 +50,7 @@ public class IndividualAuthorAssessment extends GenericPanel<User> { private final IModel<Project> projectModel; - public IndividualAuthorAssessment(String id, IModel<Project> projectModel, IModel<User> authorModel) { + public IndividualAuthorAssessmentPanel(String id, IModel<Project> projectModel, IModel<User> authorModel) { super(id, authorModel); this.projectModel = projectModel; @@ -75,7 +77,7 @@ public class IndividualAuthorAssessment extends GenericPanel<User> { redGreen("status_plagiarism", hasSubmittedPlagiarismAnalysis, "must_perform_plagiarism_check", "plagiarism_check_performed"); - IModel<Boolean> hasSuppliedPublicationMetadata = hasSuppliedPublicationMetadata(projectModel); + IModel<Boolean> hasSuppliedPublicationMetadata = Model.of(publicationMetadataService.hasSuppliedPublicationMetadata(projectModel.getObject(), nationalSubjectCategoryService.listCategories().isEmpty())); redGreen("status_publication_metadata", hasSuppliedPublicationMetadata, "must_supply_publication_metadata", "publication_metadata_supplied"); @@ -182,18 +184,6 @@ public class IndividualAuthorAssessment extends GenericPanel<User> { }); } - private IModel<Boolean> hasSuppliedPublicationMetadata(IModel<Project> projectModel) { - return LoadableDetachableModel.of(() -> publicationMetadataService.getByProject(projectModel.getObject())) - .filter(metadata -> notBlank(metadata.getAbstractEnglish()) || notBlank(metadata.getAbstractSwedish())) - .filter(metadata -> notBlank(metadata.getKeywordsEnglish()) || notBlank(metadata.getKeywordsSwedish())) - .filter(metadata -> metadata.getNationalSubjectCategory() != null) - .isPresent(); - } - - private boolean notBlank(String s) { - return s != null && !s.isBlank(); - } - private boolean gradingBasisDone(SupervisorGradingReport supervisorGradingReport) { boolean criteriaMet = supervisorGradingReport.getProjectCriteria() .stream() diff --git a/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.html b/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.html index 23a1b6ca0b..416e983b21 100644 --- a/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.html +++ b/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.html @@ -3,12 +3,12 @@ <body> <wicket:panel> <div class="mb-3"> - <label class="form-label" for="abstract_en">Abstract (English)</label> + <label class="form-label" for="abstract_en">Abstract (English) (required)</label> <textarea class="form-control" id="abstract_en" wicket:id="abstract_en"></textarea> </div> <wicket:enclosure> <div class="mb-3"> - <label class="form-label" for="abstract_sv">Abstract (Swedish)</label> + <label class="form-label" for="abstract_sv">Abstract (Swedish) (required)</label> <textarea class="form-control" id="abstract_sv" wicket:id="abstract_sv"></textarea> </div> </wicket:enclosure> @@ -22,11 +22,13 @@ <input class="form-control" id="keywords_sv" wicket:id="keywords_sv"> </div> </wicket:enclosure> - <div class="mb-3"> - <label class="form-label" for="national_subject_category">National subject category</label> - <select class="form-select" id="national_subject_category" wicket:id="national_subject_category"> - </select> - </div> + <wicket:enclosure> + <div class="mb-3"> + <label class="form-label" for="national_subject_category">National subject category (required)</label> + <select class="form-select" id="national_subject_category" wicket:id="national_subject_category"> + </select> + </div> + </wicket:enclosure> </wicket:panel> </body> </html> \ No newline at end of file diff --git a/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.java b/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.java index d15fad7f8e..4e50a1210c 100644 --- a/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.java +++ b/view/src/main/java/se/su/dsv/scipro/grading/PublicationMetadataFormComponentPanel.java @@ -45,6 +45,7 @@ public class PublicationMetadataFormComponentPanel extends GenericPanel<Publicat .ifPresent(nationalSubjectCategoryChoice::setDefaultModelObject); } nationalSubjectCategoryChoice.setNullValid(true); + nationalSubjectCategoryChoice.setVisible(!availableCategories.getObject().isEmpty()); add(nationalSubjectCategoryChoice); } diff --git a/view/src/main/java/se/su/dsv/scipro/grading/SupervisorGradingReportPage.java b/view/src/main/java/se/su/dsv/scipro/grading/SupervisorGradingReportPage.java index c39e8eee79..772ae8fba8 100644 --- a/view/src/main/java/se/su/dsv/scipro/grading/SupervisorGradingReportPage.java +++ b/view/src/main/java/se/su/dsv/scipro/grading/SupervisorGradingReportPage.java @@ -46,6 +46,8 @@ import java.util.Set; @ProjectModuleComponent(ProjectModule.GRADING) public class SupervisorGradingReportPage extends AbstractSupervisorProjectDetailsPage { + @Inject + private NationalSubjectCategoryService nationalSubjectCategoryService; @Inject private GeneralSystemSettingsService generalSystemSettingsService; @Inject @@ -76,12 +78,7 @@ public class SupervisorGradingReportPage extends AbstractSupervisorProjectDetail .isPresent(); add(newGreenHighlight("step_plagiarism", hasCheckedForPlagiarism, new ResourceModel("step_plagiarism"))); - IModel<Boolean> hasProvidedPublicationMetadata = - projectModel.map(publicationMetadataService::getByProject) - .filter(metadata -> notBlank(metadata.getAbstractEnglish()) || notBlank(metadata.getAbstractSwedish())) - .filter(metadata -> notBlank(metadata.getKeywordsEnglish()) || notBlank(metadata.getKeywordsSwedish())) - .filter(metadata -> metadata.getNationalSubjectCategory() != null) - .isPresent(); + IModel<Boolean> hasProvidedPublicationMetadata = Model.of(publicationMetadataService.hasSuppliedPublicationMetadata(projectModel.getObject(), nationalSubjectCategoryService.listCategories().isEmpty())); add(newGreenHighlight("step_publication_metadata", hasProvidedPublicationMetadata, new ResourceModel("step_publication_metadata"))); IModel<List<SupervisorGradingReport>> gradingReports = LoadableDetachableModel.of(() -> @@ -132,7 +129,7 @@ public class SupervisorGradingReportPage extends AbstractSupervisorProjectDetail .map(author -> new DetachableServiceModel<>(userService, author)) .map(authorModel -> createTab( authorModel.map(User::getFullName), - panelId -> new IndividualAuthorAssessment(panelId, projectModel, authorModel))) + panelId -> new IndividualAuthorAssessmentPanel(panelId, projectModel, authorModel))) .toList(); tabs.addAll(authorTabs); @@ -152,10 +149,6 @@ public class SupervisorGradingReportPage extends AbstractSupervisorProjectDetail add(new ExaminerTimelinePanel("examiner_timeline", projectModel)); } - private boolean notBlank(String s) { - return s != null && !s.isBlank(); - } - private Component newGreenHighlight(String id, IModel<Boolean> completed, IModel<String> text) { return new RedGreenLabel(id, completed, text, text); }