Skip to content

Commit

Permalink
Merge pull request #34 from gov-ithub/feat/pet-99-and-101
Browse files Browse the repository at this point in the history
Added a green alert + base url for e-mails
  • Loading branch information
sorinvasilescu authored Feb 1, 2017
2 parents 98dc52d + 60486bb commit faa87eb
Show file tree
Hide file tree
Showing 10 changed files with 60 additions and 51 deletions.
4 changes: 2 additions & 2 deletions src/main/java/ro/petitii/config/ImapConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
27 changes: 6 additions & 21 deletions src/main/java/ro/petitii/config/ServerConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,23 @@
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;

import java.net.InetAddress;
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;
}
}
4 changes: 2 additions & 2 deletions src/main/java/ro/petitii/config/SmtpConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
20 changes: 12 additions & 8 deletions src/main/java/ro/petitii/tasks/CronScheduler.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 ...");
}
}
}
4 changes: 2 additions & 2 deletions src/main/java/ro/petitii/tasks/DeadlineChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ private Map<String, List<Petition>> petitionNotifications(List<Petition> petitio
Map<String, List<Petition>> 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<Petition> alertList = result.computeIfAbsent(alert, k -> new LinkedList<>());
alertList.add(petition);
}
Expand Down
23 changes: 14 additions & 9 deletions src/main/java/ro/petitii/util/DateUtil.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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) {
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/config/application.yml.template
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ petitii:
days: 30
yellowAlert: 0.75
redAlert: 0.90
baseUrl:
url: [[ Base URL, including port and protocol ]]

---
spring:
Expand Down
6 changes: 5 additions & 1 deletion src/main/resources/templates/petitions_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,16 @@ <h2>Petițiile mele</h2>
],
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');
}
}
});

Expand Down
19 changes: 14 additions & 5 deletions src/test/java/ro/petitii/util/DateUtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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));
}
}

0 comments on commit faa87eb

Please sign in to comment.