2870 Allow supervisors to set national subject category

This commit is contained in:
Andreas Svanberg 2024-01-22 12:50:39 +01:00
parent fabe1eff51
commit c23981f510
8 changed files with 62 additions and 0 deletions

@ -1,9 +1,12 @@
package se.su.dsv.scipro.grading;
import java.util.List;
import java.util.Optional;
public interface NationalSubjectCategoryRepository {
void save(NationalSubjectCategory nationalSubjectCategory);
Optional<NationalSubjectCategory> findByExternalId(Integer externalId);
List<NationalSubjectCategory> findAll();
}

@ -6,6 +6,7 @@ import se.su.dsv.scipro.system.AbstractRepository;
import javax.inject.Inject;
import javax.inject.Provider;
import java.util.List;
import java.util.Optional;
public class NationalSubjectCategoryRepositoryImpl
@ -37,4 +38,11 @@ public class NationalSubjectCategoryRepositoryImpl
.fetchOne();
return Optional.ofNullable(nationalSubjectCategory);
}
@Override
public List<NationalSubjectCategory> findAll() {
return from(QNationalSubjectCategory.nationalSubjectCategory)
.select(QNationalSubjectCategory.nationalSubjectCategory)
.fetch();
}
}

@ -1,9 +1,12 @@
package se.su.dsv.scipro.grading;
import java.util.List;
import java.util.Optional;
public interface NationalSubjectCategoryService {
Optional<NationalSubjectCategory> findByExternalId(Integer externalId);
void save(NationalSubjectCategory nationalSubjectCategory);
List<NationalSubjectCategory> listCategories();
}

@ -1,6 +1,7 @@
package se.su.dsv.scipro.grading;
import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
public class NationalSubjectCategoryServiceImpl
@ -22,4 +23,9 @@ public class NationalSubjectCategoryServiceImpl
public void save(NationalSubjectCategory nationalSubjectCategory) {
nationalSubjectCategoryRepository.save(nationalSubjectCategory);
}
@Override
public List<NationalSubjectCategory> listCategories() {
return nationalSubjectCategoryRepository.findAll();
}
}

@ -6,6 +6,8 @@ import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import se.su.dsv.scipro.project.Project;
@ -39,6 +41,10 @@ public class PublicationMetadata {
@Column(name = "keywords_english")
private String keywordsEnglish;
@ManyToOne
@JoinColumn(name = "national_subject_category_id")
private NationalSubjectCategory nationalSubjectCategory;;
public Long getId() {
return id;
}
@ -87,6 +93,14 @@ public class PublicationMetadata {
this.keywordsEnglish = keywordsEnglish;
}
public NationalSubjectCategory getNationalSubjectCategory() {
return nationalSubjectCategory;
}
public void setNationalSubjectCategory(NationalSubjectCategory nationalSubjectCategory) {
this.nationalSubjectCategory = nationalSubjectCategory;
}
@Override
public String toString() {
return "PublicationMetadata{" +
@ -96,6 +110,7 @@ public class PublicationMetadata {
", abstractEnglish='" + abstractEnglish + '\'' +
", keywordsSwedish='" + keywordsSwedish + '\'' +
", keywordsEnglish='" + keywordsEnglish + '\'' +
", nationalSubjectCategory=" + nationalSubjectCategory + '\'' +
'}';
}

@ -0,0 +1,4 @@
ALTER TABLE publication_metadata ADD COLUMN national_subject_category_id BIGINT NULL;
ALTER TABLE publication_metadata
ADD CONSTRAINT FK_publication_metadata_national_subject_category
FOREIGN KEY (national_subject_category_id) REFERENCES national_subject_category(id);

@ -22,6 +22,11 @@
<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:panel>
</body>
</html>

@ -1,13 +1,21 @@
package se.su.dsv.scipro.grading;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.LambdaChoiceRenderer;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LambdaModel;
import org.apache.wicket.model.LoadableDetachableModel;
import se.su.dsv.scipro.system.Language;
import javax.inject.Inject;
public class PublicationMetadataFormComponentPanel extends GenericPanel<PublicationMetadata> {
@Inject
NationalSubjectCategoryService nationalSubjectCategoryService;
public PublicationMetadataFormComponentPanel(String id, IModel<PublicationMetadata> metadataModel) {
super(id, metadataModel);
@ -19,6 +27,16 @@ public class PublicationMetadataFormComponentPanel extends GenericPanel<Publicat
TextField<String> keywordsSwedish = new TextField<>("keywords_sv", LambdaModel.of(metadataModel, PublicationMetadata::getKeywordsSwedish, PublicationMetadata::setKeywordsSwedish));
keywordsSwedish.setVisible(inSwedish());
add(keywordsSwedish);
DropDownChoice<NationalSubjectCategory> nationalSubjectCategoryChoice = new DropDownChoice<>(
"national_subject_category",
LambdaModel.of(
metadataModel,
PublicationMetadata::getNationalSubjectCategory,
PublicationMetadata::setNationalSubjectCategory),
LoadableDetachableModel.of(nationalSubjectCategoryService::listCategories),
new LambdaChoiceRenderer<>(NationalSubjectCategory::getEnglishName, NationalSubjectCategory::getId));
nationalSubjectCategoryChoice.setNullValid(true);
add(nationalSubjectCategoryChoice);
}
private boolean inSwedish() {