package com.qxlva.nhs.service; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Properties; import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component public class LastQueriedUpperDateStore { private static final Logger LOGGER = LoggerFactory.getLogger(LastQueriedUpperDateStore.class); private static final String FILESTORE_NAME = "last_queried_upper_date.properties"; private static final String PROPERTY_NAME = "last.queried.upper.date"; private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); private Properties properties; private LocalDateTime lastQueriedUpperDate; @PostConstruct @SuppressWarnings("squid:S3457") public void initProperties() { properties = new Properties(); try (InputStream input = LastQueriedUpperDateStore.class.getClassLoader().getResourceAsStream(FILESTORE_NAME)) { if (input == null) { LOGGER.info("No last queried upper date store found"); lastQueriedUpperDate = null; return; } properties.load(input); String lastQueriedUpperDateAsString = properties.getProperty(PROPERTY_NAME); lastQueriedUpperDate = LocalDateTime.parse(lastQueriedUpperDateAsString, FORMATTER); } catch (IOException e) { LOGGER.error("Error reading last queried upper date property from file", e); } } public LocalDateTime getLastQueriedUpperDate() { return lastQueriedUpperDate; } public void setLastQueriedUpperDate(LocalDateTime lastQueriedUpperDate) { this.lastQueriedUpperDate = lastQueriedUpperDate; saveToFile(); } private void saveToFile() { if (lastQueriedUpperDate == null) { return; } try (OutputStream output = new FileOutputStream(FILESTORE_NAME)) { String formattedDateTime = lastQueriedUpperDate.format(FORMATTER); // "1986-04-08 12:30" // set the properties value properties.setProperty(PROPERTY_NAME, formattedDateTime); // save properties to project root folder properties.store(output, "The last queried upper date time for the GUID Extractor tool"); } catch (IOException e) { LOGGER.error("Failed to store last queried upper date property in file due to IO Exception", e); } } }