diff --git a/src/main/java/ru/ulstu/conference/model/Conference.java b/src/main/java/ru/ulstu/conference/model/Conference.java index 4df1a1f..572921e 100644 --- a/src/main/java/ru/ulstu/conference/model/Conference.java +++ b/src/main/java/ru/ulstu/conference/model/Conference.java @@ -5,8 +5,11 @@ import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import org.springframework.format.annotation.DateTimeFormat; import ru.ulstu.core.model.BaseEntity; +import ru.ulstu.core.model.EventSource; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.paper.model.Paper; +import ru.ulstu.timeline.model.Event; +import ru.ulstu.user.model.User; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -28,7 +31,7 @@ import java.util.Optional; @Entity @Table(name = "conference") -public class Conference extends BaseEntity { +public class Conference extends BaseEntity implements EventSource { @NotBlank private String title; @@ -71,6 +74,19 @@ public class Conference extends BaseEntity { return title; } + @Override + public List getRecipients() { + List list = new ArrayList<>(); + + getUsers().forEach(conferenceUser -> list.add(conferenceUser.getUser())); + return list; + } + + @Override + public void addObjectToEvent(Event event) { + event.setConference(this); + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/ru/ulstu/conference/service/ConferenceService.java b/src/main/java/ru/ulstu/conference/service/ConferenceService.java index 3b3bace..f742139 100644 --- a/src/main/java/ru/ulstu/conference/service/ConferenceService.java +++ b/src/main/java/ru/ulstu/conference/service/ConferenceService.java @@ -117,7 +117,7 @@ public class ConferenceService extends BaseService { Conference newConference = copyFromDto(new Conference(), conferenceDto); newConference = conferenceRepository.save(newConference); conferenceNotificationService.sendCreateNotification(newConference); - eventService.createFromObject(newConference, Collections.emptyList()); + eventService.createFromObject(newConference, Collections.emptyList(), false, "конференции"); return newConference; } diff --git a/src/main/java/ru/ulstu/core/model/EventSource.java b/src/main/java/ru/ulstu/core/model/EventSource.java new file mode 100644 index 0000000..32ffcf2 --- /dev/null +++ b/src/main/java/ru/ulstu/core/model/EventSource.java @@ -0,0 +1,17 @@ +package ru.ulstu.core.model; + +import ru.ulstu.deadline.model.Deadline; +import ru.ulstu.timeline.model.Event; +import ru.ulstu.user.model.User; + +import java.util.List; + +public interface EventSource { + List getDeadlines(); + + String getTitle(); + + List getRecipients(); + + void addObjectToEvent(Event event); +} diff --git a/src/main/java/ru/ulstu/grant/model/Grant.java b/src/main/java/ru/ulstu/grant/model/Grant.java index 369568f..78583c3 100644 --- a/src/main/java/ru/ulstu/grant/model/Grant.java +++ b/src/main/java/ru/ulstu/grant/model/Grant.java @@ -4,6 +4,7 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import ru.ulstu.core.model.BaseEntity; +import ru.ulstu.core.model.EventSource; import ru.ulstu.core.model.UserContainer; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.file.model.FileData; @@ -26,6 +27,7 @@ import javax.persistence.OrderBy; import javax.persistence.Table; import javax.validation.constraints.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashSet; @@ -35,7 +37,7 @@ import java.util.Set; @Entity @Table(name = "grants") -public class Grant extends BaseEntity implements UserContainer { +public class Grant extends BaseEntity implements UserContainer, EventSource { public enum GrantStatus { APPLICATION("Заявка"), ON_COMPETITION("Отправлен на конкурс"), @@ -134,6 +136,16 @@ public class Grant extends BaseEntity implements UserContainer { return title; } + @Override + public List getRecipients() { + return authors != null ? new ArrayList<>(authors) : Collections.emptyList(); + } + + @Override + public void addObjectToEvent(Event event) { + event.setGrant(this); + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/ru/ulstu/grant/service/GrantService.java b/src/main/java/ru/ulstu/grant/service/GrantService.java index d8e4aad..27841e3 100644 --- a/src/main/java/ru/ulstu/grant/service/GrantService.java +++ b/src/main/java/ru/ulstu/grant/service/GrantService.java @@ -90,7 +90,7 @@ public class GrantService extends BaseService { public Integer create(GrantDto grantDto) throws IOException { Grant newGrant = copyFromDto(new Grant(), grantDto); newGrant = grantRepository.save(newGrant); - eventService.createFromObject(newGrant, Collections.emptyList()); + eventService.createFromObject(newGrant, Collections.emptyList(), false, "гранта"); grantNotificationService.sendCreateNotification(newGrant); return newGrant.getId(); } @@ -178,7 +178,7 @@ public class GrantService extends BaseService { grant.getPapers().add(paper); grant = grantRepository.save(grant); - eventService.createFromObject(grant, Collections.emptyList()); + eventService.createFromObject(grant, Collections.emptyList(), false, "гранта"); grantNotificationService.sendCreateNotification(grant); return grant; diff --git a/src/main/java/ru/ulstu/paper/model/Paper.java b/src/main/java/ru/ulstu/paper/model/Paper.java index 413c5db..dbc9b52 100644 --- a/src/main/java/ru/ulstu/paper/model/Paper.java +++ b/src/main/java/ru/ulstu/paper/model/Paper.java @@ -5,6 +5,7 @@ import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import ru.ulstu.conference.model.Conference; import ru.ulstu.core.model.BaseEntity; +import ru.ulstu.core.model.EventSource; import ru.ulstu.core.model.UserContainer; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.file.model.FileData; @@ -34,7 +35,7 @@ import java.util.Optional; import java.util.Set; @Entity -public class Paper extends BaseEntity implements UserContainer { +public class Paper extends BaseEntity implements UserContainer, EventSource { public enum PaperStatus { ATTENTION("Обратить внимание"), ON_PREPARATION("На подготовке"), @@ -196,6 +197,16 @@ public class Paper extends BaseEntity implements UserContainer { return title; } + @Override + public List getRecipients() { + return new ArrayList(authors); + } + + @Override + public void addObjectToEvent(Event event) { + event.setPaper(this); + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/ru/ulstu/project/model/Project.java b/src/main/java/ru/ulstu/project/model/Project.java index 0c0af94..07f0141 100644 --- a/src/main/java/ru/ulstu/project/model/Project.java +++ b/src/main/java/ru/ulstu/project/model/Project.java @@ -4,6 +4,7 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import ru.ulstu.core.model.BaseEntity; +import ru.ulstu.core.model.EventSource; import ru.ulstu.core.model.UserContainer; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.file.model.FileData; @@ -23,12 +24,13 @@ import javax.persistence.ManyToMany; import javax.persistence.JoinTable; import javax.validation.constraints.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @Entity -public class Project extends BaseEntity implements UserContainer { +public class Project extends BaseEntity implements UserContainer, EventSource { public enum ProjectStatus { TECHNICAL_TASK("Техническое задание"), @@ -92,6 +94,16 @@ public class Project extends BaseEntity implements UserContainer { return title; } + @Override + public List getRecipients() { + return executors != null ? new ArrayList<>(executors) : Collections.emptyList(); + } + + @Override + public void addObjectToEvent(Event event) { + event.setProject(this); + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/ru/ulstu/project/service/ProjectService.java b/src/main/java/ru/ulstu/project/service/ProjectService.java index de64c4c..6491b04 100644 --- a/src/main/java/ru/ulstu/project/service/ProjectService.java +++ b/src/main/java/ru/ulstu/project/service/ProjectService.java @@ -72,7 +72,7 @@ public class ProjectService { public Project create(ProjectDto projectDto) throws IOException { Project newProject = copyFromDto(new Project(), projectDto); newProject = projectRepository.save(newProject); - eventService.createFromObject(newProject, Collections.emptyList()); + eventService.createFromObject(newProject, Collections.emptyList(), false, "проекта"); return newProject; } diff --git a/src/main/java/ru/ulstu/students/model/Task.java b/src/main/java/ru/ulstu/students/model/Task.java index 2a03e37..2e63a3c 100644 --- a/src/main/java/ru/ulstu/students/model/Task.java +++ b/src/main/java/ru/ulstu/students/model/Task.java @@ -4,8 +4,17 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import ru.ulstu.core.model.BaseEntity; +import ru.ulstu.core.model.EventSource; import ru.ulstu.deadline.model.Deadline; +import ru.ulstu.deadline.service.DeadlineService; +import ru.ulstu.students.repository.SchedulerRepository; +import ru.ulstu.students.repository.TaskRepository; import ru.ulstu.tags.model.Tag; +import ru.ulstu.tags.service.TagService; +import ru.ulstu.timeline.model.Event; +import ru.ulstu.timeline.service.EventService; +import ru.ulstu.user.model.User; +import ru.ulstu.user.service.UserService; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -20,12 +29,14 @@ import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Transient; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; @Entity -public class Task extends BaseEntity { +public class Task extends BaseEntity implements EventSource { public enum TaskStatus { IN_WORK("В работе"), @@ -49,6 +60,17 @@ public class Task extends BaseEntity { private String description; + @Transient + private UserService userService; + + public Task() { + + } + + public Task(UserService userService) { + this.userService = userService; + } + @Enumerated(value = EnumType.STRING) private TaskStatus status = TaskStatus.IN_WORK; @@ -77,6 +99,16 @@ public class Task extends BaseEntity { return title; } + @Override + public List getRecipients() { + return Collections.emptyList(); + } + + @Override + public void addObjectToEvent(Event event) { + event.setTask(this); + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/ru/ulstu/students/service/TaskService.java b/src/main/java/ru/ulstu/students/service/TaskService.java index 0a4590a..f78f8f7 100644 --- a/src/main/java/ru/ulstu/students/service/TaskService.java +++ b/src/main/java/ru/ulstu/students/service/TaskService.java @@ -84,7 +84,7 @@ public class TaskService { public Integer create(TaskDto taskDto) throws IOException { Task newTask = copyFromDto(new Task(), taskDto); newTask = taskRepository.save(newTask); - eventService.createFromObject(newTask, Collections.emptyList()); + eventService.createFromObject(newTask, Collections.emptyList(), true, "задачи"); return newTask.getId(); } diff --git a/src/main/java/ru/ulstu/timeline/service/EventService.java b/src/main/java/ru/ulstu/timeline/service/EventService.java index d307a8d..c22b9a3 100644 --- a/src/main/java/ru/ulstu/timeline/service/EventService.java +++ b/src/main/java/ru/ulstu/timeline/service/EventService.java @@ -1,12 +1,11 @@ package ru.ulstu.timeline.service; -import com.sun.jna.platform.win32.COM.util.Convert; import org.apache.commons.lang3.time.DateUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.ulstu.conference.model.Conference; -import ru.ulstu.core.model.BaseEntity; +import ru.ulstu.core.model.EventSource; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.grant.model.Grant; import ru.ulstu.paper.model.Paper; @@ -16,12 +15,10 @@ import ru.ulstu.timeline.model.Event; import ru.ulstu.timeline.model.EventDto; import ru.ulstu.timeline.model.Timeline; import ru.ulstu.timeline.repository.EventRepository; -import ru.ulstu.user.model.User; import ru.ulstu.user.model.UserDto; import ru.ulstu.user.service.UserService; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; @@ -36,13 +33,6 @@ public class EventService { private final TimelineService timelineService; private final UserService userService; - private String objectClassName = ""; - private Paper newPaper = new Paper(); - private Conference newConference = new Conference(); - private Grant newGrant = new Grant(); - private Project newProject = new Project(); - private Task newTask = new Task(); - public EventService(EventRepository eventRepository, @Lazy TimelineService timelineService, UserService userService) { @@ -116,133 +106,39 @@ public class EventService { } public void createFromPaper(Paper newPaper) { - createFromObject(newPaper, Collections.emptyList()); + createFromObject(newPaper, Collections.emptyList(), false, "статьи"); } - public void createFromObject(Object newObject, List events) { + public void createFromObject(EventSource eventSource, List events, Boolean addCurrentUser, String suffix) { List timelines = timelineService.findAll(); Timeline timeline = timelines.isEmpty() ? new Timeline() : timelines.get(0); - objectClassName = newObject.getClass().getName(); - switch(objectClassName) { - case "ru.ulstu.paper.model.Paper": - newPaper = (Paper)newObject; - timeline.getEvents().removeAll(events); - for (Deadline deadline : newPaper.getDeadlines() - .stream() - .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) - .collect(Collectors.toList())) { - Event newEvent = new Event(); - newEvent.setTitle("Дедлайн статьи"); - newEvent.setStatus(Event.EventStatus.NEW); - newEvent.setExecuteDate(deadline.getDate()); - newEvent.setCreateDate(new Date()); - newEvent.setUpdateDate(new Date()); - newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' cтатьи '" + newPaper.getTitle() + "'"); - newEvent.setRecipients(new ArrayList(newPaper.getAuthors())); - newEvent.setPaper(newPaper); - timeline.getEvents().add(eventRepository.save(newEvent)); - } - timelineService.save(timeline); - break; - case "ru.ulstu.conference.model.Conference": - newConference = (Conference)newObject; - for (Deadline deadline : newConference.getDeadlines() - .stream() - .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) - .collect(Collectors.toList())) { - Event newEvent = new Event(); - newEvent.setTitle("Дедлайн конференции"); - newEvent.setStatus(Event.EventStatus.NEW); - newEvent.setExecuteDate(deadline.getDate()); - newEvent.setCreateDate(new Date()); - newEvent.setUpdateDate(new Date()); - newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' конференции '" + newConference.getTitle() + "'"); - newConference.getUsers().forEach(conferenceUser -> newEvent.getRecipients().add(conferenceUser.getUser())); - newEvent.setConference(newConference); - save(newEvent); - timeline.getEvents().add(newEvent); - timelineService.save(timeline); - } - break; - case "ru.ulstu.grant.model.Grant": - newGrant = (Grant)newObject; - for (Deadline deadline : newGrant.getDeadlines() - .stream() - .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) - .collect(Collectors.toList())) { - Event newEvent = new Event(); - newEvent.setTitle("Дедлайн гранта"); - newEvent.setStatus(Event.EventStatus.NEW); - newEvent.setExecuteDate(deadline.getDate()); - newEvent.setCreateDate(new Date()); - newEvent.setUpdateDate(new Date()); - newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' гранта '" + newGrant.getTitle() + "'"); - if (newGrant.getAuthors() != null) { - newEvent.setRecipients(new ArrayList(newGrant.getAuthors())); - } - newEvent.getRecipients().add(newGrant.getLeader()); - newEvent.setGrant(newGrant); - eventRepository.save(newEvent); - - timeline.getEvents().add(newEvent); - timelineService.save(timeline); - } - break; - case "ru.ulstu.project.model.Project": - newProject = (Project)newObject; - for (Deadline deadline : newProject.getDeadlines() - .stream() - .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) - .collect(Collectors.toList())) { - Event newEvent = new Event(); - newEvent.setTitle("Дедлайн проекта"); - newEvent.setStatus(Event.EventStatus.NEW); - newEvent.setExecuteDate(deadline.getDate()); - newEvent.setCreateDate(new Date()); - newEvent.setUpdateDate(new Date()); - newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' проекта '" + newProject.getTitle() + "'"); - if (newProject.getExecutors() != null) { - newEvent.setRecipients(new ArrayList(newProject.getExecutors())); - } - newEvent.setProject(newProject); - eventRepository.save(newEvent); - - timeline.getEvents().add(newEvent); - timelineService.save(timeline); - } - break; - case "ru.ulstu.students.model.Task": - newTask = (Task)newObject; - for (Deadline deadline : newTask.getDeadlines() - .stream() - .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) - .collect(Collectors.toList())) { - Event newEvent = new Event(); - newEvent.setTitle("Дедлайн задачи"); - newEvent.setStatus(Event.EventStatus.NEW); - newEvent.setExecuteDate(deadline.getDate()); - newEvent.setCreateDate(new Date()); - newEvent.setUpdateDate(new Date()); - newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' задачи '" + newTask.getTitle() + "'"); - newEvent.getRecipients().add(userService.getCurrentUser()); - newEvent.setTask(newTask); - eventRepository.save(newEvent); - - timeline.getEvents().add(newEvent); - timelineService.save(timeline); - } - System.out.println("5"); - break; - default: - System.out.println("No such object"); - break; + timeline.getEvents().removeAll(events); + for (Deadline deadline : eventSource.getDeadlines() + .stream() + .filter(d -> d.getDate().after(new Date()) || DateUtils.isSameDay(d.getDate(), new Date())) + .collect(Collectors.toList())) { + Event newEvent = new Event(); + newEvent.setTitle("Дедлайн " + suffix); + newEvent.setStatus(Event.EventStatus.NEW); + newEvent.setExecuteDate(deadline.getDate()); + newEvent.setCreateDate(new Date()); + newEvent.setUpdateDate(new Date()); + newEvent.setDescription("Дедлайн '" + deadline.getDescription() + "' " + suffix + " '" + + eventSource.getTitle() + "'"); + if (addCurrentUser) { + newEvent.getRecipients().add(userService.getCurrentUser()); + } + newEvent.setRecipients(eventSource.getRecipients()); + eventSource.addObjectToEvent(newEvent); + timeline.getEvents().add(eventRepository.save(newEvent)); } + timelineService.save(timeline); } public void updatePaperDeadlines(Paper paper) { List foundEvents = eventRepository.findAllByPaper(paper); eventRepository.delete(foundEvents); - createFromObject(paper, foundEvents); + createFromObject(paper, foundEvents, false, "статьи"); } public List findByCurrentDate() { @@ -259,17 +155,17 @@ public class EventService { public void updateConferenceDeadlines(Conference conference) { eventRepository.delete(eventRepository.findAllByConference(conference)); - createFromObject(conference, Collections.emptyList()); + createFromObject(conference, Collections.emptyList(), false, "конференции"); } public void updateGrantDeadlines(Grant grant) { eventRepository.delete(eventRepository.findAllByGrant(grant)); - createFromObject(grant, Collections.emptyList()); + createFromObject(grant, Collections.emptyList(), false, "гранта"); } public void updateProjectDeadlines(Project project) { eventRepository.delete(eventRepository.findAllByProject(project)); - createFromObject(project, Collections.emptyList()); + createFromObject(project, Collections.emptyList(), false, "проекта"); } public void removeConferencesEvent(Conference conference) { @@ -279,6 +175,6 @@ public class EventService { public void updateTaskDeadlines(Task task) { eventRepository.delete(eventRepository.findAllByTask(task)); - createFromObject(task, Collections.emptyList()); + createFromObject(task, Collections.emptyList(), true, "задачи"); } -} +} \ No newline at end of file