2353 Replace var with explicit type
This commit is contained in:
parent
156cf96036
commit
888b58202a
core/src
main/java/se/su/dsv/scipro
daisyExternal/impl
finalseminar
firstmeeting
match
AddActivityPlanOnProjectStart.javaApplicationPeriod.javaApplicationPeriodServiceImpl.javaIdeaServiceImpl.java
misc
notifications
peer
reusable
survey
workerthreads
test/java/se/su/dsv/scipro
finalseminar
firstmeeting
reviewing
daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers
view/src
main/java/se/su/dsv/scipro
SciProApplication.java
admin/pages
applicationperiod
checklists
components
finalseminar
firstmeeting
grading
match
IdeaDownloadPanel.javaIdeaTholanderInfoPanel.javaProjectAllSupervisorIdeasPanel.javaProjectIdeaDetailsPage.javaProjectIdeaSubmissionPanel.java
notifications/pages
peer
profile
project
reviewer
statistics
supervisor/pages
test/java/se/su/dsv/scipro
applicationperiod
finalseminar
firstmeeting
@ -62,13 +62,13 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
}
|
||||
|
||||
private void importAuthorLevel(final User user, final Map<Integer, se.su.dsv.scipro.io.dto.Program> programCache) {
|
||||
final var semesterPrograms = client
|
||||
final Stream<Pair<Integer, Integer>> semesterPrograms = client
|
||||
.getProgramAdmissionsForStudent(user.getIdentifier())
|
||||
.stream()
|
||||
.map(pa -> new Pair<>(pa.getAdmissionSemester(), pa.getProgram().getId()));
|
||||
final List<CourseRegistration> courseRegistrations = client
|
||||
.getCourseRegistrationsForStudent(user.getIdentifier());
|
||||
final var registrationSemesters = courseRegistrations
|
||||
final Stream<Pair<Integer, Integer>> registrationSemesters = courseRegistrations
|
||||
.stream()
|
||||
.filter(cr -> cr.getProgramId() != null)
|
||||
.map(cr -> new Pair<>(cr.getSemester(), cr.getProgramId()));
|
||||
@ -83,7 +83,7 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
.or(() -> getOverrideBasedOnCourse(courseRegistrations))
|
||||
.orElse(DegreeType.BACHELOR);
|
||||
|
||||
final var oldLevel = user.getDegreeType();
|
||||
final DegreeType oldLevel = user.getDegreeType();
|
||||
user.setDegreeType(latestLevel);
|
||||
if (oldLevel != user.getDegreeType()) {
|
||||
userService.save(user);
|
||||
@ -231,7 +231,7 @@ public class ImporterTransactionsImpl implements ImporterTransactions {
|
||||
}
|
||||
|
||||
private void addCreditsToProject(Set<StudentProjectParticipant> authors, Project project) {
|
||||
final var oldCredits = project.getCredits();
|
||||
final int oldCredits = project.getCredits();
|
||||
for (StudentProjectParticipant contributor : authors) {
|
||||
Course course = contributor.getCourse();
|
||||
project.setCredits(course.getCredits());
|
||||
|
@ -72,7 +72,7 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
|
||||
final Date earliestCreationDate = daysService.workDaysAfter(new Date(),
|
||||
finalSeminarSettingsService.getInstance().getDaysAheadToCreate());
|
||||
|
||||
var move = tryMove(finalSeminar, to, earliestCreationDate, nonWorkDayPeriodService::isNonWorkDay);
|
||||
Either<SchedulingError, FinalSeminar> move = tryMove(finalSeminar, to, earliestCreationDate, nonWorkDayPeriodService::isNonWorkDay);
|
||||
move.foreach(seminar -> {
|
||||
FinalSeminar moved = save(seminar);
|
||||
eventBus.post(new FinalSeminarMovedEvent(moved, to));
|
||||
|
@ -62,19 +62,19 @@ public class FirstMeetingReminderWorker extends AbstractWorker {
|
||||
|
||||
@Override
|
||||
public void doWork() {
|
||||
final var ideas = ideaService.findAll(filter);
|
||||
final var ideasToday = ideaService.findAll(todayFilter);
|
||||
final List<Idea> ideas = ideaService.findAll(filter);
|
||||
final List<Idea> ideasToday = ideaService.findAll(todayFilter);
|
||||
|
||||
final var today = LocalDate.now(clock);
|
||||
final LocalDate today = LocalDate.now(clock);
|
||||
|
||||
final var needReminding = ideas.stream()
|
||||
final Map<User, List<Idea>> needReminding = ideas.stream()
|
||||
.filter(idea -> needReminding(idea, today))
|
||||
.collect(Collectors.groupingBy(idea -> idea.getMatch().getSupervisor()));
|
||||
final var needRemindingNow = ideasToday.stream()
|
||||
final Map<User, List<Idea>> needRemindingNow = ideasToday.stream()
|
||||
.filter(idea -> needRemindingToday(idea, today))
|
||||
.collect(Collectors.groupingBy(idea -> idea.getMatch().getSupervisor()));
|
||||
|
||||
final var baseURL = generalSystemSettingsService.getGeneralSystemSettingsInstance().getSciproURL();
|
||||
final String baseURL = generalSystemSettingsService.getGeneralSystemSettingsInstance().getSciproURL();
|
||||
|
||||
beginTransaction();
|
||||
needReminding.entrySet()
|
||||
@ -89,14 +89,14 @@ public class FirstMeetingReminderWorker extends AbstractWorker {
|
||||
}
|
||||
|
||||
boolean needRemindingToday(final Idea idea, final LocalDate today) {
|
||||
final var courseStartDate = idea.getApplicationPeriod().getCourseStartDate();
|
||||
final var datesToRemind = Set.of(courseStartDate);
|
||||
final LocalDate courseStartDate = idea.getApplicationPeriod().getCourseStartDate();
|
||||
final Set<LocalDate> datesToRemind = Set.of(courseStartDate);
|
||||
return containsSameDay(datesToRemind, today);
|
||||
}
|
||||
|
||||
private boolean needReminding(final Idea idea, final LocalDate today) {
|
||||
final var courseStartDate = idea.getApplicationPeriod().getCourseStartDate();
|
||||
final var datesToRemind = calculateReminderDaysBasedOnWorkDays(courseStartDate);
|
||||
final LocalDate courseStartDate = idea.getApplicationPeriod().getCourseStartDate();
|
||||
final Set<LocalDate> datesToRemind = calculateReminderDaysBasedOnWorkDays(courseStartDate);
|
||||
return containsSameDay(datesToRemind, today);
|
||||
}
|
||||
|
||||
@ -115,10 +115,10 @@ public class FirstMeetingReminderWorker extends AbstractWorker {
|
||||
}
|
||||
|
||||
MailEvent generateReminder(String baseUrl, User supervisor, List<Idea> ideas) {
|
||||
var reminder = new MailEvent();
|
||||
MailEvent reminder = new MailEvent();
|
||||
reminder.getRecipients().add(supervisor);
|
||||
reminder.setSubject("A friendly reminder to book First meeting(s)");
|
||||
var lines = ideas.stream().map(idea ->
|
||||
String lines = ideas.stream().map(idea ->
|
||||
"-Course start: " + idea.getCourseStartDate() + '\n' +
|
||||
"-Deadline: " + deadline(idea) + '\n' +
|
||||
"-Authors: " + idea.getAuthorNames() + '\n' +
|
||||
@ -149,12 +149,12 @@ public class FirstMeetingReminderWorker extends AbstractWorker {
|
||||
}
|
||||
|
||||
private MailEvent generateReminderToday(User supervisor, List<Idea> ideas) {
|
||||
var reminder = new MailEvent();
|
||||
MailEvent reminder = new MailEvent();
|
||||
reminder.getRecipients().add(supervisor);
|
||||
var gru = Optional.ofNullable(supervisor.getUnit()).flatMap(unit -> Optional.ofNullable(unit.getMatchResponsible())).map(EmailRecipient::new);
|
||||
Optional<EmailRecipient> gru = Optional.ofNullable(supervisor.getUnit()).flatMap(unit -> Optional.ofNullable(unit.getMatchResponsible())).map(EmailRecipient::new);
|
||||
gru.ifPresent(gruEmail -> reminder.addRecipients(Set.of(gruEmail)));
|
||||
reminder.setSubject("A friendly reminder to book First meeting without further delay");
|
||||
var lines = ideas.stream().map(idea ->
|
||||
String lines = ideas.stream().map(idea ->
|
||||
"-Course start: " + idea.getCourseStartDate() + '\n' +
|
||||
"-Authors: " + idea.getAuthorNames() + '\n' +
|
||||
"-Supervisor: " + supervisor.getFullName() + '\n' +
|
||||
|
@ -7,6 +7,7 @@ import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.system.ProjectModule;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.util.Date;
|
||||
|
||||
@ -37,7 +38,7 @@ public class AddActivityPlanOnProjectStart {
|
||||
.filter(appt -> project.hasModule(ProjectModule.ACTIVITY_PLAN))
|
||||
.ifPresent(template ->
|
||||
{
|
||||
final var courseStartDate = applicationPeriod
|
||||
final Instant courseStartDate = applicationPeriod
|
||||
.getCourseStartDate()
|
||||
.atTime(applicationPeriod.getCourseStartTime())
|
||||
.atZone(ZoneId.systemDefault())
|
||||
|
@ -153,7 +153,7 @@ public class ApplicationPeriod extends DomainObject {
|
||||
}
|
||||
|
||||
public boolean isOpen() {
|
||||
final var now = LocalDate.now();
|
||||
final LocalDate now = LocalDate.now();
|
||||
return !(now.isBefore(startDate) || now.isAfter(endDate));
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,7 @@ class ApplicationPeriodServiceImpl extends AbstractServiceImpl<ApplicationPeriod
|
||||
@Override
|
||||
@Transactional
|
||||
public ApplicationPeriod getCurrentPeriod(ProjectType pc) {
|
||||
final var currentDate = LocalDate.now(clock);
|
||||
final LocalDate currentDate = LocalDate.now(clock);
|
||||
return findOne(startedBefore(currentDate).and(endedAfter(currentDate)).and(haveProjectType(pc)));
|
||||
}
|
||||
|
||||
@ -114,13 +114,13 @@ class ApplicationPeriodServiceImpl extends AbstractServiceImpl<ApplicationPeriod
|
||||
|
||||
@Override
|
||||
public boolean courseStartHasPassed(ApplicationPeriod ap) {
|
||||
final var now = LocalDate.now(clock);
|
||||
final LocalDate now = LocalDate.now(clock);
|
||||
return !now.isBefore(ap.getCourseStartDate());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endDateIsReached(ApplicationPeriod ap) {
|
||||
final var now = LocalDate.now(clock);
|
||||
final LocalDate now = LocalDate.now(clock);
|
||||
return now.isAfter(ap.getEndDate());
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import se.su.dsv.scipro.data.dataobjects.Member;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettings;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
|
||||
import se.su.dsv.scipro.match.Idea.Status;
|
||||
import se.su.dsv.scipro.match.Idea.Type;
|
||||
@ -171,7 +172,7 @@ class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements IdeaSer
|
||||
// TODO: Merge this validation with the #acceptIdea method so that validation is always done
|
||||
@Override
|
||||
public Pair<Boolean, String> validateStudentAcceptance(Idea idea, User creator, User coAuthor, final ApplicationPeriod ap) {
|
||||
final var generalSystemSettingsInstance = generalSystemSettingsService.getGeneralSystemSettingsInstance();
|
||||
final GeneralSystemSettings generalSystemSettingsInstance = generalSystemSettingsService.getGeneralSystemSettingsInstance();
|
||||
if (idea.getMatchStatus() != Status.UNMATCHED) {
|
||||
return new Pair<>(Boolean.FALSE, NO_LONGER_AVAILABLE_ERROR);
|
||||
}
|
||||
@ -265,9 +266,9 @@ class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements IdeaSer
|
||||
@Transactional
|
||||
public void delete(final Idea entity) {
|
||||
super.delete(entity);
|
||||
final var source = new NotificationSource();
|
||||
final NotificationSource source = new NotificationSource();
|
||||
source.setMessage(entity.getTitle());
|
||||
final var members = entity.getIdeaParticipations()
|
||||
final Set<Member> members = entity.getIdeaParticipations()
|
||||
.stream()
|
||||
.map(ip -> new Member(ip.getUser(), Member.Type.AUTHOR))
|
||||
.collect(Collectors.toSet());
|
||||
@ -286,10 +287,10 @@ class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements IdeaSer
|
||||
added.add(partner);
|
||||
}
|
||||
}
|
||||
final var currentParticipants = idea.getIdeaParticipations().iterator();
|
||||
final Iterator<IdeaParticipation> currentParticipants = idea.getIdeaParticipations().iterator();
|
||||
while (currentParticipants.hasNext()) {
|
||||
IdeaParticipation participant = currentParticipants.next();
|
||||
final var user = participant.getUser();
|
||||
final User user = participant.getUser();
|
||||
if (!partners.contains(user) && !Objects.equals(user, creator)) {
|
||||
currentParticipants.remove();
|
||||
removed.add(user);
|
||||
@ -303,7 +304,7 @@ class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements IdeaSer
|
||||
}
|
||||
for (User user : removed) {
|
||||
NotificationSource source = new NotificationSource();
|
||||
final var recipients = new HashSet<Member>();
|
||||
final HashSet<Member> recipients = new HashSet<>();
|
||||
recipients.add(new Member(user, Member.Type.CO_AUTHOR));
|
||||
notificationController.notifyIdeaWithCustomRecipients(theIdea, IdeaEvent.Event.REMOVED_AS_PARTNER, source, recipients);
|
||||
source.setMessage(user.getFullName());
|
||||
|
@ -55,7 +55,7 @@ public class DaysServiceImpl implements DaysService {
|
||||
return date;
|
||||
}
|
||||
else {
|
||||
final var dayBefore = date.minusDays(1);
|
||||
final java.time.LocalDate dayBefore = date.minusDays(1);
|
||||
if (isWorkDay(dayBefore)) {
|
||||
return workDaysAhead(dayBefore, days);
|
||||
}
|
||||
@ -74,7 +74,7 @@ public class DaysServiceImpl implements DaysService {
|
||||
}
|
||||
|
||||
private boolean isWeekend(final java.time.LocalDate date) {
|
||||
final var dayOfWeek = date.getDayOfWeek();
|
||||
final DayOfWeek dayOfWeek = date.getDayOfWeek();
|
||||
return dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY;
|
||||
}
|
||||
|
||||
|
@ -121,7 +121,7 @@ public class NotificationControllerImpl implements NotificationController {
|
||||
data.setAdditionalSource(source.getAdditionalMessage());
|
||||
|
||||
// Have to make sure the custom set participants are actually set to receive
|
||||
final var filteredRecipients = recipients.stream()
|
||||
final Set<Member> filteredRecipients = recipients.stream()
|
||||
.filter(m -> receiverConfiguration.isReceiving(Notification.Type.IDEA, event, m.getType()))
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
@ -227,7 +227,7 @@ public class NotificationControllerImpl implements NotificationController {
|
||||
|
||||
@Override
|
||||
public void notifyCustom(CustomEvent.Event event, NotificationSource source, Set<Member> recipients) {
|
||||
final var data = new CustomEvent();
|
||||
final CustomEvent data = new CustomEvent();
|
||||
data.setEvent(event);
|
||||
data.setSource(source.getMessage());
|
||||
data.setAdditionalSource(source.getAdditionalMessage());
|
||||
|
@ -69,11 +69,11 @@ public class PeerPortalImpl implements PeerPortal, PerformReviewService {
|
||||
review.setPeerRequest(peerRequest);
|
||||
review.setProject(project);
|
||||
review.setReviewer(student);
|
||||
final var numDaysToSubmitPeerReview = peerRequest.getProject()
|
||||
final int numDaysToSubmitPeerReview = peerRequest.getProject()
|
||||
.getProjectType()
|
||||
.getProjectTypeSettings()
|
||||
.getNumDaysToSubmitPeerReview();
|
||||
final var deadline = daysService.workDaysAfter(new Date(), numDaysToSubmitPeerReview);
|
||||
final Date deadline = daysService.workDaysAfter(new Date(), numDaysToSubmitPeerReview);
|
||||
review.setDeadline(deadline);
|
||||
review = peerReviewRepository.save(review);
|
||||
|
||||
|
@ -104,7 +104,7 @@ public final class SciProUtilities {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
final var calendar = Calendar.getInstance();
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
calendar.clear();
|
||||
calendar.set(localDate.getYear(), localDate.getMonthValue() - 1, localDate.getDayOfMonth());
|
||||
return calendar;
|
||||
|
@ -47,10 +47,10 @@ class SurveyServiceImpl implements SurveyService {
|
||||
|
||||
@Override
|
||||
public boolean shouldFillOutSurvey(final Project project, final User user) {
|
||||
final var questions = questionRepository.findAll();
|
||||
final var hasFinalThesis = finalThesisService.hasFinalThesis(project);
|
||||
final var survey = surveyRepository.getSurvey(project, user);
|
||||
final var submittedSurvey = survey.isPresent() && survey.get().isSubmitted();
|
||||
final List<Question> questions = questionRepository.findAll();
|
||||
final boolean hasFinalThesis = finalThesisService.hasFinalThesis(project);
|
||||
final Optional<Survey> survey = surveyRepository.getSurvey(project, user);
|
||||
final boolean submittedSurvey = survey.isPresent() && survey.get().isSubmitted();
|
||||
final boolean surveyAvailable = generalSystemSettingsService.getGeneralSystemSettingsInstance().isFinalSurveyAvailable();
|
||||
return surveyAvailable && hasFinalThesis && !submittedSurvey && !questions.isEmpty();
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ public class IdeaExportWorker extends AbstractWorker {
|
||||
}
|
||||
|
||||
private Date getCourseStartDate(final Idea idea) {
|
||||
final var courseStartDateTime = idea.getApplicationPeriod()
|
||||
final Instant courseStartDateTime = idea.getApplicationPeriod()
|
||||
.getCourseStartDateTime()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toInstant();
|
||||
|
@ -20,10 +20,10 @@ public class ExtendedFinalSeminarServiceImplTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
var master = new ProjectType(DegreeType.MASTER, "Master", "Master");
|
||||
var exemptedProject = Project.builder().title("Title").projectType(master).build();
|
||||
ProjectType master = new ProjectType(DegreeType.MASTER, "Master", "Master");
|
||||
Project exemptedProject = Project.builder().title("Title").projectType(master).build();
|
||||
exemptedProject.setFinalSeminarRuleExempted(true);
|
||||
var notExemptedProject = Project.builder().title("Title").projectType(master).build();
|
||||
Project notExemptedProject = Project.builder().title("Title").projectType(master).build();
|
||||
|
||||
exempted = new FinalSeminar(exemptedProject);
|
||||
notExempted = new FinalSeminar(notExemptedProject);
|
||||
@ -31,28 +31,28 @@ public class ExtendedFinalSeminarServiceImplTest {
|
||||
|
||||
@Test
|
||||
public void exempted_final_seminar_will_always_move() {
|
||||
var move = FinalSeminarServiceImpl.tryMove(exempted, future, past, this::allDaysAreHoliday);
|
||||
Either<SchedulingError, FinalSeminar> move = FinalSeminarServiceImpl.tryMove(exempted, future, past, this::allDaysAreHoliday);
|
||||
|
||||
assertTrue(move.isRight());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void trying_to_move_to_a_non_work_day_is_not_allowed() {
|
||||
var move = FinalSeminarServiceImpl.tryMove(notExempted, future, past, this::allDaysAreHoliday);
|
||||
Either<SchedulingError, FinalSeminar> move = FinalSeminarServiceImpl.tryMove(notExempted, future, past, this::allDaysAreHoliday);
|
||||
|
||||
assertThat(move, is(Either.left(new NonWorkDay(future))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void trying_to_move_before_earliest_date_is_not_allowed() {
|
||||
var move = FinalSeminarServiceImpl.tryMove(notExempted, past, future, this::allDaysAreWorkDays);
|
||||
Either<SchedulingError, FinalSeminar> move = FinalSeminarServiceImpl.tryMove(notExempted, past, future, this::allDaysAreWorkDays);
|
||||
|
||||
assertThat(move, is(Either.left(new NotEnoughWorkDays(past, future))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void move_to_non_work_day_after_earliest_date_is_allowed() {
|
||||
var move = FinalSeminarServiceImpl.tryMove(notExempted, future, past, this::allDaysAreWorkDays);
|
||||
Either<SchedulingError, FinalSeminar> move = FinalSeminarServiceImpl.tryMove(notExempted, future, past, this::allDaysAreWorkDays);
|
||||
|
||||
assertTrue(move.isRight());
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ import org.mockito.Matchers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
|
||||
import se.su.dsv.scipro.mail.MailEvent;
|
||||
import se.su.dsv.scipro.mail.MailEventService;
|
||||
import se.su.dsv.scipro.match.ApplicationPeriod;
|
||||
import se.su.dsv.scipro.match.Idea;
|
||||
@ -48,48 +49,48 @@ public class FirstMeetingReminderWorkerTest{
|
||||
}
|
||||
|
||||
@Test public void should_remind_if_is_same_date() {
|
||||
var today = LocalDate.now();
|
||||
var idea = newIdea(today);
|
||||
LocalDate today = LocalDate.now();
|
||||
Idea idea = newIdea(today);
|
||||
|
||||
assertTrue(worker.needRemindingToday(idea, today));
|
||||
}
|
||||
|
||||
@Test public void should_not_remind_if_is_different_date() {
|
||||
var date = LocalDate.of(2020, Month.JANUARY, 12);
|
||||
var idea = newIdea(date);
|
||||
LocalDate date = LocalDate.of(2020, Month.JANUARY, 12);
|
||||
Idea idea = newIdea(date);
|
||||
|
||||
assertFalse(worker.needRemindingToday(idea, LocalDate.of(2020, Month.JANUARY, 13)));
|
||||
}
|
||||
|
||||
@Test public void reminder_should_include_title_of_every_idea() {
|
||||
var idea = newIdea(LocalDate.now());
|
||||
Idea idea = newIdea(LocalDate.now());
|
||||
|
||||
var reminder = worker.generateReminder("test-baseURL", idea.getMatch().getSupervisor(), List.of(idea));
|
||||
MailEvent reminder = worker.generateReminder("test-baseURL", idea.getMatch().getSupervisor(), List.of(idea));
|
||||
assertThat(reminder.getMessageBody(), containsString(idea.getTitle()));
|
||||
}
|
||||
|
||||
@Test public void generated_reminder_should_be_sent_to_the_supervisor() {
|
||||
var idea = newIdea(LocalDate.now());
|
||||
var supervisor = idea.getMatch().getSupervisor();
|
||||
Idea idea = newIdea(LocalDate.now());
|
||||
User supervisor = idea.getMatch().getSupervisor();
|
||||
|
||||
var reminder = worker.generateReminder("test-baseURL", supervisor, List.of(idea));
|
||||
MailEvent reminder = worker.generateReminder("test-baseURL", supervisor, List.of(idea));
|
||||
assertThat(reminder.getRecipients(), hasItem(supervisor));
|
||||
}
|
||||
|
||||
private User newUser() {
|
||||
var user = User.builder().firstName("John").lastName("Doe").emailAddress("john@example.com").build();
|
||||
User user = User.builder().firstName("John").lastName("Doe").emailAddress("john@example.com").build();
|
||||
user.setId(234L);
|
||||
return user;
|
||||
}
|
||||
|
||||
private ApplicationPeriod newApplicationPeriod(LocalDate startDate) {
|
||||
var period = new ApplicationPeriod();
|
||||
ApplicationPeriod period = new ApplicationPeriod();
|
||||
period.setCourseStartDate(startDate);
|
||||
return period;
|
||||
}
|
||||
|
||||
private Idea newIdea(LocalDate startDate) {
|
||||
var idea = new Idea();
|
||||
Idea idea = new Idea();
|
||||
idea.setTitle("I hate writing all this stupid manual test data");
|
||||
idea.setId(234L);
|
||||
idea.setMatch(newMatch(idea));
|
||||
@ -98,7 +99,7 @@ public class FirstMeetingReminderWorkerTest{
|
||||
}
|
||||
|
||||
private Match newMatch(Idea idea) {
|
||||
var supervisorMatch = new Match();
|
||||
Match supervisorMatch = new Match();
|
||||
supervisorMatch.setSupervisor(newUser());
|
||||
supervisorMatch.setIdea(idea);
|
||||
return supervisorMatch;
|
||||
|
@ -4,7 +4,9 @@ import org.junit.Test;
|
||||
import scala.Option;
|
||||
import scala.Tuple2;
|
||||
import scala.collection.JavaConverters;
|
||||
import scala.collection.immutable.Iterable;
|
||||
import se.su.dsv.scipro.file.FileDescription;
|
||||
import se.su.dsv.scipro.mail.MailEvent;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.system.*;
|
||||
|
||||
@ -18,57 +20,57 @@ public class ReviewerDecisionReminderWorkerTest {
|
||||
|
||||
@Test
|
||||
public void should_remind_if_is_same_date() {
|
||||
var today = new Date();
|
||||
var roughDraftApproval = newRoughDraftApproval();
|
||||
var needReminding = ReviewerDecisionReminderWorker.needReminding(x -> today, x -> set(today)).apply(today).apply(set(roughDraftApproval));
|
||||
Date today = new Date();
|
||||
RoughDraftApproval roughDraftApproval = newRoughDraftApproval();
|
||||
Iterable<Tuple2<ReviewerApproval, Date>> needReminding = ReviewerDecisionReminderWorker.needReminding(x -> today, x -> set(today)).apply(today).apply(set(roughDraftApproval));
|
||||
|
||||
assertThat(JavaConverters.asJavaCollection(needReminding), hasItem(Tuple2.apply(roughDraftApproval, today)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_not_remind_if_is_different_date() {
|
||||
var date = new Date(987452359L);
|
||||
var roughDraftApproval = newRoughDraftApproval();
|
||||
Date date = new Date(987452359L);
|
||||
RoughDraftApproval roughDraftApproval = newRoughDraftApproval();
|
||||
|
||||
var needReminding = ReviewerDecisionReminderWorker.needReminding(x -> new Date(0), x -> set(date)).apply(new Date(0)).apply(set(roughDraftApproval));
|
||||
Iterable<Tuple2<ReviewerApproval, Date>> needReminding = ReviewerDecisionReminderWorker.needReminding(x -> new Date(0), x -> set(date)).apply(new Date(0)).apply(set(roughDraftApproval));
|
||||
|
||||
assertThat(JavaConverters.asJavaCollection(needReminding), not(hasItem(Tuple2.apply(roughDraftApproval, new Date(0)))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reminder_should_include_title_of_every_idea() {
|
||||
var roughDraftApproval = newRoughDraftApproval();
|
||||
RoughDraftApproval roughDraftApproval = newRoughDraftApproval();
|
||||
|
||||
var reminder = ReviewerDecisionReminderWorker.generateRoughDraftReminder(Option.apply(roughDraftApproval.getProject().getReviewer()), set(Tuple2.apply(roughDraftApproval, new Date(0))));
|
||||
MailEvent reminder = ReviewerDecisionReminderWorker.generateRoughDraftReminder(Option.apply(roughDraftApproval.getProject().getReviewer()), set(Tuple2.apply(roughDraftApproval, new Date(0))));
|
||||
assertThat(reminder.getMessageBody(), containsString(roughDraftApproval.getProject().getTitle()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void generated_reminder_should_be_sent_to_the_reviewer() {
|
||||
var roughDraftApproval = newRoughDraftApproval();
|
||||
var reviewer = roughDraftApproval.getProject().getReviewer();
|
||||
RoughDraftApproval roughDraftApproval = newRoughDraftApproval();
|
||||
User reviewer = roughDraftApproval.getProject().getReviewer();
|
||||
|
||||
var reminder = ReviewerDecisionReminderWorker.generateRoughDraftReminder(Option.apply(reviewer), set(Tuple2.apply(roughDraftApproval, new Date())));
|
||||
MailEvent reminder = ReviewerDecisionReminderWorker.generateRoughDraftReminder(Option.apply(reviewer), set(Tuple2.apply(roughDraftApproval, new Date())));
|
||||
assertThat(reminder.getRecipients(), hasItem(reviewer));
|
||||
}
|
||||
|
||||
|
||||
private Unit newUnit() {
|
||||
var unit = new Unit();
|
||||
Unit unit = new Unit();
|
||||
unit.setMatchResponsible("test@test,test");
|
||||
return unit;
|
||||
}
|
||||
|
||||
private User newUser() {
|
||||
var user = User.builder().firstName("John").lastName("Doe").emailAddress("john@example.com").build();
|
||||
User user = User.builder().firstName("John").lastName("Doe").emailAddress("john@example.com").build();
|
||||
user.setId(234L);
|
||||
user.setUnit(newUnit());
|
||||
return user;
|
||||
}
|
||||
|
||||
private Project newProject() {
|
||||
var projectType = new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor");
|
||||
var project = Project.builder().title("This is a title").projectType(projectType).build();
|
||||
ProjectType projectType = new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor");
|
||||
Project project = Project.builder().title("This is a title").projectType(projectType).build();
|
||||
project.addReviewer(newUser());
|
||||
project.setHeadSupervisor(newUser());
|
||||
project.setId(555L);
|
||||
|
@ -1,5 +1,7 @@
|
||||
package se.su.dsv.scipro.integration.daisy.workers;
|
||||
|
||||
import io.opentracing.Scope;
|
||||
import io.opentracing.Span;
|
||||
import io.opentracing.Tracer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -73,11 +75,11 @@ public class UserImportWorker extends AbstractWorker {
|
||||
private void importUserDetails(final Map<Integer, Program> programCache) {
|
||||
for (final User user : userService.findAll()) {
|
||||
if (user.getIdentifier() != null) {
|
||||
final var span = tracer.buildSpan("Importing user")
|
||||
final Span span = tracer.buildSpan("Importing user")
|
||||
.withTag("scipro.user.id", user.getId())
|
||||
.withTag("daisy.user.id", user.getIdentifier())
|
||||
.start();
|
||||
try (var ignored = tracer.activateSpan(span)) {
|
||||
try (Scope ignored = tracer.activateSpan(span)) {
|
||||
Optional<Person> idPerson = daisyAPI.findPersonById(user.getIdentifier());
|
||||
if (idPerson.isPresent()) {
|
||||
Person person = idPerson.get();
|
||||
|
@ -100,7 +100,7 @@ public class SciProApplication extends LifecycleManagedWebApplication {
|
||||
|
||||
@Override
|
||||
protected IConverterLocator newConverterLocator() {
|
||||
final var converterLocator = new ConverterLocator();
|
||||
final ConverterLocator converterLocator = new ConverterLocator();
|
||||
converterLocator.set(LocalDate.class, new LocalDateConverter() {
|
||||
@Override
|
||||
protected DateTimeFormatter getDateTimeFormatter() {
|
||||
|
@ -91,7 +91,7 @@ public class AdminSurveyPage extends AbstractAdminProjectPage {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final var type = item.getModel().getObject().getType();
|
||||
final Question.Type type = item.getModel().getObject().getType();
|
||||
setVisible(type == Question.Type.MULTIPLE_CHOICE || type == Question.Type.SINGLE_CHOICE);
|
||||
}
|
||||
|
||||
@ -142,7 +142,7 @@ public class AdminSurveyPage extends AbstractAdminProjectPage {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final var selectedType = questionModel.getObject().getType();
|
||||
final Question.Type selectedType = questionModel.getObject().getType();
|
||||
setVisible(selectedType == Question.Type.MULTIPLE_CHOICE || selectedType == Question.Type.SINGLE_CHOICE);
|
||||
}
|
||||
};
|
||||
|
@ -64,12 +64,12 @@ public class AdminEditApplicationPeriodPage extends AbstractAdminMatchPage imple
|
||||
item.add(new Label("name", item.getModel().map(ProjectType::getName)));
|
||||
}
|
||||
});
|
||||
final var startDate = addDateField(START_DATE, LambdaModel.of(getModel(), ApplicationPeriod::getStartDate, ApplicationPeriod::setStartDate));
|
||||
final var endDate = addDateField(END_DATE, LambdaModel.of(getModel(), ApplicationPeriod::getEndDate, ApplicationPeriod::setEndDate));
|
||||
final var courseStartDate = addDateField(COURSE_START_DATE, LambdaModel.of(getModel(), ApplicationPeriod::getCourseStartDate, ApplicationPeriod::setCourseStartDate));
|
||||
final var courseEndDate = addDateField("courseEndDate", LambdaModel.of(getModel(), ApplicationPeriod::getCourseEndDate, ApplicationPeriod::setCourseEndDate));
|
||||
final FormComponent<LocalDate> startDate = addDateField(START_DATE, LambdaModel.of(getModel(), ApplicationPeriod::getStartDate, ApplicationPeriod::setStartDate));
|
||||
final FormComponent<LocalDate> endDate = addDateField(END_DATE, LambdaModel.of(getModel(), ApplicationPeriod::getEndDate, ApplicationPeriod::setEndDate));
|
||||
final FormComponent<LocalDate> courseStartDate = addDateField(COURSE_START_DATE, LambdaModel.of(getModel(), ApplicationPeriod::getCourseStartDate, ApplicationPeriod::setCourseStartDate));
|
||||
final FormComponent<LocalDate> courseEndDate = addDateField("courseEndDate", LambdaModel.of(getModel(), ApplicationPeriod::getCourseEndDate, ApplicationPeriod::setCourseEndDate));
|
||||
courseEndDate.setRequired(false);
|
||||
final var courseStartTime = new RequiredTextField<>("courseStartTime", LambdaModel.of(getModel(), ApplicationPeriod::getCourseStartTime, ApplicationPeriod::setCourseStartTime), LocalTime.class);
|
||||
final RequiredTextField<LocalTime> courseStartTime = new RequiredTextField<>("courseStartTime", LambdaModel.of(getModel(), ApplicationPeriod::getCourseStartTime, ApplicationPeriod::setCourseStartTime), LocalTime.class);
|
||||
courseStartTime.add(new BootstrapTimePicker());
|
||||
add(courseStartTime);
|
||||
add(new FencedFeedbackPanel("courseStartTimeFeedback", courseStartTime));
|
||||
|
@ -11,6 +11,8 @@ import se.su.dsv.scipro.checklist.ChecklistAnswer;
|
||||
import se.su.dsv.scipro.checklist.ChecklistQuestion;
|
||||
import se.su.dsv.scipro.profile.UserLabel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ChecklistAnswerCommentPanel extends Panel {
|
||||
|
||||
static final String TABLE = "table";
|
||||
@ -21,7 +23,7 @@ public class ChecklistAnswerCommentPanel extends Panel {
|
||||
public ChecklistAnswerCommentPanel(String id, IModel<ChecklistQuestion> question) {
|
||||
super(id, question);
|
||||
|
||||
final var answers = LambdaModel.of(question, ChecklistQuestion::getAnswers, ChecklistQuestion::setAnswers);
|
||||
final IModel<List<ChecklistAnswer>> answers = LambdaModel.of(question, ChecklistQuestion::getAnswers, ChecklistQuestion::setAnswers);
|
||||
WebMarkupContainer table = new WebMarkupContainer(TABLE) {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
|
@ -9,6 +9,8 @@ import org.apache.wicket.request.resource.PackageResourceReference;
|
||||
import org.apache.wicket.resource.JQueryPluginResourceReference;
|
||||
import org.joda.time.*;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class BootstrapTimeField extends DateTextField {
|
||||
public BootstrapTimeField(String id) {
|
||||
super(id, "HH:mm");
|
||||
@ -56,13 +58,13 @@ public class BootstrapTimeField extends DateTextField {
|
||||
|
||||
@Override
|
||||
public void updateModel() {
|
||||
var currentDate = getModelObject();
|
||||
Date currentDate = getModelObject();
|
||||
if (currentDate == null) {
|
||||
super.updateModel();
|
||||
} else {
|
||||
var date = new LocalDate(currentDate);
|
||||
var time = new LocalTime(getConvertedInput());
|
||||
var dateTime = date.toLocalDateTime(time);
|
||||
LocalDate date = new LocalDate(currentDate);
|
||||
LocalTime time = new LocalTime(getConvertedInput());
|
||||
LocalDateTime dateTime = date.toLocalDateTime(time);
|
||||
setModelObject(dateTime.toDate());
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ import se.su.dsv.scipro.project.ProjectService;
|
||||
import se.su.dsv.scipro.security.auth.roles.Roles;
|
||||
import se.su.dsv.scipro.session.SciProSession;
|
||||
import se.su.dsv.scipro.system.*;
|
||||
import se.su.dsv.scipro.util.Either;
|
||||
import se.su.dsv.scipro.util.JavascriptEventConfirmation;
|
||||
|
||||
import java.util.HashSet;
|
||||
@ -79,12 +80,12 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
|
||||
super(id, seminar);
|
||||
add(new FencedFeedbackPanel("feedback", SeminarCRUDPanel.this));
|
||||
|
||||
var maxParticipants = new RequiredTextField<>(MAX_PARTICIPANTS,
|
||||
RequiredTextField<Integer> maxParticipants = new RequiredTextField<>(MAX_PARTICIPANTS,
|
||||
LambdaModel.of(seminar, FinalSeminar::getMaxParticipants, FinalSeminar::setMaxParticipants),
|
||||
Integer.class);
|
||||
add(maxParticipants.add(RangeValidator.minimum(getModelObject().getMinActiveParticipants())));
|
||||
|
||||
var maxOpponents = new RequiredTextField<>(MAX_OPPONENTS,
|
||||
RequiredTextField<Integer> maxOpponents = new RequiredTextField<>(MAX_OPPONENTS,
|
||||
LambdaModel.of(seminar, FinalSeminar::getMaxOpponents, FinalSeminar::setMaxOpponents),
|
||||
Integer.class);
|
||||
add(maxOpponents.add(RangeValidator.minimum(getModelObject().getMinOpponents())));
|
||||
@ -139,7 +140,7 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
|
||||
}
|
||||
});
|
||||
|
||||
var languages = java.util.Arrays.asList(Language.values());
|
||||
List<Language> languages = java.util.Arrays.asList(Language.values());
|
||||
|
||||
if (getModelObject().getPresentationLanguage() == null) {
|
||||
getModelObject().setPresentationLanguage(getModelObject().getProject().getLanguage());
|
||||
@ -164,7 +165,7 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
|
||||
add(new ConfirmationLink<>(DELETE, seminar, new StringResourceModel("confirm", this)) {
|
||||
@Override
|
||||
public void onClick() {
|
||||
var project = getModelObject().getProject();
|
||||
Project project = getModelObject().getProject();
|
||||
seminarService.delete(getModelObject());
|
||||
setModelObject(new FinalSeminar(project));
|
||||
success(getString("deleted"));
|
||||
@ -274,7 +275,7 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
|
||||
|
||||
|
||||
private Optional<Project> getPotentialParticipantProject(User participant, ProjectType projectType) {
|
||||
var projects = projectService.getActiveProjects(participant, projectType);
|
||||
List<Project> projects = projectService.getActiveProjects(participant, projectType);
|
||||
if (projects.size() == 1) {
|
||||
return Optional.of(projects.get(0));
|
||||
} else {
|
||||
@ -284,13 +285,13 @@ public class SeminarCRUDPanel extends GenericPanel<FinalSeminar> {
|
||||
|
||||
private void addOpponentsTo(FinalSeminar finalSeminar) {
|
||||
for (User potentialOpponent : opponents.getModelObject()) {
|
||||
var maybeProject = getPotentialParticipantProject(potentialOpponent, finalSeminar.getProjectType());
|
||||
Optional<Project> maybeProject = getPotentialParticipantProject(potentialOpponent, finalSeminar.getProjectType());
|
||||
|
||||
if (maybeProject.isEmpty()) {
|
||||
error(getString("opponent.no.project", Model.of(potentialOpponent)));
|
||||
} else {
|
||||
final Project project = maybeProject.get();
|
||||
var result = seminarService.oppose(potentialOpponent, finalSeminar, project);
|
||||
Either<OpposeError, FinalSeminarOpposition> result = seminarService.oppose(potentialOpponent, finalSeminar, project);
|
||||
result.fold(
|
||||
error -> {
|
||||
switch (error) {
|
||||
|
@ -183,9 +183,9 @@ public class SeminarThesisPanel extends GenericPanel<FinalSeminar> {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final var hasThesis = seminarService.hasThesis(getModelObject());
|
||||
final var seminarHasHappened = getModelObject().getStartDate() != null && getModelObject().getStartDate().before(new Date());
|
||||
final var isAuthor = getModelObject().getProject().isParticipant(SciProSession.get().getUser());
|
||||
final boolean hasThesis = seminarService.hasThesis(getModelObject());
|
||||
final boolean seminarHasHappened = getModelObject().getStartDate() != null && getModelObject().getStartDate().before(new Date());
|
||||
final boolean isAuthor = getModelObject().getProject().isParticipant(SciProSession.get().getUser());
|
||||
setVisible(hasThesis && !seminarHasHappened && isAuthor);
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,7 @@ import se.su.dsv.scipro.notifications.dataobject.NotificationSource;
|
||||
import se.su.dsv.scipro.session.SciProSession;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.util.Date;
|
||||
|
||||
@ -89,7 +90,7 @@ public class FirstMeetingPanel extends GenericPanel<Idea> {
|
||||
private Date getCourseStartDate() {
|
||||
ApplicationPeriod period = getModelObject().getApplicationPeriod();
|
||||
if (period != null) {
|
||||
final var courseStartDateTime = period.getCourseStartDateTime()
|
||||
final Instant courseStartDateTime = period.getCourseStartDateTime()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toInstant();
|
||||
return Date.from(courseStartDateTime);
|
||||
|
@ -90,7 +90,7 @@ public class SupervisorGradingPage extends AbstractSupervisorProjectDetailsPage
|
||||
@Override
|
||||
protected void populateItem(final ListItem<User> item) {
|
||||
item.add(new UserLabel("authorName", item.getModel()));
|
||||
final var examinations = SupervisorGradingPage.this.getExaminations(item.getModel());
|
||||
final IModel<List<Examination>> examinations = SupervisorGradingPage.this.getExaminations(item.getModel());
|
||||
|
||||
final IModel<List<Examination>> nonGradedExaminations = getSpecificExaminations(examinations, false);
|
||||
item.add(new NonGradedPanel(
|
||||
|
@ -22,7 +22,7 @@ public class IdeaDownloadPanel extends GenericPanel<Idea> {
|
||||
}
|
||||
|
||||
private String getIdeaString() {
|
||||
final var idea = getModelObject();
|
||||
final Idea idea = getModelObject();
|
||||
StringBuilder sb = new StringBuilder("<<IDEA SPECIFICATION>>");
|
||||
String separator = System.getProperty("line.separator");
|
||||
sb.append(separator).append(separator);
|
||||
|
@ -8,7 +8,7 @@ public class IdeaTholanderInfoPanel extends Panel {
|
||||
|
||||
public IdeaTholanderInfoPanel(String id, IModel<Idea> model) {
|
||||
super(id, model);
|
||||
final var tholanderModel = model.map(Idea::getTholanderBox);
|
||||
final IModel<TholanderBox> tholanderModel = model.map(Idea::getTholanderBox);
|
||||
add(new Label("background", replaceEmpty(tholanderModel.map(TholanderBox::getBackground))));
|
||||
add(new Label("literature", replaceEmpty(tholanderModel.map(TholanderBox::getLiterature))));
|
||||
add(new Label("problem", replaceEmpty(tholanderModel.map(TholanderBox::getProblem))));
|
||||
|
@ -123,7 +123,7 @@ public class ProjectAllSupervisorIdeasPanel extends GenericPanel<ApplicationPeri
|
||||
}
|
||||
|
||||
private void addFiltering() {
|
||||
var projectTypes = getModel()
|
||||
IModel<List<ProjectType>> projectTypes = getModel()
|
||||
.map(ApplicationPeriod::getProjectTypes)
|
||||
.map(projectTypes1 -> projectTypes1.stream()
|
||||
.filter(this::isCorrectDegreeType)
|
||||
|
@ -24,11 +24,11 @@ public class ProjectIdeaDetailsPage extends AbstractIdeaProjectPage implements M
|
||||
throw new RestartResponseException(getApplication().getHomePage());
|
||||
}
|
||||
|
||||
final var idea = ideaService.findOne(ideaId);
|
||||
final Idea idea = ideaService.findOne(ideaId);
|
||||
if (idea == null) {
|
||||
throw new RestartResponseException(getApplication().getHomePage());
|
||||
}
|
||||
final var isAuthor = idea
|
||||
final boolean isAuthor = idea
|
||||
.getIdeaParticipations()
|
||||
.stream()
|
||||
.anyMatch(ideaParticipation -> ideaParticipation.getUser().equals(getUser()));
|
||||
@ -36,7 +36,7 @@ public class ProjectIdeaDetailsPage extends AbstractIdeaProjectPage implements M
|
||||
throw new RestartResponseException(getApplication().getHomePage());
|
||||
}
|
||||
|
||||
final var ideaModel = new DetachableServiceModel<>(ideaService, idea);
|
||||
final DetachableServiceModel<Idea> ideaModel = new DetachableServiceModel<>(ideaService, idea);
|
||||
add(new Label("title", ideaModel.map(Idea::getTitle)));
|
||||
add(new CompleteIdeaDialogPanel("complete_supervisor_idea", ideaModel) {
|
||||
@Override
|
||||
|
@ -105,7 +105,7 @@ public class ProjectIdeaSubmissionPanel extends GenericPanel<Idea> {
|
||||
super(id, model);
|
||||
this.isNewIdea = isNewIdea;
|
||||
this.creator = SciProSession.get().getUser();
|
||||
final var generalSystemSettings = LoadableDetachableModel.of(generalSystemSettingsService::getGeneralSystemSettingsInstance);
|
||||
final LoadableDetachableModel<GeneralSystemSettings> generalSystemSettings = LoadableDetachableModel.of(generalSystemSettingsService::getGeneralSystemSettingsInstance);
|
||||
supportMail = generalSystemSettings.map(GeneralSystemSettings::getActiveProjectIdeaSupportMail);
|
||||
addProjectTypeSelection();
|
||||
addLanguageSelection();
|
||||
@ -142,7 +142,7 @@ public class ProjectIdeaSubmissionPanel extends GenericPanel<Idea> {
|
||||
}
|
||||
|
||||
private void addProjectTypeSelection() {
|
||||
var projectTypes = getModel()
|
||||
IModel<List<ProjectType>> projectTypes = getModel()
|
||||
.map(Idea::getApplicationPeriod)
|
||||
.map(ApplicationPeriod::getProjectTypes)
|
||||
.map(projectTypes1 -> projectTypes1.stream()
|
||||
@ -161,9 +161,9 @@ public class ProjectIdeaSubmissionPanel extends GenericPanel<Idea> {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final var selectedProjectType = getModelObject().getProjectType();
|
||||
final ProjectType selectedProjectType = getModelObject().getProjectType();
|
||||
if (selectedProjectType != null) {
|
||||
final var hasActiveProject = !projectService
|
||||
final boolean hasActiveProject = !projectService
|
||||
.getActiveProjects(SciProSession.get().getUser(), selectedProjectType)
|
||||
.isEmpty();
|
||||
setVisible(hasActiveProject);
|
||||
@ -204,9 +204,9 @@ public class ProjectIdeaSubmissionPanel extends GenericPanel<Idea> {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final var selectedProjectType = getModelObject().getProjectType();
|
||||
final ProjectType selectedProjectType = getModelObject().getProjectType();
|
||||
if (selectedProjectType != null) {
|
||||
final var partnerHasActiveProject = coAuthorChoice.getModelObject()
|
||||
final boolean partnerHasActiveProject = coAuthorChoice.getModelObject()
|
||||
.stream()
|
||||
.map(partner -> projectService.getActiveProjects(partner, selectedProjectType))
|
||||
.flatMap(Collection::stream)
|
||||
@ -243,7 +243,7 @@ public class ProjectIdeaSubmissionPanel extends GenericPanel<Idea> {
|
||||
}
|
||||
};
|
||||
add(program);
|
||||
final var currentProgram = getModelObject().getIdeaParticipations()
|
||||
final Program currentProgram = getModelObject().getIdeaParticipations()
|
||||
.stream()
|
||||
.filter(ip -> ip.getUser().equals(student))
|
||||
.findAny()
|
||||
@ -274,7 +274,7 @@ public class ProjectIdeaSubmissionPanel extends GenericPanel<Idea> {
|
||||
}
|
||||
|
||||
private void addTholanderFields() {
|
||||
final var tholanderModel = getModel().map(Idea::getTholanderBox);
|
||||
final IModel<TholanderBox> tholanderModel = getModel().map(Idea::getTholanderBox);
|
||||
CounterTextArea what = new CounterTextArea("background", LambdaModel.of(tholanderModel, TholanderBox::getBackground, TholanderBox::setBackground), TholanderBox.MAX_CHARS);
|
||||
what.setRequired(true);
|
||||
add(what);
|
||||
|
@ -6,6 +6,7 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
import org.apache.wicket.util.string.StringValueConversionException;
|
||||
import se.su.dsv.scipro.activityplan.ProjectActivityPlanPage;
|
||||
import se.su.dsv.scipro.activityplan.SupervisorActivityPlanPage;
|
||||
import se.su.dsv.scipro.finalseminar.FinalSeminar;
|
||||
import se.su.dsv.scipro.finalseminar.ProjectFinalSeminarDetailsPage;
|
||||
import se.su.dsv.scipro.finalseminar.ProjectFinalSeminarPage;
|
||||
import se.su.dsv.scipro.finalseminar.SupervisorFinalSeminarPage;
|
||||
@ -14,6 +15,7 @@ import se.su.dsv.scipro.forum.pages.SupervisorForumBasePage;
|
||||
import se.su.dsv.scipro.grading.SupervisorGradingReportPage;
|
||||
import se.su.dsv.scipro.group.AuthorGroupPage;
|
||||
import se.su.dsv.scipro.group.Group;
|
||||
import se.su.dsv.scipro.match.Idea;
|
||||
import se.su.dsv.scipro.match.ProjectIdeaStartPage;
|
||||
import se.su.dsv.scipro.match.SupervisorIdeaStartPage;
|
||||
import se.su.dsv.scipro.milestones.pages.ProjectMileStonePage;
|
||||
@ -54,7 +56,7 @@ public class NotificationLandingPage extends WebPage {
|
||||
|
||||
Optional<NotificationEvent> optionalNotificationEvent;
|
||||
try {
|
||||
final var id = pp.get("id").toLong();
|
||||
final long id = pp.get("id").toLong();
|
||||
optionalNotificationEvent = notificationEventService.findOne(id);
|
||||
} catch (StringValueConversionException ignored) {
|
||||
throw new RestartResponseException(getApplication().getHomePage());
|
||||
@ -64,7 +66,7 @@ public class NotificationLandingPage extends WebPage {
|
||||
throw new RestartResponseException(getApplication().getHomePage());
|
||||
}
|
||||
|
||||
final var notificationEvent = optionalNotificationEvent.get();
|
||||
final NotificationEvent notificationEvent = optionalNotificationEvent.get();
|
||||
notificationService.setRead(SciProSession.get().getUser(), notificationEvent, true);
|
||||
// Default to home page if event doesn't override
|
||||
setResponsePage(getApplication().getHomePage());
|
||||
@ -103,10 +105,10 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToProjectNotificationPage(final ProjectEvent projectEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var project = projectEvent.getProject();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final Project project = projectEvent.getProject();
|
||||
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Project.class), project.getId());
|
||||
|
||||
final BiConsumer<Class<? extends WebPage>, Class<? extends WebPage>> defaultSplit =
|
||||
@ -151,7 +153,7 @@ public class NotificationLandingPage extends WebPage {
|
||||
case FINAL_SEMINAR_APPROVAL_REQUESTED:
|
||||
case FINAL_SEMINAR_APPROVAL_APPROVED:
|
||||
case FINAL_SEMINAR_APPROVAL_REJECTED:
|
||||
final var finalSeminarApprovalPP = new PageParameters(pp);
|
||||
final PageParameters finalSeminarApprovalPP = new PageParameters(pp);
|
||||
finalSeminarApprovalPP.set("anchor", "finalSeminarApproval");
|
||||
if (project.isSupervisor(currentUser)) {
|
||||
setResponsePage(SupervisorInteractWithReviewerPage.class, finalSeminarApprovalPP);
|
||||
@ -187,8 +189,8 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToIdeaNotificationPage(final IdeaEvent ideaEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var idea = ideaEvent.getIdea();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final Idea idea = ideaEvent.getIdea();
|
||||
|
||||
if (idea.getIdeaParticipations().stream().anyMatch(ip -> ip.getUser().equals(currentUser))) {
|
||||
setResponsePage(ProjectIdeaStartPage.class);
|
||||
@ -199,10 +201,10 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToSeminarNotificationPage(final SeminarEvent seminarEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var seminar = seminarEvent.getSeminar();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final FinalSeminar seminar = seminarEvent.getSeminar();
|
||||
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Project.class), seminar.getProject().getId());
|
||||
|
||||
if (seminar.getProject().isParticipant(currentUser)) {
|
||||
@ -217,15 +219,15 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToPeerReviewNotificationPage(final PeerEvent peerEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var peerReview = peerEvent.getReview();
|
||||
final var requesterProject = peerReview.getPeerRequest().getProject();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final PeerReview peerReview = peerEvent.getReview();
|
||||
final Project requesterProject = peerReview.getPeerRequest().getProject();
|
||||
|
||||
final var requesterPP = new PageParameters();
|
||||
final PageParameters requesterPP = new PageParameters();
|
||||
requesterPP.set(PageParameterKeys.MAP.get(Project.class), requesterProject.getId());
|
||||
requesterPP.set(PageParameterKeys.MAP.get(PeerReview.class), peerReview.getId());
|
||||
|
||||
final var reviewerPP = new PageParameters(requesterPP);
|
||||
final PageParameters reviewerPP = new PageParameters(requesterPP);
|
||||
reviewerPP.set(PageParameterKeys.MAP.get(Project.class), peerReview.getProject().getId());
|
||||
|
||||
switch (peerEvent.getEvent()) {
|
||||
@ -247,21 +249,21 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToPeerRequestNotificationPage(final PeerRequestEvent peerRequestEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var peerRequest = peerRequestEvent.getRequest();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final PeerRequest peerRequest = peerRequestEvent.getRequest();
|
||||
|
||||
switch (peerRequestEvent.getEvent()) {
|
||||
case REQUEST_DELETED:
|
||||
if (peerRequest.getRequester().equals(currentUser)) {
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Project.class), peerRequestEvent.getProject().getId());
|
||||
setResponsePage(PeerPortalPage.class, pp);
|
||||
}
|
||||
break;
|
||||
case REQUEST_EXPIRED:
|
||||
final var peerReview = peerRequest.getPeerReviews().stream().filter(pr -> pr.getReviewer().equals(currentUser)).findAny();
|
||||
final Optional<PeerReview> peerReview = peerRequest.getPeerReviews().stream().filter(pr -> pr.getReviewer().equals(currentUser)).findAny();
|
||||
if (peerReview.isPresent()) {
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Project.class), peerReview.get().getProject().getId());
|
||||
setResponsePage(PeerPortalPage.class, pp);
|
||||
}
|
||||
@ -270,16 +272,16 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToMilestoneNotificationPage(final MileStoneEvent mileStoneEvent) {
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Project.class), mileStoneEvent.getProject().getId());
|
||||
roleSplit(SciProSession.get().getUser(), mileStoneEvent.getProject(), ProjectMileStonePage.class, SupervisorMileStonePage.class, pp);
|
||||
}
|
||||
|
||||
private void redirectToGroupNotificationPage(final GroupEvent groupEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var group = groupEvent.getGroup();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final Group group = groupEvent.getGroup();
|
||||
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Group.class), group.getId());
|
||||
|
||||
if (group.getProjects().stream().anyMatch(project -> hasSupervisingRole(project, currentUser))) {
|
||||
@ -291,10 +293,10 @@ public class NotificationLandingPage extends WebPage {
|
||||
}
|
||||
|
||||
private void redirectToForumNotificationPage(final ProjectForumEvent projectForumEvent) {
|
||||
final var currentUser = SciProSession.get().getUser();
|
||||
final var project = projectForumEvent.getProject();
|
||||
final User currentUser = SciProSession.get().getUser();
|
||||
final Project project = projectForumEvent.getProject();
|
||||
|
||||
final var pp = new PageParameters();
|
||||
final PageParameters pp = new PageParameters();
|
||||
pp.set(PageParameterKeys.MAP.get(Project.class), project.getId());
|
||||
|
||||
switch (projectForumEvent.getEvent()) {
|
||||
|
@ -72,7 +72,7 @@ public class PeerRequestSelectionPanel extends GenericPanel<Project> {
|
||||
private void addInfoBox() {
|
||||
add(new Label(CURRENTLY_AWAITING, new StringResourceModel("currentlyAwaiting").setParameters(
|
||||
peerRequestService.countAvailableRequests(getUser(), RequestStatus.WAITING, getModelObject().getProjectType()))));
|
||||
final var projectTypeSettingsModel = getModel().map(Project::getProjectType).map(ProjectType::getProjectTypeSettings);
|
||||
final IModel<ProjectTypeSettings> projectTypeSettingsModel = getModel().map(Project::getProjectType).map(ProjectType::getProjectTypeSettings);
|
||||
add(new Label(DAYS_TO_SUBMIT, new StringResourceModel("daysToSubmit", projectTypeSettingsModel)));
|
||||
add(new Label(RECENTLY_REVIEWED, new StringResourceModel("recentlyReviewed", projectTypeSettingsModel)));
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public class DisplayUserProfilePanel extends GenericPanel<User> {
|
||||
|
||||
add(new ExternalLink(MAIL, "mailto:" + model.getObject().getEmailAddress(), model.getObject().getEmailAddress()));
|
||||
|
||||
final var profileModel = getProfile();
|
||||
final IModel<UserProfile> profileModel = getProfile();
|
||||
add(new Label(SKYPE, new NullReplacementModel(LambdaModel.of(profileModel, UserProfile::getSkypeId, UserProfile::setSkypeId), "Not entered")));
|
||||
|
||||
add(new Label(PHONE, new NullReplacementModel(LambdaModel.of(profileModel, UserProfile::getPhoneNumber, UserProfile::setPhoneNumber), "Not entered")));
|
||||
|
@ -96,7 +96,7 @@ public class ProjectDetailsPage extends AbstractProjectDetailsPage implements Me
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
super.onConfigure();
|
||||
final var shouldFillOutSurvey = surveyService.shouldFillOutSurvey(getActiveProject(), SciProSession.get().getUser());
|
||||
final boolean shouldFillOutSurvey = surveyService.shouldFillOutSurvey(getActiveProject(), SciProSession.get().getUser());
|
||||
setVisibilityAllowed(shouldFillOutSurvey);
|
||||
}
|
||||
});
|
||||
|
@ -20,6 +20,7 @@ import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.project.ProjectStatus;
|
||||
import se.su.dsv.scipro.project.pages.*;
|
||||
import se.su.dsv.scipro.report.GradingReportService;
|
||||
import se.su.dsv.scipro.report.SupervisorGradingReport;
|
||||
import se.su.dsv.scipro.session.SciProSession;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -62,7 +63,7 @@ public class ProjectSubTabMenuPanel extends AbstractMenuPanel {
|
||||
|
||||
@Override
|
||||
protected List<MenuItem> getItemList() {
|
||||
final var project = active.getObject();
|
||||
final Project project = active.getObject();
|
||||
List<MenuItem> itemList = new ArrayList<>();
|
||||
itemList.add(new MenuItem(OVERVIEW, ProjectDetailsPage.class, projectParams));
|
||||
if (milestoneActivityTemplateService.countActivities(project.getProjectType(), project.getDateCreated()) != 0) {
|
||||
@ -79,7 +80,7 @@ public class ProjectSubTabMenuPanel extends AbstractMenuPanel {
|
||||
itemList.add(new MenuItem(OPPOSITION_ACTIVE_PARTICIPATION, ProjectOppositionPage.class, MenuHighlightAuthorOpposition.class, projectParams));
|
||||
itemList.add(new MenuItem(ADMIN, ProjectAdminPage.class, projectParams));
|
||||
if (gradingReportService.getTemplate(project) != null) {
|
||||
final var supervisorGradingReport = gradingReportService.getSupervisorGradingReport(project, SciProSession.get().getUser());
|
||||
final SupervisorGradingReport supervisorGradingReport = gradingReportService.getSupervisorGradingReport(project, SciProSession.get().getUser());
|
||||
if (supervisorGradingReport.isSubmitted() && project.getProjectStatus() == ProjectStatus.COMPLETED) {
|
||||
itemList.add(new MenuItem(GRADING_REPORT, ProjectGradingReportPage.class, projectParams));
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ public class SupervisorEditProjectPanel extends GenericPanel<Project> {
|
||||
|
||||
private void initComponents() {
|
||||
add(new RequiredTextField<>(TITLE, LambdaModel.of(getModel(), Project::getTitle, Project::setTitle)));
|
||||
final var expectedEndDate = new TextField<>(
|
||||
final TextField<LocalDate> expectedEndDate = new TextField<>(
|
||||
"expected_end_date",
|
||||
LambdaModel.of(getModel(), Project::getExpectedEndDate, Project::setExpectedEndDate),
|
||||
LocalDate.class);
|
||||
|
@ -18,6 +18,7 @@ import se.su.dsv.scipro.file.*;
|
||||
import se.su.dsv.scipro.files.WicketFileUpload;
|
||||
import se.su.dsv.scipro.forum.panels.threaded.SubmitForumReplyPanel;
|
||||
import se.su.dsv.scipro.grading.*;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.project.panels.ProjectHeaderPanel;
|
||||
import se.su.dsv.scipro.report.GradingReportService;
|
||||
import se.su.dsv.scipro.report.ReviewerGradingReport;
|
||||
@ -45,7 +46,7 @@ public class ReviewerApprovalDecisionPage extends ReviewerPage {
|
||||
public ReviewerApprovalDecisionPage(PageParameters pp) {
|
||||
super(pp);
|
||||
|
||||
final var id = pp.get(PAGE_PARAMETER_ID).toLong();
|
||||
final long id = pp.get(PAGE_PARAMETER_ID).toLong();
|
||||
approval = LoadableDetachableModel.of(() -> myReviewService.findApproval(id));
|
||||
if (!approval.getObject().getProject().isReviewer(getUser())) {
|
||||
throw new RestartResponseException(getApplication().getHomePage());
|
||||
@ -53,7 +54,7 @@ public class ReviewerApprovalDecisionPage extends ReviewerPage {
|
||||
|
||||
setDefaultModel(approval);
|
||||
|
||||
final var project = approval.map(ReviewerApproval::getProject);
|
||||
final IModel<Project> project = approval.map(ReviewerApproval::getProject);
|
||||
add(new ProjectHeaderPanel("projectHeader", project));
|
||||
add(new InfoPanel("info", new ResourceModel("info")));
|
||||
add(new SubmitForumReplyPanel<>("communication", project, new ReviewerInteractionForumThread(reviewerInteractionService, fileDescriptionService)));
|
||||
@ -71,10 +72,10 @@ public class ReviewerApprovalDecisionPage extends ReviewerPage {
|
||||
public DecisionForm(String id, IModel<ReviewerApproval> reviewerApproval) {
|
||||
super(id, reviewerApproval);
|
||||
add(new FencedFeedbackPanel("feedbackPanel", this));
|
||||
var feedback = new TextArea<>("feedback", Model.of(""));
|
||||
TextArea<String> feedback = new TextArea<>("feedback", Model.of(""));
|
||||
feedback.setRequired(true);
|
||||
add(feedback);
|
||||
var attachment = new FileUploadField("attachment");
|
||||
FileUploadField attachment = new FileUploadField("attachment");
|
||||
add(attachment);
|
||||
|
||||
gradingReport = LoadableDetachableModel.of(() -> gradingReportService.getReviewerGradingReport(reviewerApproval.getObject().getProject()));
|
||||
@ -168,9 +169,9 @@ public class ReviewerApprovalDecisionPage extends ReviewerPage {
|
||||
|
||||
private Optional<FileDescription> getAttachedGradingReport() {
|
||||
if (attachGradingReport.getObject()) {
|
||||
var gradingReportPdf = new ProjectCriteriaGradingReportPdf(gradingReport.getObject());
|
||||
var upload = new GradingReportPdfResourceFileUpload(gradingReportPdf, gradingReport.getObject().getProject().getReviewer());
|
||||
var gradingReportFile = fileDescriptionService.storeFile(upload);
|
||||
ProjectCriteriaGradingReportPdf gradingReportPdf = new ProjectCriteriaGradingReportPdf(gradingReport.getObject());
|
||||
GradingReportPdfResourceFileUpload upload = new GradingReportPdfResourceFileUpload(gradingReportPdf, gradingReport.getObject().getProject().getReviewer());
|
||||
FileDescription gradingReportFile = fileDescriptionService.storeFile(upload);
|
||||
return Optional.ofNullable(gradingReportFile);
|
||||
} else {
|
||||
return Optional.empty();
|
||||
@ -192,7 +193,7 @@ public class ReviewerApprovalDecisionPage extends ReviewerPage {
|
||||
}
|
||||
|
||||
public static PageParameters pageParametersFor(ReviewerApproval approval) {
|
||||
var parameters = new PageParameters();
|
||||
PageParameters parameters = new PageParameters();
|
||||
parameters.set(PAGE_PARAMETER_ID, approval.getId());
|
||||
return parameters;
|
||||
}
|
||||
|
@ -29,9 +29,11 @@ import se.su.dsv.scipro.repository.panels.ViewAttachmentPanel;
|
||||
import se.su.dsv.scipro.reviewer.timeline.TimelinePanel;
|
||||
import se.su.dsv.scipro.reviewing.ReviewerInteractionService;
|
||||
import se.su.dsv.scipro.session.SciProSession;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
import se.su.dsv.scipro.util.PageParameterKeys;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
public class ReviewerGradingPage extends ReviewerPage {
|
||||
@Inject
|
||||
@ -66,7 +68,7 @@ public class ReviewerGradingPage extends ReviewerPage {
|
||||
add(new InfoPanel("info", new ResourceModel("info")));
|
||||
add(new SubmitForumReplyPanel<>("communication", projectModel, new ReviewerInteractionForumThread(reviewerInteractionService, fileDescriptionService)));
|
||||
add(new TimelinePanel("timeline", projectModel));
|
||||
var externalGradingURL = generalSystemSettingsService.getGeneralSystemSettingsInstance().getExternalGradingURL();
|
||||
String externalGradingURL = generalSystemSettingsService.getGeneralSystemSettingsInstance().getExternalGradingURL();
|
||||
add(new ExternalLink("moreInformation", externalGradingURL) {
|
||||
@Override
|
||||
protected void onConfigure() {
|
||||
@ -84,14 +86,14 @@ public class ReviewerGradingPage extends ReviewerPage {
|
||||
}
|
||||
|
||||
private void addSupervisorReports(IModel<Project> projectModel) {
|
||||
var supervisorReportsModel = LoadableDetachableModel.of(() ->
|
||||
LoadableDetachableModel<List<SupervisorGradingReport>> supervisorReportsModel = LoadableDetachableModel.of(() ->
|
||||
gradingReportService.getSupervisorGradingReports(projectModel.getObject()));
|
||||
|
||||
add(new ListView<>("supervisorReportTabs", supervisorReportsModel) {
|
||||
@Override
|
||||
protected void populateItem(ListItem<SupervisorGradingReport> item) {
|
||||
var author = item.getModel().map(SupervisorGradingReport::getUser);
|
||||
var tabTitle = new StringResourceModel("supervisor.grading.report", author);
|
||||
IModel<User> author = item.getModel().map(SupervisorGradingReport::getUser);
|
||||
StringResourceModel tabTitle = new StringResourceModel("supervisor.grading.report", author);
|
||||
item.add(new ExternalLink("tab", Model.of("#author" + item.getIndex()), tabTitle));
|
||||
}
|
||||
});
|
||||
|
@ -27,11 +27,11 @@ public class SupervisorApplicationPeriodStatisticsPanel extends GenericPanel<Use
|
||||
public SupervisorApplicationPeriodStatisticsPanel(String id, IModel<User> supervisorModel) {
|
||||
super(id, supervisorModel);
|
||||
|
||||
var targets = LoadableDetachableModel.of(() ->
|
||||
LoadableDetachableModel<List<PeriodTypeTarget>> targets = LoadableDetachableModel.of(() ->
|
||||
upcomingPeriods().stream()
|
||||
.flatMap(period -> period.getProjectTypes().stream()
|
||||
.map(projectType -> {
|
||||
final var target = targetService.findOne(period, supervisorModel.getObject(), projectType);
|
||||
final Target target = targetService.findOne(period, supervisorModel.getObject(), projectType);
|
||||
return new PeriodTypeTarget(period, projectType, target);
|
||||
}))
|
||||
.filter(ptt -> ptt.getTarget().getTarget() > 0)
|
||||
|
@ -11,6 +11,7 @@ import se.su.dsv.scipro.components.BootstrapDateTimeComponent;
|
||||
import se.su.dsv.scipro.data.enums.DateStyle;
|
||||
import se.su.dsv.scipro.date.DateService;
|
||||
import se.su.dsv.scipro.firstmeeting.FirstMeetingService;
|
||||
import se.su.dsv.scipro.firstmeeting.ProjectFirstMeeting;
|
||||
import se.su.dsv.scipro.notifications.NotificationController;
|
||||
import se.su.dsv.scipro.notifications.dataobject.NotificationSource;
|
||||
import se.su.dsv.scipro.notifications.dataobject.ProjectEvent;
|
||||
@ -51,7 +52,7 @@ public class SupervisorFirstMeetingPage extends AbstractSupervisorProjectDetails
|
||||
@Override
|
||||
protected void onSubmit() {
|
||||
success("First meeting scheduled");
|
||||
final var firstMeeting = firstMeetingService.schedule(projectModel.getObject(), date.getObject(), room.getObject(), description.getObject());
|
||||
final ProjectFirstMeeting firstMeeting = firstMeetingService.schedule(projectModel.getObject(), date.getObject(), room.getObject(), description.getObject());
|
||||
NotificationSource source = new NotificationSource();
|
||||
String date = dateService.format(firstMeeting.getDate(), DateStyle.DATETIME);
|
||||
String room = firstMeeting.getRoom();
|
||||
|
@ -113,7 +113,7 @@ public class AdminEditApplicationPeriodPageTest extends SciProTest {
|
||||
|
||||
private void fillInForm(String title, int startDate, int endDate, int courseStartDate, FormTester formTester) {
|
||||
formTester.setValue(TITLE, title);
|
||||
final var now = LocalDate.now();
|
||||
final LocalDate now = LocalDate.now();
|
||||
formTester.setValue(START_DATE, now.plusDays(startDate).toString());
|
||||
formTester.setValue(END_DATE, now.plusDays(endDate).toString());
|
||||
formTester.setValue(COURSE_START_DATE, now.plusDays(courseStartDate).toString());
|
||||
|
@ -319,7 +319,7 @@ public class SeminarThesisPanelTest extends SciProTest {
|
||||
}
|
||||
|
||||
private void startPanel() {
|
||||
final var seminar = new FinalSeminar();
|
||||
final FinalSeminar seminar = new FinalSeminar();
|
||||
seminar.setStartDate(new Date());
|
||||
startPanel(seminar);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import se.su.dsv.scipro.test.UserBuilder;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
import static java.lang.String.format;
|
||||
@ -38,7 +39,7 @@ public class FirstMeetingPanelTest extends SciProTest {
|
||||
LocalDate courseStartDate = LocalDate.now();
|
||||
|
||||
idea = createCompletedIdea(courseStartDate);
|
||||
final var firstMetingDate = idea.getApplicationPeriod()
|
||||
final ZonedDateTime firstMetingDate = idea.getApplicationPeriod()
|
||||
.getCourseStartDateTime()
|
||||
.atZone(ZoneId.systemDefault());
|
||||
firstMeeting = new FirstMeeting(Date.from(firstMetingDate.toInstant()), idea);
|
||||
|
Loading…
x
Reference in New Issue
Block a user