package com.qprogramming.tasq.projects.holiday; import com.qprogramming.tasq.projects.Project; import com.qprogramming.tasq.support.Utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Set; import java.util.stream.Collectors; /** * Created by jromaniszyn on 06.07.2016. */ @Service public class HolidayService { private HolidayRepository holidayRepository; @Autowired public HolidayService(HolidayRepository holidayRepository) { this.holidayRepository = holidayRepository; } /** * Remove holiday * * @param holiday */ public void delete(Holiday holiday) { holidayRepository.delete(holiday); } /** * Create or update holiday * * @param holiday * @return */ public Holiday save(Holiday holiday) { return holidayRepository.save(holiday); } /** * Check if holidays were either removed or add in passed project. If passed holidaysSet is empty, all holidays will be removed * Have to be executed with full project object ( holidays filled in) * * @param holidaysSet - set containing holidays for project. * @param project - project for which holidays are updated * @return Project with updated holidays */ public Project processProjectHolidays(Set<String> holidaysSet, Project project) { Set<Holiday> projectHolidays = project.getHolidays(); //delete removed holidays projectHolidays.stream() .filter(holiday -> !holidaysSet.contains(holiday.getStringDate())) .forEach(holiday -> { project.getHolidays().remove(holiday); delete(holiday); }); //Add all new holidays if (!holidaysSet.isEmpty()) { Set<String> stringHolidays = project.getHolidays().stream().map(Holiday::getStringDate).collect(Collectors.toSet()); Set<Holiday> newHolidaySet = holidaysSet.stream() .filter(string -> !stringHolidays.contains(string)) .map(string -> new Holiday(Utils.convertStringToDate(string))) .collect(Collectors.toSet()); newHolidaySet.stream().forEach(holiday -> holiday = save(holiday)); project.getHolidays().addAll(newHolidaySet); } return project; } }