3283 TR
This commit is contained in:
parent
60a70da3db
commit
59a215422f
core/src/main/java/se/su/dsv/scipro/finalseminar
view/src
main/java/se/su/dsv/scipro
test/java/se/su/dsv/scipro
finalseminar
supervisor/pages
@ -39,7 +39,7 @@ public interface FinalSeminarService extends GenericService<FinalSeminar, Long>,
|
||||
|
||||
Iterable<FinalSeminar> findByStartDateAfter(Date date);
|
||||
|
||||
List<FinalSeminar> findProjectOpposing(Project project);
|
||||
List<FinalSeminarOpposition> getOppositionsByProjectAuthors(Project project);
|
||||
|
||||
FinalSeminar deleteThesis(FinalSeminar seminar);
|
||||
|
||||
|
@ -4,7 +4,6 @@ import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import com.querydsl.jpa.impl.JPAQuery;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import se.su.dsv.scipro.file.FileReference;
|
||||
@ -18,21 +17,16 @@ import se.su.dsv.scipro.report.OppositionReportService;
|
||||
import se.su.dsv.scipro.reviewing.RoughDraftApproval;
|
||||
import se.su.dsv.scipro.reviewing.RoughDraftApprovalService;
|
||||
import se.su.dsv.scipro.system.AbstractServiceImpl;
|
||||
import se.su.dsv.scipro.system.ProjectType;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
import se.su.dsv.scipro.util.Either;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Provider;
|
||||
import java.time.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.querydsl.core.types.dsl.Expressions.allOf;
|
||||
import static com.querydsl.core.types.dsl.Expressions.anyOf;
|
||||
|
||||
public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, Long> implements FinalSeminarService {
|
||||
|
||||
@Inject
|
||||
@ -421,8 +415,12 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FinalSeminar> findProjectOpposing(Project project) {
|
||||
return findAll(projectOpposing(project));
|
||||
public List<FinalSeminarOpposition> getOppositionsByProjectAuthors(Project project) {
|
||||
return project.getProjectParticipants()
|
||||
.stream()
|
||||
.map(author -> findUserOpposing(project, author))
|
||||
.flatMap(List::stream)
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -495,30 +493,6 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
|
||||
return QFinalSeminar.finalSeminar.deleted.eq(deleted);
|
||||
}
|
||||
|
||||
private BooleanExpression projectOpposing(Project project) {
|
||||
List<BooleanExpression> booleanExpressions = new ArrayList<>();
|
||||
for (User projectParticipant : project.getProjectParticipants()) {
|
||||
final BooleanExpression booleanExpression = QFinalSeminar.finalSeminar.oppositions.any()
|
||||
.in(getFinalSeminarOppositions(projectParticipant, project.getProjectType()));
|
||||
booleanExpressions.add(booleanExpression);
|
||||
}
|
||||
return anyOf(booleanExpressions.toArray(new BooleanExpression[0]));
|
||||
}
|
||||
|
||||
private List<FinalSeminarOpposition> getFinalSeminarOppositions(User projectParticipant, ProjectType projectType) {
|
||||
return new JPAQuery<FinalSeminarOpposition>(em())
|
||||
.from(QFinalSeminarOpposition.finalSeminarOpposition)
|
||||
.where(QFinalSeminarOpposition.finalSeminarOpposition.project.projectType.eq(projectType),
|
||||
QFinalSeminarOpposition.finalSeminarOpposition.user.eq(projectParticipant))
|
||||
.fetch();
|
||||
}
|
||||
|
||||
private BooleanExpression projectParticipating(Project project) {
|
||||
return allOf(
|
||||
QFinalSeminar.finalSeminar.activeParticipations.any().user.in(project.getProjectParticipants()),
|
||||
QFinalSeminar.finalSeminar.activeParticipations.any().project.projectType.eq(project.getProjectType()));
|
||||
}
|
||||
|
||||
private BooleanExpression startDateIsAfter(Date date) {
|
||||
return QFinalSeminar.finalSeminar.startDate.after(date);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ public class ProjectOppositionsListPanel extends GenericPanel<Project> {
|
||||
public ProjectOppositionsListPanel(final String id, final IModel<Project> model) {
|
||||
super(id, model);
|
||||
|
||||
add(new AutoHidingListView<>("oppositions", getOpponents(getSeminars())) {
|
||||
add(new AutoHidingListView<>("oppositions", getOpponents(model)) {
|
||||
@Override
|
||||
protected void populateItem(final ListItem<FinalSeminarOpposition> item) {
|
||||
PageParameters pp = new PageParameters();
|
||||
@ -51,28 +51,16 @@ public class ProjectOppositionsListPanel extends GenericPanel<Project> {
|
||||
.add(new OppositeVisibility(get("oppositions"))));
|
||||
}
|
||||
|
||||
private IModel<? extends List<FinalSeminarOpposition>> getOpponents(final IModel<List<FinalSeminar>> seminars) {
|
||||
private IModel<? extends List<FinalSeminarOpposition>> getOpponents(final IModel<Project> project) {
|
||||
return new LoadableDetachableModel<>() {
|
||||
@Override
|
||||
protected List<FinalSeminarOpposition> load() {
|
||||
return seminars.getObject().stream()
|
||||
.flatMap(input -> input.getOppositions().stream())
|
||||
.filter(input -> getModelObject().isParticipant(input.getUser()))
|
||||
.toList();
|
||||
return finalSeminarService.getOppositionsByProjectAuthors(project.getObject());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetach() {
|
||||
seminars.detach();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private IModel<List<FinalSeminar>> getSeminars() {
|
||||
return new LoadableDetachableModel<>() {
|
||||
@Override
|
||||
protected List<FinalSeminar> load() {
|
||||
return finalSeminarService.findProjectOpposing(getModelObject());
|
||||
project.detach();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -169,9 +169,8 @@ public class CriteriaPanel extends GenericPanel<SupervisorGradingReport> {
|
||||
public OppositionFeedbackPanel(final String id, final IModel<User> author, final IModel<GradingCriterion> gradingCriterion) {
|
||||
super(id, author);
|
||||
this.gradingCriterion = gradingCriterion;
|
||||
final IModel<List<FinalSeminar>> allOppositions = LoadableDetachableModel.of(() ->
|
||||
finalSeminarService.findProjectOpposing(CriteriaPanel.this.getModelObject().getProject()));
|
||||
final IModel<List<FinalSeminarOpposition>> authorOppositions = allOppositions.map(this::getAuthorsOppositions);
|
||||
final IModel<List<FinalSeminarOpposition>> authorOppositions = LoadableDetachableModel.of(() ->
|
||||
finalSeminarService.findUserOpposing(CriteriaPanel.this.getModelObject().getProject(), author.getObject()));
|
||||
|
||||
modal = new ModalWindowPlus("modal");
|
||||
modal.setTitle("Opposition feedback");
|
||||
@ -199,14 +198,6 @@ public class CriteriaPanel extends GenericPanel<SupervisorGradingReport> {
|
||||
setVisibilityAllowed(isOppositionCriteria && isEnabledInHierarchy());
|
||||
}
|
||||
|
||||
private List<FinalSeminarOpposition> getAuthorsOppositions(final List<FinalSeminar> seminars) {
|
||||
return seminars.stream()
|
||||
.map(FinalSeminar::getOppositions)
|
||||
.flatMap(Collection::stream)
|
||||
.filter(opposition -> Objects.equals(opposition.getUser(), getModelObject()))
|
||||
.toList();
|
||||
}
|
||||
|
||||
private class OppositionFeedbackList extends Fragment {
|
||||
public OppositionFeedbackList(final String id, final IModel<List<FinalSeminarOpposition>> authorOppositions) {
|
||||
super(id, "oppositionFeedback", OppositionFeedbackPanel.this, authorOppositions);
|
||||
|
@ -34,7 +34,7 @@ public class ProjectOppositionsListPanelTest extends SciProTest {
|
||||
billsOpposition = newOpposition(bill, finalSeminar, bills);
|
||||
finalSeminar.addOpposition(billsOpposition);
|
||||
finalSeminar.addOpposition(newOpposition(bob, finalSeminar, bobs));
|
||||
when(finalSeminarService.findProjectOpposing(eq(bills))).thenReturn(Collections.singletonList(finalSeminar));
|
||||
when(finalSeminarService.getOppositionsByProjectAuthors(eq(bills))).thenReturn(List.of(billsOpposition));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -40,7 +40,7 @@ public class SupervisorProjectDetailsPageTest extends PageTest {
|
||||
FileDescription fileDescription = new FileDescription();
|
||||
fileDescription.setMimeType("pdf");
|
||||
fileDescription.setId(1L);
|
||||
when(finalSeminarService.findProjectOpposing(any(Project.class))).thenReturn(Collections.emptyList());
|
||||
when(finalSeminarService.getOppositionsByProjectAuthors(any(Project.class))).thenReturn(Collections.emptyList());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user