package com.plannaplan.services; import com.plannaplan.models.ConfigData; import com.plannaplan.models.FileData; import com.plannaplan.models.TourData; import com.plannaplan.repositories.AppConfigRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.InputStream; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import com.plannaplan.configutils.*; import com.plannaplan.entities.AppConfig; /** * FileReader is used for reading xls file from input stream. */ @Component public class ConfiguratorService { @Autowired private FileToDatabaseMigrator migrator; @Autowired private AppConfigRepository configRepo; public ConfiguratorService() { } /** * methoid to config system * * @param data ConfigData containng system configs */ public void config(ConfigData data) { FileReader reader = new FileReader(data.getFilestream()); FileData coursesData = reader.read(); this.configRepo.save(new AppConfig(data.getFirstTour(), data.getSecondTour())); migrator.migrate(coursesData); } /** * Save tours to DataBase * @param firstTour First tour period. * @param secondTour Second tour period. */ public void saveTours(TourData firstTour, TourData secondTour) { this.configRepo.save(new AppConfig(firstTour, secondTour)); } /** * current config getter * * @return AppConfig with newest config_date */ public AppConfig getCurrentConfig() { final List repsonse = this.configRepo.findAll().stream().sorted(new Comparator() { @Override public int compare(AppConfig i1, AppConfig i2) { if (i1.getConfigDate().after(i2.getConfigDate())) { return -1; } if (i1.getConfigDate().before(i2.getConfigDate())) { return 1; } return 0; } }).collect(Collectors.toList()); return repsonse.get(0); } /** * * @param inputStream This input stream contains new courses to import. */ public void importCoursesStream(InputStream inputStream) { FileReader reader = new FileReader(inputStream); FileData coursesData = reader.read(); migrator.migrate(coursesData); } }