diff --git a/gas-sensor-web/pom.xml b/gas-sensor-web/pom.xml
index 4840a54..6a1afa4 100644
--- a/gas-sensor-web/pom.xml
+++ b/gas-sensor-web/pom.xml
@@ -63,6 +63,10 @@
fr.romainmoreau.gsmmodem
gsm-modem-client-web
+
+ org.apache.commons
+ commons-lang3
+
diff --git a/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/alert/AlertGasSensingUpdateEventListener.java b/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/alert/AlertGasSensingUpdateEventListener.java
index a518806..017ad7f 100644
--- a/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/alert/AlertGasSensingUpdateEventListener.java
+++ b/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/alert/AlertGasSensingUpdateEventListener.java
@@ -12,18 +12,16 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-import fr.romainmoreau.gassensor.datamodel.GasSensingInterval;
import fr.romainmoreau.gassensor.datamodel.GasSensingIntervalCategory;
-import fr.romainmoreau.gassensor.datamodel.GasSensingUpdate;
+import fr.romainmoreau.gassensor.web.common.GasSensingIntervalService;
import fr.romainmoreau.gassensor.web.common.GasSensingUpdateApplicationEvent;
import fr.romainmoreau.gassensor.web.data.GasSensingAlertRepository;
-import fr.romainmoreau.gassensor.web.data.GasSensingIntervalRepository;
@Component
@Profile("alert")
public class AlertGasSensingUpdateEventListener {
@Autowired
- private GasSensingIntervalRepository gasSensingIntervalRepository;
+ private GasSensingIntervalService gasSensingIntervalService;
@Autowired
private GasSensingAlertRepository gasSensingAlertRepository;
@@ -60,9 +58,9 @@ public void onGasSensingUpdateApplicationEvent(GasSensingUpdateApplicationEvent
return;
}
var lastCategory = gasSensingUpdateApplicationEvent.getLastGasSensingUpdate() != null
- ? getCategory(gasSensingUpdateApplicationEvent.getLastGasSensingUpdate())
+ ? gasSensingIntervalService.getCategory(gasSensingUpdateApplicationEvent.getLastGasSensingUpdate())
: null;
- var category = getCategory(gasSensingUpdate);
+ var category = gasSensingIntervalService.getCategory(gasSensingUpdate);
var alertOn = isAlertOn(category, gasSensingAlert.getThresholdCategory());
if (lastCategory == null || alertOn == isAlertOn(lastCategory, gasSensingAlert.getThresholdCategory())) {
return;
@@ -77,18 +75,6 @@ public void onGasSensingUpdateApplicationEvent(GasSensingUpdateApplicationEvent
applicationEventPublisher.publishEvent(alertApplicationEvent);
}
- private GasSensingIntervalCategory getCategory(GasSensingUpdate gasSensingUpdate) {
- var gasSensingIntervalList = gasSensingIntervalRepository
- .findByDescriptionAndUnit(gasSensingUpdate.getDescription(), gasSensingUpdate.getUnit());
- if (gasSensingIntervalList.isEmpty()) {
- return GasSensingIntervalCategory.FINE;
- }
- return gasSensingIntervalList.stream().filter(
- i -> (i.getMinValue() == null || gasSensingUpdate.getReadValue().compareTo(i.getMinValue()) >= 0)
- && (i.getMaxValue() == null || gasSensingUpdate.getReadValue().compareTo(i.getMaxValue()) < 0))
- .map(GasSensingInterval::getCategory).findAny().orElse(GasSensingIntervalCategory.FINE);
- }
-
private boolean isAlertOn(GasSensingIntervalCategory category, GasSensingIntervalCategory thresholdCategory) {
return category.ordinal() >= thresholdCategory.ordinal();
}
diff --git a/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/common/GasSensingIntervalService.java b/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/common/GasSensingIntervalService.java
new file mode 100644
index 0000000..9a1fad2
--- /dev/null
+++ b/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/common/GasSensingIntervalService.java
@@ -0,0 +1,27 @@
+package fr.romainmoreau.gassensor.web.common;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import fr.romainmoreau.gassensor.datamodel.GasSensingInterval;
+import fr.romainmoreau.gassensor.datamodel.GasSensingIntervalCategory;
+import fr.romainmoreau.gassensor.datamodel.GasSensingUpdate;
+import fr.romainmoreau.gassensor.web.data.GasSensingIntervalRepository;
+
+@Service
+public class GasSensingIntervalService {
+ @Autowired
+ private GasSensingIntervalRepository gasSensingIntervalRepository;
+
+ public GasSensingIntervalCategory getCategory(GasSensingUpdate gasSensingUpdate) {
+ var gasSensingIntervalList = gasSensingIntervalRepository
+ .findByDescriptionAndUnit(gasSensingUpdate.getDescription(), gasSensingUpdate.getUnit());
+ if (gasSensingIntervalList.isEmpty()) {
+ return GasSensingIntervalCategory.FINE;
+ }
+ return gasSensingIntervalList.stream().filter(
+ i -> (i.getMinValue() == null || gasSensingUpdate.getReadValue().compareTo(i.getMinValue()) >= 0)
+ && (i.getMaxValue() == null || gasSensingUpdate.getReadValue().compareTo(i.getMaxValue()) < 0))
+ .map(GasSensingInterval::getCategory).findAny().orElse(GasSensingIntervalCategory.FINE);
+ }
+}
diff --git a/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/data/GasSensingUpdatesRangeUpdater.java b/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/data/GasSensingUpdatesRangeUpdater.java
index 4a136ba..c9a17a2 100644
--- a/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/data/GasSensingUpdatesRangeUpdater.java
+++ b/gas-sensor-web/src/main/java/fr/romainmoreau/gassensor/web/data/GasSensingUpdatesRangeUpdater.java
@@ -8,6 +8,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
import fr.romainmoreau.gassensor.datamodel.GasSensingUpdatesRange;
@@ -22,6 +23,7 @@ public class GasSensingUpdatesRangeUpdater {
private GasSensingUpdatesRangeRepository gasSensingUpdatesRangeRepository;
@Scheduled(fixedDelay = 60000)
+ @Transactional
public void updateGasSensingUpdatesRanges() {
LOGGER.info("Updating gas sensing updates ranges");
List