Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.42 KB | None | 0 0
  1. package com.epam.uc.calendar.service;
  2.  
  3. import static com.epam.uc.calendar.auth.verifier.role.RoleAccessInspector.getCurrentUser;
  4.  
  5. import com.epam.uc.calendar.auth.AuthUser;
  6. import com.epam.uc.calendar.auth.verifier.FlowInspector;
  7. import com.epam.uc.calendar.client.AttachmentServiceClient;
  8. import com.epam.uc.calendar.database.criteria.EventCriteriaBuilder;
  9. import com.epam.uc.calendar.database.model.BaseEntity;
  10. import com.epam.uc.calendar.database.model.Event;
  11. import com.epam.uc.calendar.database.model.EventApproval;
  12. import com.epam.uc.calendar.database.model.EventAttendee;
  13. import com.epam.uc.calendar.database.model.Image;
  14. import com.epam.uc.calendar.database.model.User;
  15. import com.epam.uc.calendar.database.model.UserEvent;
  16. import com.epam.uc.calendar.database.repository.EventApprovalRepository;
  17. import com.epam.uc.calendar.database.repository.EventRepository;
  18. import com.epam.uc.calendar.database.repository.ImageRepository;
  19. import com.epam.uc.calendar.database.repository.UserRepository;
  20. import com.epam.uc.calendar.database.sample.EventPaginationObject;
  21. import com.epam.uc.calendar.database.sample.EventSampleObject;
  22. import com.epam.uc.calendar.dto.PromotedStatusDto;
  23. import com.epam.uc.calendar.outlook.model.OutlookResponse;
  24. import com.epam.uc.calendar.outlook.service.OutlookService;
  25. import com.epam.uc.event.model.EventState;
  26. import com.epam.uc.event.model.UserResponse;
  27. import com.epam.uc.event.model.UserType;
  28. import com.epam.uc.event.model.dto.EventApprovalDto;
  29. import com.epam.uc.event.model.dto.EventDto;
  30. import com.epam.uc.event.model.dto.FileInfoDto;
  31. import com.epam.uc.event.model.dto.UserDto;
  32. import com.epam.uc.outlook.model.OutlookMessageDto;
  33. import com.epam.uc.template.model.MailDraftDto;
  34. import java.util.ArrayList;
  35. import java.util.Collections;
  36. import java.util.HashSet;
  37. import java.util.List;
  38. import java.util.Objects;
  39. import java.util.Optional;
  40. import java.util.Set;
  41. import java.util.function.Predicate;
  42. import java.util.stream.Collectors;
  43. import javax.persistence.EntityManager;
  44. import javax.persistence.EntityNotFoundException;
  45. import lombok.NonNull;
  46. import lombok.extern.slf4j.Slf4j;
  47. import org.modelmapper.ModelMapper;
  48. import org.springframework.beans.factory.annotation.Autowired;
  49. import org.springframework.stereotype.Service;
  50. import org.springframework.transaction.annotation.Transactional;
  51.  
  52. @Service
  53. @Transactional
  54. @Slf4j
  55. public class EventService {
  56.  
  57. private static final Integer DEFAULT_PAGE_SIZE = 10;
  58.  
  59. private final EventRepository eventRepository;
  60. private final UserRepository userRepository;
  61. private final EventApprovalRepository approvalRepository;
  62. private final EntityManager entityManager;
  63. private final ImageRepository imageRepository;
  64. private final EventManager eventManager;
  65. private final FlowInspector flowInspector;
  66. private final OutlookService outlookService;
  67. private final RealTemplateService realTemplateService;
  68. private final ModelMapper modelMapper;
  69. private final AttachmentServiceClient attachmentServiceClient;
  70.  
  71. @Autowired
  72. public EventService(EventRepository eventRepository,
  73. UserRepository userRepository,
  74. EventApprovalRepository approvalRepository,
  75. EntityManager entityManager,
  76. ImageRepository imageRepository,
  77. EventManager eventManager,
  78. FlowInspector flowInspector,
  79. OutlookService outlookService,
  80. RealTemplateService realTemplateService,
  81. ModelMapper modelMapper,
  82. AttachmentServiceClient attachmentServiceClient) {
  83. this.eventRepository = eventRepository;
  84. this.userRepository = userRepository;
  85. this.approvalRepository = approvalRepository;
  86. this.entityManager = entityManager;
  87. this.imageRepository = imageRepository;
  88. this.eventManager = eventManager;
  89. this.flowInspector = flowInspector;
  90. this.outlookService = outlookService;
  91. this.realTemplateService = realTemplateService;
  92. this.modelMapper = modelMapper;
  93. this.attachmentServiceClient = attachmentServiceClient;
  94. }
  95.  
  96. public EventDto processEventApproval(@NonNull MailDraftDto mailDraftDto) {
  97. EventDto eventDto = new EventDto();
  98. if (isEmpty(mailDraftDto)) {
  99. eventDto = approveEvent(mailDraftDto);
  100. } else if (isNotEmpty(mailDraftDto)) {
  101. realTemplateService.update(mailDraftDto, mailDraftDto.getEventId());
  102. eventDto = approveEvent(mailDraftDto);
  103. }
  104. return eventDto;
  105. }
  106.  
  107. private boolean isNotEmpty(@NonNull MailDraftDto mailDraftDto) {
  108. return mailDraftDto.getEventId() != null && mailDraftDto.getRecipients() != null
  109. && mailDraftDto.getText() != null && mailDraftDto.getImageUrl() != null
  110. && mailDraftDto.getTemplate() != null;
  111. }
  112.  
  113. private boolean isEmpty(@NonNull MailDraftDto mailDraftDto) {
  114. return mailDraftDto.getTemplate() == null && mailDraftDto.getText() == null
  115. && mailDraftDto.getImageUrl() == null && mailDraftDto.getRecipients() == null
  116. && mailDraftDto.getEventId() != null;
  117. }
  118.  
  119.  
  120. public Event findOne(@NonNull Long eventId) {
  121. Event event = eventManager.buildEventWithPopulatedUsersData(eventRepository.findOne(eventId));
  122.  
  123. if (event == null) {
  124. throw new EntityNotFoundException(String.format("No event with id: %d", eventId));
  125. }
  126.  
  127. return event;
  128. }
  129.  
  130. public List<Event> getAllEvents(EventSampleObject sampleObject,
  131. EventPaginationObject paginationObject) {
  132.  
  133. EventCriteriaBuilder eventCriteriaBuilder = new EventCriteriaBuilder(entityManager);
  134.  
  135. List<Event> resultList = null;
  136. AuthUser authUser = getCurrentUser();
  137. String userEmail = authUser.getEmail()
  138. .toLowerCase();
  139.  
  140. switch (authUser.getRole()) {
  141. case ROLE_ADMIN:
  142. resultList = eventCriteriaBuilder.getAllAdminEvents(sampleObject, paginationObject);
  143. break;
  144. case ROLE_MODERATOR:
  145. Set<Long> availableLocations = authUser.getLocations();
  146. Set<Long> availableTypes = authUser.getTypes();
  147. resultList = eventCriteriaBuilder.getAllModeratorEvents(userEmail, sampleObject,
  148. paginationObject,
  149. availableLocations, availableTypes);
  150. break;
  151. case ROLE_REGULAR_USER:
  152. resultList = eventCriteriaBuilder.getAllRegularUserEvents(userEmail, sampleObject,
  153. paginationObject);
  154. break;
  155. }
  156.  
  157. return eventManager.buildSetOfEventsWithPopulatedUsersData(resultList);
  158. }
  159.  
  160. public List<Event> getModeratorPageEvents(EventSampleObject sampleObject,
  161. EventPaginationObject paginationObject) {
  162. return getAllEvents(sampleObject, paginationObject);
  163. }
  164.  
  165. public List<Event> getAllMyEvents(EventSampleObject filterObject,
  166. EventPaginationObject eventPaginationObject) {
  167.  
  168. AuthUser authUser = getCurrentUser();
  169. String userEmail = authUser.getEmail();
  170.  
  171. if (userEmail == null) {
  172. return new ArrayList<>();
  173. }
  174.  
  175. EventCriteriaBuilder eventCriteriaBuilder = new EventCriteriaBuilder(entityManager);
  176.  
  177. List<Event> myEventsList = eventCriteriaBuilder.getAllMyEvent(userEmail.toLowerCase(),
  178. filterObject,
  179. eventPaginationObject);
  180.  
  181. return eventManager.buildSetOfEventsWithPopulatedUsersData(myEventsList);
  182. }
  183.  
  184. public Event createEvent(Event event) {
  185. resetIdForEntityCreationInHibernate(event);
  186.  
  187. createAuthorAndSpeakerIfNotExists(event);
  188.  
  189. setEventApproval(event, EventState.PROPOSED);
  190.  
  191. Set<User> users = event.getAttendees()
  192. .stream()
  193. .map(EventAttendee::getUser)
  194. .filter(Objects::nonNull)
  195. .collect(Collectors.toSet());
  196. createUsersIfNotInDatabase(users);
  197. setUserEventsHibernateBindingsWithDefaultResponse(event);
  198.  
  199. if (event.getImage() != null && event.getImage().getBytes().length != 0) {
  200. event = uploadEventImage(event);
  201. }
  202.  
  203. return eventRepository.save(event);
  204. }
  205.  
  206. private void updateOutlookResponseInEvent(Optional<EventAttendee> eventAttendee, Event event,
  207. OutlookResponse outlookResponse) {
  208. if (eventAttendee.isPresent()) {
  209. event.getAttendees()
  210. .stream()
  211. .filter(userFromEmail(outlookResponse.getUserEmail()))
  212. .forEach(a -> a.setOutlookResponse(outlookResponse.getResponse()));
  213. } else {
  214. log.info(
  215. String.format("Illegal answer from Outlook: user %s is not an attendee of an event %d",
  216. outlookResponse.getUserEmail(), event.getId()));
  217. throw new UnsupportedOperationException(
  218. "Not invited user should not be able to answer to the appointment in Outlook");
  219. }
  220. eventRepository.save(event);
  221. }
  222.  
  223. private void updateOutlookResponseForUser(Long eventId, User user,
  224. OutlookResponse outlookResponse) {
  225. user.getUserEvents()
  226. .stream()
  227. .filter(a -> a.getEvent()
  228. .getId()
  229. .equals(eventId))
  230. .forEach(a -> a.setOutlookResponse(outlookResponse.getResponse()));
  231. userRepository.save(user);
  232. }
  233.  
  234. public void updateOutlookResponse(Long eventId, OutlookResponse outlookResponse) {
  235. Event event = findOne(eventId);
  236. User user = userRepository.findByLinkIgnoreCase(outlookResponse.getUserEmail());
  237.  
  238. if (user == null) {
  239. log.info(String.format("Illegal answer from Outlook: user %s is not registered",
  240. outlookResponse.getUserEmail()));
  241. throw new UnsupportedOperationException(
  242. "User should be registered in this application before he is invited to Outlook event");
  243. }
  244.  
  245. Optional<EventAttendee> userEvent = event.getAttendees()
  246. .stream()
  247. .filter(userFromEmail(outlookResponse.getUserEmail()))
  248. .findFirst();
  249. updateOutlookResponseInEvent(userEvent, event, outlookResponse);
  250. updateOutlookResponseForUser(eventId, user, outlookResponse);
  251. }
  252.  
  253. private void editAttendeeInOutlook(EventState eventApproval, UserEvent userEvent) {
  254. if (userEvent != null && eventApproval.equals(EventState.APPROVED)) {
  255. //TODO: add checks whether the user is in outlook event
  256. switch (userEvent.getUserResponse()) {
  257. case ACCEPTED:
  258. case TENTATIVE:
  259. outlookService.addAttendeeToEvent(userEvent);
  260. break;
  261. case DECLINED:
  262. outlookService.removeAttendeeFromEvent(userEvent);
  263. break;
  264. default:
  265. return;
  266. }
  267. }
  268. }
  269.  
  270. private UserEvent updateUserResponseInEvent(Optional<EventAttendee> eventAttendee, User user,
  271. Event event, UserResponse userResponse) {
  272. UserEvent userEvent;
  273. AuthUser authUser = getCurrentUser();
  274. if (eventAttendee.isPresent()) {
  275. userEvent = (UserEvent) eventAttendee.get();
  276. event.getAttendees()
  277. .stream()
  278. .filter(userFromEmail(authUser.getEmail()))
  279. .forEach(a -> a.setUserResponse(userResponse));
  280. } else {
  281. flowInspector.checkCreateUserResponseFlow(event);
  282. userEvent = new UserEvent(event, user, userResponse);
  283. event.getAttendees()
  284. .add(userEvent);
  285. }
  286. eventRepository.save(event);
  287. return userEvent;
  288. }
  289.  
  290. private void updateUserResponseForUser(Long eventId, User user,
  291. UserResponse userResponse) {
  292. user.getUserEvents()
  293. .stream()
  294. .filter(a -> a.getEvent()
  295. .getId()
  296. .equals(eventId))
  297. .forEach(a -> a.setUserResponse(userResponse));
  298. userRepository.save(user);
  299. }
  300.  
  301. public UserEvent updateUserResponse(Long eventId, UserResponse newUserResponse) {
  302. Event event = findOne(eventId);
  303. AuthUser authUser = getCurrentUser();
  304. User user = userRepository.findByLinkIgnoreCase(authUser.getEmail());
  305.  
  306. //TODO add call to user service (or telescope) to receive user info
  307. if (user == null) {
  308. user = new User(authUser.getName(), authUser.getEmail(), UserType.EPAMER, "", "");
  309. userRepository.save(user);
  310. }
  311.  
  312. Optional<EventAttendee> eventAttendee = event.getAttendees()
  313. .stream()
  314. .filter(userFromEmail(authUser.getEmail()))
  315. .findFirst();
  316.  
  317. UserEvent result = updateUserResponseInEvent(eventAttendee, user, event, newUserResponse);
  318. updateUserResponseForUser(eventId, user, newUserResponse);
  319. editAttendeeInOutlook(event.getEventApproval()
  320. .getName(), result);
  321. return result;
  322. }
  323.  
  324. public UserEvent addAttendee(@NonNull Long eventId) {
  325. Event event = findOne(eventId);
  326. AuthUser authUser = getCurrentUser();
  327.  
  328. Optional<EventAttendee> eventAttendee = event.getAttendees()
  329. .stream()
  330. .filter(userFromEmail(authUser.getEmail()))
  331. .findFirst();
  332.  
  333. if (!eventAttendee.isPresent()) {
  334. User user = userRepository.findByLinkIgnoreCase(authUser.getEmail());
  335.  
  336. //TODO add call to user service (or telescope) to receive user info
  337. if (user == null) {
  338. user = new User(authUser.getName(), authUser.getEmail(), UserType.EPAMER, "", "");
  339. userRepository.save(user);
  340. }
  341. flowInspector.checkCreateUserResponseFlow(event);
  342. UserEvent userEvent = new UserEvent(event, user, UserResponse.NOT_RESPONDED);
  343. event.getAttendees()
  344. .add(userEvent);
  345. eventRepository.save(event);
  346. user.getUserEvents()
  347. .add(userEvent);
  348. userRepository.save(user);
  349. outlookService.addAttendeeToEvent(userEvent);
  350. return userEvent;
  351. }
  352. return (UserEvent) eventAttendee.get();
  353. }
  354.  
  355. public void addNewAttendees(Long eventId, MailDraftDto mailDraftDto) {
  356. List<UserDto> expandedUsers = outlookService.expandMailboxes(
  357. new HashSet<>(mailDraftDto.getRecipients()))
  358. .stream()
  359. .map(outlookMailboxDto -> modelMapper.map(
  360. outlookMailboxDto, UserDto.class))
  361. .collect(Collectors.toList());
  362.  
  363. Event event = eventRepository.findOne(eventId);
  364.  
  365. Set<String> attendeeLinks = event.getAttendees()
  366. .stream()
  367. .map(EventAttendee::getUser)
  368. .map(User::getLink)
  369. .map(String::toLowerCase)
  370. .collect(Collectors.toSet());
  371.  
  372. expandedUsers.forEach(recipient -> {
  373. if (!attendeeLinks.contains(recipient.getEmail()
  374. .toLowerCase())) {
  375. User newAttendee = modelMapper.map(recipient, User.class);
  376. User userInRepository = userRepository.findByLinkIgnoreCase(newAttendee.getLink());
  377.  
  378. if (userInRepository == null) {
  379. userRepository.saveAndFlush(newAttendee);
  380. } else {
  381. newAttendee = userInRepository;
  382. }
  383.  
  384. event.addAttendee(newAttendee, UserResponse.NOT_RESPONDED);
  385. }
  386. });
  387.  
  388. eventRepository.save(event);
  389. }
  390.  
  391. public void removeAttendee(@NonNull Long eventId) {
  392. Event event = findOne(eventId);
  393. AuthUser authUser = getCurrentUser();
  394. User user = userRepository.findByLinkIgnoreCase(authUser.getEmail());
  395.  
  396. //TODO add call to user service (or telescope) to receive user info
  397. if (user == null) {
  398. throw new UnsupportedOperationException("Cannot remove a non-existent user from event");
  399. }
  400.  
  401. Optional<EventAttendee> eventAttendee = event.getAttendees()
  402. .stream()
  403. .filter(userFromEmail(authUser.getEmail()))
  404. .findFirst();
  405. if (eventAttendee.isPresent()) {
  406. EventAttendee attendee = eventAttendee.get();
  407. event.getAttendees()
  408. .remove(attendee);
  409. eventRepository.save(event);
  410. user.getUserEvents().remove(attendee);
  411. userRepository.save(user);
  412. outlookService.removeAttendeeFromEvent((UserEvent) attendee);
  413. }
  414. }
  415.  
  416. private void setEventLogo(Event event) {
  417. //FIXME remove this!!
  418. String logo = String.format("http://localhost:8080/calendar/events/%d/image", event.getId());
  419. event.setLogo(logo);
  420. }
  421.  
  422. public UserResponse getCurrentStatus(long eventId) {
  423. Event event = findOne(eventId);
  424. AuthUser authUser = getCurrentUser();
  425. String userEmail = authUser.getEmail();
  426.  
  427. return event.getAttendees()
  428. .stream()
  429. .filter(userFromEmail(userEmail))
  430. .map(EventAttendee::getUserResponse)
  431. .findFirst()
  432. .orElse(UserResponse.NOT_ATTENDEE);
  433. }
  434.  
  435. private EventDto setAttachments(EventDto eventDto) {
  436. try {
  437. List<FileInfoDto> attachmentList = getAttachments(eventDto);
  438.  
  439. eventDto.setAttachments(attachmentList);
  440. } catch (Exception e) {
  441. eventDto.setAttachments(Collections.emptyList());
  442. }
  443. return eventDto;
  444. }
  445.  
  446. private List<FileInfoDto> getAttachments(EventDto eventDto) {
  447. return eventDto.getAttachmentIds().stream()
  448. .map(attachmentId -> attachmentServiceClient
  449. .getAttachmentsInfo(
  450. attachmentId).getBody())
  451. .collect(Collectors.toList());
  452. }
  453.  
  454. public EventDto approveEvent(MailDraftDto mailDraftDto) {
  455. boolean eventExists = eventRepository.exists(mailDraftDto.getEventId());
  456.  
  457. if (eventExists) {
  458. Event event = eventRepository.findOne(mailDraftDto.getEventId());
  459. setEventApproval(event, EventState.APPROVED);
  460. eventRepository.save(event);
  461. outlookService.createEvent(event, mailDraftDto);
  462.  
  463. EventDto eventDto = modelMapper.map(event, EventDto.class);
  464. return setAttachments(eventDto);
  465. } else {
  466. throw new IllegalArgumentException("This event does not exist, you cannot approve it");
  467. }
  468. }
  469.  
  470. private void setNotChangingValues(Event eventPassedToUpdate, Event eventFromDatabase) {
  471. eventPassedToUpdate.setEventApproval(eventFromDatabase.getEventApproval());
  472. eventPassedToUpdate.setAuthor(eventFromDatabase.getAuthor());
  473. eventPassedToUpdate.setId(eventFromDatabase.getId());
  474. if (eventFromDatabase.getEventApproval()
  475. .getName()
  476. .equals(EventState.APPROVED)) {
  477. eventPassedToUpdate.setType(eventFromDatabase.getType());
  478. }
  479.  
  480. if (eventPassedToUpdate.getLocation() == null) {
  481. eventPassedToUpdate.setLocation(eventFromDatabase.getLocation());
  482. }
  483.  
  484. if (eventPassedToUpdate.getCity() == null) {
  485. eventPassedToUpdate.setCity(eventFromDatabase.getCity());
  486. }
  487.  
  488. if (eventPassedToUpdate.getName() == null) {
  489. eventPassedToUpdate.setName(eventFromDatabase.getName());
  490. }
  491.  
  492. if (eventPassedToUpdate.getFullDescription() == null) {
  493. eventPassedToUpdate.setFullDescription(eventFromDatabase.getFullDescription());
  494. }
  495.  
  496. if (eventPassedToUpdate.getType() == null) {
  497. eventPassedToUpdate.setType(eventFromDatabase.getType());
  498. }
  499. if (eventPassedToUpdate.getStartTime() == null || eventPassedToUpdate.getEndTime() == null) {
  500. eventFromDatabase.setStartTime(eventFromDatabase.getStartTime());
  501. eventFromDatabase.setEndTime(eventFromDatabase.getEndTime());
  502. }
  503. }
  504.  
  505. public void deleteEvent(Long eventId) {
  506. if (!eventRepository.exists(eventId)) {
  507. throw new EntityNotFoundException("Entity doesn`t exist!");
  508. }
  509.  
  510. eventRepository.delete(eventId);
  511. }
  512.  
  513.  
  514. Image getEventImage(Long eventId) {
  515. if (eventId == null) {
  516. throw new IllegalArgumentException("Cannot get an image for eventId = null");
  517. }
  518. // FIXME: 8/28/2017 Event selected to find image!!!
  519. return imageRepository.findByEventId(eventId);
  520. }
  521.  
  522. public Set<EventAttendee> findAllEventAttendees(Long eventId) {
  523. return eventRepository.findOne(eventId)
  524. .getAttendees();
  525. }
  526.  
  527. public List<EventApprovalDto> findAllApprovals() {
  528. return approvalRepository.findAll().stream()
  529. .map(x -> modelMapper.map(x, EventApprovalDto.class))
  530. .collect(Collectors.toList());
  531. }
  532.  
  533. private Event uploadEventImage(Event event) {
  534. imageRepository.deleteByEventId(event.getId());
  535. Image image = event.getImage();
  536. image.setEvent(event);
  537. imageRepository.save(image);
  538. event.setImage(null);
  539. eventRepository.save(event);
  540. setEventLogo(event);
  541. return event;
  542. }
  543.  
  544. private void updateEventAttendees(Event event) {
  545. List<EventAttendee> attendees = new ArrayList<>(event.getAttendees());
  546. event.getAttendees()
  547. .clear();
  548.  
  549. for (EventAttendee attendee : attendees) {
  550. event.addAttendee(attendee.getUser(), UserResponse.NOT_RESPONDED);
  551. }
  552. }
  553.  
  554. private Predicate<EventAttendee> userFromEmail(String userEmail) {
  555. return eventAttendee -> eventAttendee.getUser().getLink().equalsIgnoreCase(userEmail);
  556. }
  557.  
  558. private void createAuthorAndSpeakerIfNotExists(Event event) {
  559. User author = event.getAuthor();
  560. Set<User> speakers = event.getSpeakers();
  561.  
  562. author.setLink(author.getLink()
  563. .toLowerCase());
  564. speakers.forEach(speaker -> speaker.setLink(speaker.getLink()
  565. .toLowerCase()));
  566.  
  567. if (speakers.contains(author)) {
  568. speakers.add(author);
  569. } else {
  570. createUserIfNotInDatabase(author);
  571. }
  572.  
  573. for (User speaker : event.getSpeakers()) {
  574. createUserIfNotInDatabase(speaker);
  575. }
  576. }
  577.  
  578. private void createUserIfNotInDatabase(User user) {
  579. if (user == null) {
  580. return;
  581. }
  582.  
  583. User persistedUser = userRepository.findByLinkIgnoreCase(user.getLink());
  584.  
  585. if (persistedUser == null) {
  586. userRepository.save(user);
  587. }
  588. }
  589.  
  590. private void createUsersIfNotInDatabase(Set<User> users) {
  591. Set<String> links = users.stream()
  592. .map(User::getLink)
  593. .collect(Collectors.toSet());
  594. List<User> persistedUsers = userRepository.findAllByLinkInIgnoreCase(links);
  595.  
  596. users.removeAll(persistedUsers);
  597. userRepository.save(users);
  598. }
  599.  
  600.  
  601. private void resetIdForEntityCreationInHibernate(BaseEntity entity) {
  602. entity.setId(null);
  603. }
  604.  
  605. private void setUserEventsHibernateBindingsWithDefaultResponse(Event event) {
  606.  
  607. Set<EventAttendee> attendeesToSave = new HashSet<>();
  608.  
  609. for (EventAttendee attendee : event.getAttendees()) {
  610. UserEvent userEvent = new UserEvent(event, attendee.getUser(), UserResponse.NOT_RESPONDED);
  611. attendeesToSave.add(userEvent);
  612. }
  613.  
  614. event.setAttendees(attendeesToSave);
  615. }
  616.  
  617. private void setEventApproval(Event event, EventState state) {
  618. // FIXME: 7/19/2017 Fix approval - change default state from fixed name to smth else, enums for example.
  619. EventApproval approval = approvalRepository.findByName(state);
  620. event.setEventApproval(approval);
  621. }
  622.  
  623. public Event updateEventState(Event event, EventState newEventState) {
  624. if (event == null || newEventState == null) {
  625. return event;
  626. }
  627. EventApproval approval = approvalRepository.findByName(newEventState);
  628. event.setEventApproval(approval);
  629. eventRepository.save(event);
  630. return event;
  631. }
  632.  
  633.  
  634. public void deleteEventImage(Long eventId) {
  635. if (eventId == null) {
  636. throw new IllegalArgumentException("Cannot delete an image of an event with id = null");
  637. }
  638. Image image = imageRepository.findByEventId(eventId);
  639. if (image != null) {
  640. image.getEvent()
  641. .setImage(null);
  642. imageRepository.save(image);
  643. imageRepository.delete(image);
  644. }
  645. }
  646.  
  647. public Event getHeadliner(Long typeId) {
  648. EventCriteriaBuilder eventCriteriaBuilder = new EventCriteriaBuilder(entityManager);
  649.  
  650. return eventCriteriaBuilder.getHeadliner(typeId);
  651. }
  652.  
  653. public Event updateEventPromotedStatus(PromotedStatusDto promotedStatusDto, Long eventId) {
  654. if (promotedStatusDto.getIsPromoted() == null) {
  655. throw new NullPointerException("Event promoted status can not be null!");
  656. }
  657.  
  658. Event oldEvent = eventRepository.findOne(eventId);
  659. if (oldEvent == null) {
  660. return null;
  661. }
  662.  
  663. flowInspector.checkEventHeadlinerFlow(oldEvent);
  664.  
  665. oldEvent.setIsPromoted(promotedStatusDto.getIsPromoted());
  666. return eventRepository.save(oldEvent);
  667. }
  668.  
  669. public void rejectEvent(Long eventId, OutlookMessageDto rejectOutlookMessage) {
  670.  
  671. Event currentEvent = findOne(eventId);
  672.  
  673. flowInspector.checkEventStatusUpdateFlow(currentEvent, EventState.REJECTED);
  674. updateEventState(currentEvent, EventState.REJECTED);
  675.  
  676. if (rejectOutlookMessage != null) {
  677. outlookService.deleteEvent(eventId, rejectOutlookMessage);
  678. } else {
  679. outlookService.deleteEvent(eventId);
  680. }
  681. }
  682.  
  683. public Event getEvent(Long eventId) {
  684. Event event = findOne(eventId);
  685. if (event.getIsPrivate()) {
  686. flowInspector.checkEventAttendeeGetFlow(event);
  687. }
  688. return event;
  689. }
  690.  
  691. public Event updateEvent(Long eventId, Event newEvent) {
  692. Event oldEvent = findOne(eventId);
  693.  
  694. flowInspector.checkEventUpdateFlow(oldEvent);
  695.  
  696. setNotChangingValues(newEvent, oldEvent);
  697.  
  698. Set<User> users = new HashSet<>();
  699. for (EventAttendee attendee : newEvent.getAttendees()) {
  700. users.add(attendee.getUser());
  701. }
  702.  
  703. createUsersIfNotInDatabase(users);
  704. updateEventAttendees(newEvent);
  705.  
  706. if (oldEvent.getEventApproval()
  707. .getName()
  708. .equals(EventState.APPROVED)) {
  709. outlookService.updateEvent(newEvent);
  710. }
  711. // FIXME: 10/17/2017 we should fix this piece when we will fix "logo upload flow"
  712. if (newEvent.getImage() != null && newEvent.getImage()
  713. .getBytes() != null) {
  714. newEvent = uploadEventImage(newEvent);
  715. }
  716. //TODO [MS] 12.11.17 temporary solution until file-service is implemented
  717. if (newEvent.getLogoImageId() == null) {
  718. newEvent.setLogoImageId(oldEvent.getLogoImageId());
  719. }
  720.  
  721. return eventRepository.save(newEvent);
  722. }
  723.  
  724. public void secureEventDelete(Long eventId) {
  725.  
  726. Event currentEvent = findOne(eventId);
  727. EventState oldState = currentEvent.getEventApproval()
  728. .getName();
  729. flowInspector.checkEventDeleteFlow(currentEvent);
  730.  
  731. deleteEvent(eventId);
  732.  
  733. if (oldState.equals(EventState.APPROVED)) {
  734. outlookService.deleteEvent(eventId);
  735. }
  736. }
  737.  
  738. public void secureEventImageDelete(Long eventId) {
  739. if (eventId == null) {
  740. throw new IllegalArgumentException("Cannot delete an image of an event with id = null");
  741. }
  742. Event currentEvent = findOne(eventId);
  743.  
  744. flowInspector.checkEventImageDeleteFlow(currentEvent);
  745.  
  746. deleteEventImage(eventId);
  747. }
  748. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement