3064 PO review 2) give more detailed information about active participations performed by authors to the supervisor
This commit is contained in:
parent
0492746493
commit
3a66ffdf0f
core/src/main/java/se/su/dsv/scipro/finalseminar
view/src
main/java/se/su/dsv/scipro/finalseminar
ProjectActiveParticipationListPanel.htmlProjectActiveParticipationListPanel.javaProjectActiveParticipationListPanel.utf8.properties
test/java/se/su/dsv/scipro
finalseminar
supervisor/pages
@ -27,7 +27,6 @@ public interface FinalSeminarService extends GenericService<FinalSeminar, Long>,
|
||||
|
||||
|
||||
List<FinalSeminar> findProjectOpposing(Project project);
|
||||
List<FinalSeminar> findProjectParticipating(Project project, Pageable pageable);
|
||||
|
||||
FinalSeminar deleteThesis(FinalSeminar seminar);
|
||||
@Override
|
||||
|
@ -387,11 +387,6 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
|
||||
return findAll(projectOpposing(project));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FinalSeminar> findProjectParticipating(Project project, Pageable pageable) {
|
||||
return findAll(projectParticipating(project), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActiveParticipant(FinalSeminar seminar, User activeParticipant) {
|
||||
return alreadyParticipant(activeParticipant, seminar);
|
||||
|
@ -2,15 +2,23 @@
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<wicket:enclosure child="active.participations">
|
||||
<ul class="list-unstyled">
|
||||
<li wicket:id="active.participations">
|
||||
<a wicket:id="finalSeminar"><span wicket:id="finalSeminar.startDate"></span></a>
|
||||
<span wicket:id="user"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</wicket:enclosure>
|
||||
<p wicket:id="no.active.participation">No authors of this project have performed an active participation.</p>
|
||||
<ul class="list-unstyled">
|
||||
<li wicket:id="authors">
|
||||
<span wicket:id="author">[Stina Student]</span>
|
||||
(<wicket:message key="count_performed_explanation">
|
||||
<strong wicket:id="count_approved">[0]</strong> approved out of
|
||||
<strong wicket:id="count_required">[2]</strong> mandatory
|
||||
</wicket:message>)
|
||||
<ul>
|
||||
<li wicket:id="participations">
|
||||
<span wicket:id="seminar">[Title of seminars project]</span>
|
||||
<wicket:enclosure>
|
||||
(<em wicket:id="grade">[(not) approved]</em>)
|
||||
</wicket:enclosure>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -1,23 +1,20 @@
|
||||
package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import org.apache.wicket.markup.html.basic.EnumLabel;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
||||
import org.apache.wicket.markup.html.list.ListItem;
|
||||
import org.apache.wicket.markup.html.list.ListView;
|
||||
import org.apache.wicket.markup.html.panel.GenericPanel;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LoadableDetachableModel;
|
||||
import org.apache.wicket.model.ResourceModel;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import se.su.dsv.scipro.components.AutoHidingListView;
|
||||
import se.su.dsv.scipro.components.DateLabel;
|
||||
import se.su.dsv.scipro.components.OppositeVisibility;
|
||||
import se.su.dsv.scipro.data.enums.DateStyle;
|
||||
import se.su.dsv.scipro.profile.UserLinkPanel;
|
||||
import se.su.dsv.scipro.profile.UserLabel;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.util.PageParameterKeys;
|
||||
import se.su.dsv.scipro.system.ProjectType;
|
||||
import se.su.dsv.scipro.system.ProjectTypeSettings;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ProjectActiveParticipationListPanel extends GenericPanel<Project> {
|
||||
@ -26,46 +23,39 @@ public class ProjectActiveParticipationListPanel extends GenericPanel<Project> {
|
||||
|
||||
public ProjectActiveParticipationListPanel(final String id, final IModel<Project> model) {
|
||||
super(id, model);
|
||||
add(new AutoHidingListView<>("active.participations", getActiveParticipants(getSeminars())) {
|
||||
add(new ListView<>("authors", model.map(Project::getProjectParticipants).map(ArrayList::new)) {
|
||||
@Override
|
||||
protected void populateItem(final ListItem<FinalSeminarActiveParticipation> item) {
|
||||
PageParameters pp = new PageParameters();
|
||||
pp.add(PageParameterKeys.MAP.get(Project.class), item.getModelObject().getFinalSeminar().getProject().getId());
|
||||
protected void populateItem(ListItem<User> item) {
|
||||
IModel<List<FinalSeminarActiveParticipation>> participations = LoadableDetachableModel.of(() ->
|
||||
finalSeminarService.findUserParticipating(
|
||||
ProjectActiveParticipationListPanel.this.getModelObject(),
|
||||
item.getModelObject()));
|
||||
|
||||
BookmarkablePageLink<Void> finalSeminarLink = new BookmarkablePageLink<>("finalSeminar", ProjectFinalSeminarDetailsPage.class, pp);
|
||||
finalSeminarLink.add(new DateLabel("finalSeminar.startDate", item.getModel().map(p -> p.getFinalSeminar().getStartDate()), DateStyle.DATE));
|
||||
item.add(finalSeminarLink);
|
||||
item.add(new UserLinkPanel("user", item.getModel().map(FinalSeminarParticipation::getUser)));
|
||||
item.add(new UserLabel("author", item.getModel()));
|
||||
|
||||
IModel<Integer> countRequired = model
|
||||
.map(Project::getProjectType)
|
||||
.map(ProjectType::getProjectTypeSettings)
|
||||
.map(ProjectTypeSettings::getMinimumActiveParticipationsToBeGraded);
|
||||
item.add(new Label("count_required", countRequired));
|
||||
IModel<Long> countPerformed = participations.map(this::countApproved);
|
||||
item.add(new Label("count_approved", countPerformed));
|
||||
|
||||
item.add(new ListView<>("participations", participations) {
|
||||
@Override
|
||||
protected void populateItem(ListItem<FinalSeminarActiveParticipation> item) {
|
||||
item.add(new Label("seminar", item.getModel()
|
||||
.map(FinalSeminarParticipation::getFinalSeminar)
|
||||
.map(FinalSeminar::getProjectTitle)));
|
||||
item.add(new EnumLabel<>("grade", item.getModel()
|
||||
.map(FinalSeminarActiveParticipation::getGrade)));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private long countApproved(List<FinalSeminarActiveParticipation> p) {
|
||||
return p.stream().filter(FinalSeminarParticipation::isApproved).count();
|
||||
}
|
||||
});
|
||||
|
||||
add(new Label("no.active.participation", new ResourceModel("no.active.participation"))
|
||||
.add(new OppositeVisibility(get("active.participations"))));
|
||||
}
|
||||
|
||||
private IModel<? extends List<FinalSeminarActiveParticipation>> getActiveParticipants(final IModel<List<FinalSeminar>> seminars) {
|
||||
return new LoadableDetachableModel<>() {
|
||||
@Override
|
||||
protected List<FinalSeminarActiveParticipation> load() {
|
||||
return seminars.getObject().stream()
|
||||
.flatMap(input -> input.getActiveParticipations().stream())
|
||||
.filter(input -> getModelObject().isParticipant(input.getUser()))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetach() {
|
||||
seminars.detach();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private IModel<List<FinalSeminar>> getSeminars() {
|
||||
return new LoadableDetachableModel<>() {
|
||||
@Override
|
||||
protected List<FinalSeminar> load() {
|
||||
return finalSeminarService.findProjectParticipating(getModelObject(), new PageRequest(0, Integer.MAX_VALUE));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
4
view/src/main/java/se/su/dsv/scipro/finalseminar/ProjectActiveParticipationListPanel.utf8.properties
4
view/src/main/java/se/su/dsv/scipro/finalseminar/ProjectActiveParticipationListPanel.utf8.properties
@ -1 +1,3 @@
|
||||
no.active.participation= No authors of this project have performed an active participation.
|
||||
FinalSeminarGrade.APPROVED=approved
|
||||
FinalSeminarGrade.NOT_APPROVED=failed
|
||||
count_performed_explanation=${count_approved} out of ${count_required} mandatory
|
||||
|
@ -3,7 +3,6 @@ package se.su.dsv.scipro.finalseminar;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import se.su.dsv.scipro.SciProTest;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.system.DegreeType;
|
||||
@ -12,9 +11,8 @@ import se.su.dsv.scipro.system.User;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class ProjectActiveParticipationListPanelTest extends SciProTest {
|
||||
@ -34,14 +32,13 @@ public class ProjectActiveParticipationListPanelTest extends SciProTest {
|
||||
FinalSeminar finalSeminar = new FinalSeminar(bobs);
|
||||
billsParticipation = newActiveParticipation(bill, finalSeminar, bills);
|
||||
finalSeminar.addActiveParticipant(billsParticipation);
|
||||
finalSeminar.addActiveParticipant(newActiveParticipation(bob, finalSeminar, bobs));
|
||||
when(finalSeminarService.findProjectParticipating(eq(bills), any(Pageable.class))).thenReturn(Collections.singletonList(finalSeminar));
|
||||
when(finalSeminarService.findUserParticipating(bills, bill)).thenReturn(List.of(billsParticipation));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lists_correct_oppositions() {
|
||||
ProjectActiveParticipationListPanel panel = tester.startComponentInPage(new ProjectActiveParticipationListPanel("id", Model.of(bills)));
|
||||
tester.assertModelValue(path(panel, "active.participations"), Collections.singletonList(billsParticipation));
|
||||
tester.assertModelValue(path(panel, "authors", 0, "participations"), Collections.singletonList(billsParticipation));
|
||||
}
|
||||
|
||||
private FinalSeminarActiveParticipation newActiveParticipation(final User author, final FinalSeminar finalSeminar, final Project authors) {
|
||||
|
@ -4,7 +4,6 @@ import org.apache.wicket.Page;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import se.su.dsv.scipro.PageTest;
|
||||
import se.su.dsv.scipro.file.FileDescription;
|
||||
import se.su.dsv.scipro.group.Group;
|
||||
@ -42,7 +41,6 @@ public class SupervisorProjectDetailsPageTest extends PageTest {
|
||||
fileDescription.setMimeType("pdf");
|
||||
fileDescription.setId(1L);
|
||||
when(finalSeminarService.findProjectOpposing(any(Project.class))).thenReturn(Collections.emptyList());
|
||||
when(finalSeminarService.findProjectParticipating(any(Project.class), any(Pageable.class))).thenReturn(Collections.emptyList());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user