diff --git a/src/main/java/ro/petitii/config/ImapConfig.java b/src/main/java/ro/petitii/config/ImapConfig.java index 5519ce0..02e7105 100644 --- a/src/main/java/ro/petitii/config/ImapConfig.java +++ b/src/main/java/ro/petitii/config/ImapConfig.java @@ -47,8 +47,8 @@ public void setSsl(Boolean ssl) { this.ssl = ssl; } - public Boolean getForceTrust() { - return forceTrust; + public boolean getForceTrust() { + return forceTrust == null ? false : forceTrust; } public void setForceTrust(Boolean forceTrust) { diff --git a/src/main/java/ro/petitii/config/ServerConfig.java b/src/main/java/ro/petitii/config/ServerConfig.java index a036fe2..df8b4d7 100644 --- a/src/main/java/ro/petitii/config/ServerConfig.java +++ b/src/main/java/ro/petitii/config/ServerConfig.java @@ -3,6 +3,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @@ -10,31 +11,15 @@ import java.net.UnknownHostException; @Component +@ConfigurationProperties(prefix = "petitii.baseUrl") public class ServerConfig { - private static final Logger logger = LoggerFactory.getLogger(ServerConfig.class); + private String url; - @Autowired - private Environment environment; - - public String serverPort() { - return environment.getProperty("local.server.port"); - } - - public String serverHostname() { - try { - return InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { - logger.error("Could not determine de server hostname. Returning null ..."); - return null; - } - } - - public String serverProtocol() { - //todo; do something here when https is configured - return "http"; + public void setUrl(String url) { + this.url = url; } public String serverUrl() { - return serverProtocol() + "://" + serverHostname() + ":" + serverPort(); + return url; } } diff --git a/src/main/java/ro/petitii/config/SmtpConfig.java b/src/main/java/ro/petitii/config/SmtpConfig.java index 1a004e2..71693cf 100644 --- a/src/main/java/ro/petitii/config/SmtpConfig.java +++ b/src/main/java/ro/petitii/config/SmtpConfig.java @@ -44,8 +44,8 @@ public void setSsl(Boolean ssl) { this.ssl = ssl; } - public Boolean getForceTrust() { - return forceTrust; + public boolean getForceTrust() { + return forceTrust == null ? false : forceTrust; } public void setForceTrust(Boolean forceTrust) { diff --git a/src/main/java/ro/petitii/model/datatables/PetitionConverter.java b/src/main/java/ro/petitii/model/datatables/PetitionConverter.java index ce5ae1f..863e726 100644 --- a/src/main/java/ro/petitii/model/datatables/PetitionConverter.java +++ b/src/main/java/ro/petitii/model/datatables/PetitionConverter.java @@ -40,7 +40,7 @@ public PetitionResponse convert(Petition petition) { element.setStatus(messageSource.getMessage(petition.statusString(), null, new Locale("ro"))); DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); element.setDeadline(df.format(petition.getDeadline())); - element.setAlertStatus(alertStatus(new Date(), petition.getDeadline(), deadlineConfig)); + element.setAlertStatus(alertStatus(petition.getCurrentStatus(), new Date(), petition.getDeadline(), deadlineConfig)); return element; } } diff --git a/src/main/java/ro/petitii/tasks/CronScheduler.java b/src/main/java/ro/petitii/tasks/CronScheduler.java index 5520cfe..18cb777 100644 --- a/src/main/java/ro/petitii/tasks/CronScheduler.java +++ b/src/main/java/ro/petitii/tasks/CronScheduler.java @@ -18,7 +18,7 @@ @Component public class CronScheduler { - private static final Logger LOGGER = LoggerFactory.getLogger(CronScheduler.class); + private static final Logger logger = LoggerFactory.getLogger(CronScheduler.class); @Autowired private TaskScheduler scheduler; @@ -52,19 +52,23 @@ public class CronScheduler { public void setupScheduledTasks() { if (schedulerConfig.emailCronPattern() != null) { - LOGGER.info("Successfully scheduled the email checker: " + schedulerConfig.emailCronPattern()); + logger.info("Successfully scheduled the email checker: " + schedulerConfig.emailCronPattern()); scheduler.schedule(new EmailChecker(imapService), new CronTrigger(schedulerConfig.emailCronPattern())); } else { - LOGGER.info("The email checker is not running ..."); + logger.info("The email checker is not running ..."); } if (schedulerConfig.deadlineCronPattern() != null) { - LOGGER.info("Successfully scheduled the deadline checker: " + schedulerConfig.deadlineCronPattern()); - scheduler.schedule(new DeadlineChecker(userService, petitionService, smtpService, - processorService, smtpConfig, deadlineConfig, config.serverUrl()), - new CronTrigger(schedulerConfig.deadlineCronPattern())); + if (config.serverUrl() == null) { + logger.error("Invalid base server url, the deadline checker is not running ..."); + } else { + logger.info("Successfully scheduled the deadline checker: " + schedulerConfig.deadlineCronPattern()); + scheduler.schedule(new DeadlineChecker(userService, petitionService, smtpService, processorService, + smtpConfig, deadlineConfig, config.serverUrl()), + new CronTrigger(schedulerConfig.deadlineCronPattern())); + } } else { - LOGGER.info("The deadline checker is not running ..."); + logger.info("The deadline checker is not running ..."); } } } diff --git a/src/main/java/ro/petitii/tasks/DeadlineChecker.java b/src/main/java/ro/petitii/tasks/DeadlineChecker.java index 2a298f1..d261cf0 100644 --- a/src/main/java/ro/petitii/tasks/DeadlineChecker.java +++ b/src/main/java/ro/petitii/tasks/DeadlineChecker.java @@ -65,8 +65,8 @@ private Map> petitionNotifications(List petitio Map> result = new HashMap<>(); Date today = new Date(); for (Petition petition : petitions) { - String alert = alertStatus(today, petition.getDeadline(), deadlineConfig); - if (!alert.isEmpty()) { + String alert = alertStatus(petition.getCurrentStatus(), today, petition.getDeadline(), deadlineConfig); + if (!alert.isEmpty() && !alert.equalsIgnoreCase("green")) { List alertList = result.computeIfAbsent(alert, k -> new LinkedList<>()); alertList.add(petition); } diff --git a/src/main/java/ro/petitii/util/DateUtil.java b/src/main/java/ro/petitii/util/DateUtil.java index 69108d3..2f4f161 100644 --- a/src/main/java/ro/petitii/util/DateUtil.java +++ b/src/main/java/ro/petitii/util/DateUtil.java @@ -1,6 +1,7 @@ package ro.petitii.util; import ro.petitii.config.DeadlineConfig; +import ro.petitii.model.PetitionStatus; import java.time.temporal.ChronoUnit; import java.util.Calendar; @@ -20,17 +21,21 @@ public static Date deadline(Date d, int deadline) { return cal.getTime(); } - public static String alertStatus(Date currentDate, Date deadline, DeadlineConfig deadlineConfig) { - long days = days(currentDate, deadline); - if (days <= deadlineConfig.redAlert()) { - return "red"; - } + public static String alertStatus(PetitionStatus.Status status, Date currentDate, Date deadline, DeadlineConfig deadlineConfig) { + if (status == PetitionStatus.Status.CLOSED || status == PetitionStatus.Status.SOLVED) { + return "green"; + } else { + long days = days(currentDate, deadline); + if (days <= deadlineConfig.redAlert()) { + return "red"; + } - if (days <= deadlineConfig.yellowAlert()) { - return "yellow"; - } + if (days <= deadlineConfig.yellowAlert()) { + return "yellow"; + } - return ""; + return ""; + } } private static long days(Date d1, Date d2) { diff --git a/src/main/resources/config/application.yml.template b/src/main/resources/config/application.yml.template index 24aaddd..61fadbe 100644 --- a/src/main/resources/config/application.yml.template +++ b/src/main/resources/config/application.yml.template @@ -48,6 +48,8 @@ petitii: days: 30 yellowAlert: 0.75 redAlert: 0.90 + baseUrl: + url: [[ Base URL, including port and protocol ]] --- spring: diff --git a/src/main/resources/templates/petitions_list.html b/src/main/resources/templates/petitions_list.html index 7dc727a..6761ac7 100644 --- a/src/main/resources/templates/petitions_list.html +++ b/src/main/resources/templates/petitions_list.html @@ -164,12 +164,16 @@

Petițiile mele

], rowCallback: function (row, data) { if (data.alertStatus === "red") { - $('td', row).css('background-color', '#ffb699'); + $('td', row).css('background-color', '#FFB699'); } if (data.alertStatus === "yellow") { $('td', row).css('background-color', '#FFFACD'); } + + if (data.alertStatus === "green") { + $('td', row).css('background-color', '#DAF7A6'); + } } }); diff --git a/src/test/java/ro/petitii/util/DateUtilTest.java b/src/test/java/ro/petitii/util/DateUtilTest.java index 99e6103..cb52037 100644 --- a/src/test/java/ro/petitii/util/DateUtilTest.java +++ b/src/test/java/ro/petitii/util/DateUtilTest.java @@ -2,6 +2,7 @@ import org.junit.Test; import ro.petitii.config.DeadlineConfig; +import ro.petitii.model.PetitionStatus; import java.text.DateFormat; import java.text.ParseException; @@ -27,31 +28,39 @@ public DateUtilTest() { public void testRed() throws ParseException { Date current = df.parse("14.01.2017"); Date deadline = df.parse("17.01.2017"); - assertEquals("red", alertStatus(current, deadline, config)); + assertEquals("red", alertStatus(PetitionStatus.Status.IN_PROGRESS, current, deadline, config)); } @Test public void testYellow() throws ParseException { Date current = df.parse("14.01.2017"); Date deadline = df.parse("18.01.2017"); - assertEquals("yellow", alertStatus(current, deadline, config)); + assertEquals("yellow", alertStatus(PetitionStatus.Status.IN_PROGRESS, current, deadline, config)); current = df.parse("14.01.2017"); deadline = df.parse("22.01.2017"); - assertEquals("yellow", alertStatus(current, deadline, config)); + assertEquals("yellow", alertStatus(PetitionStatus.Status.IN_PROGRESS, current, deadline, config)); } @Test public void testNone() throws ParseException { Date current = df.parse("14.01.2017"); Date deadline = df.parse("23.01.2017"); - assertEquals("", alertStatus(current, deadline, config)); + assertEquals("", alertStatus(PetitionStatus.Status.IN_PROGRESS, current, deadline, config)); } @Test public void testOverdue() throws ParseException { Date current = df.parse("14.01.2017"); Date deadline = df.parse("10.01.2017"); - assertEquals("red", alertStatus(current, deadline, config)); + assertEquals("red", alertStatus(PetitionStatus.Status.IN_PROGRESS, current, deadline, config)); + } + + @Test + public void testGreen() throws ParseException { + Date current = df.parse("14.01.2017"); + Date deadline = df.parse("10.01.2017"); + assertEquals("green", alertStatus(PetitionStatus.Status.SOLVED, current, deadline, config)); + assertEquals("green", alertStatus(PetitionStatus.Status.CLOSED, current, deadline, config)); } }