diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDao.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDao.java index 7a8e2056744fa2b6d6eca43b2c5dd3237c185064..5f90ea599654db226bb253e3896c25c0860152c9 100644 --- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDao.java +++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDao.java @@ -76,29 +76,4 @@ public interface DailyValueDao { */ List<Indicator> findIndicators(); - /** - * The last {@link DailyValue#getDate()} for the indicator on a year. - * - * @param indicator indicator to search - * @param year year - * @return last date or null - */ - LocalDate findLastDate(Indicator indicator, Integer year); - - /** - * @return the regions related to computed values - */ - List<Region> findRegions(); - - /** - * @param year the year of indicator values - * @return the regions related to computed values for a year - */ - List<Region> findRegionsByYear(Integer year); - - /** - * @return the years related to computed values - */ - List<Integer> findYears(); - } diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernate.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernate.java index 7453bf0c7d1eacde57f75700e17fda87887611d8..b417470b5966f48fa34553e07dcbd29db59494a6 100644 --- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernate.java +++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernate.java @@ -85,45 +85,4 @@ public class DailyValueDaoHibernate extends DaoHibernate<DailyValue> implements final var jpql = "SELECT DISTINCT i FROM DailyValue AS t JOIN t.indicator AS i JOIN t.indicator.period"; return super.findAllByJPQL(jpql, null, Indicator.class); } - - @Override - public final LocalDate findLastDate(final Indicator indicator, final Integer year) { - final var jpql = """ - SELECT MAX(t.date) - FROM DailyValue AS t - WHERE t.indicator=:indicator AND EXTRACT(YEAR FROM t.date) = :year"""; - return super.findOneByJPQL(jpql, Map.of("indicator", indicator, "year", year), LocalDate.class); - } - - @Override - public final List<Region> findRegions() { - final var jpql = """ - SELECT DISTINCT r - FROM DailyValue AS t - JOIN t.cell AS c - JOIN c.department AS d - JOIN d.region AS r - ORDER BY r.name"""; - return super.findAllByJPQL(jpql, null, Region.class); - } - - @Override - public final List<Region> findRegionsByYear(final Integer year) { - final var jpql = """ - SELECT DISTINCT r - FROM DailyValue AS t - JOIN t.cell AS c - JOIN c.department AS d - JOIN d.region AS r - WHERE EXTRACT(YEAR FROM t.date) = :year - ORDER BY r.name"""; - return super.findAllByJPQL(jpql, Map.of("year", year), Region.class); - } - - @Override - public final List<Integer> findYears() { - final var jpql = "SELECT DISTINCT EXTRACT(YEAR FROM date) AS year FROM DailyValue AS t ORDER BY year"; - return super.findAllByJPQL(jpql, null, Integer.class); - } - } diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDao.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDao.java index d9aa2f3e2ffb2750ac321c1ba78ab6ad89fab56e..28912056144ad028f3ee6ab5534d51635d8d4111 100644 --- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDao.java +++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDao.java @@ -124,4 +124,29 @@ public interface PraDailyValueDao { */ List<Indicator> findIndicators(Integer year); + /** + * The last {@link DailyValue#getDate()} for the indicator on a year. + * + * @param indicator indicator to search + * @param year year + * @return last date or null + */ + LocalDate findLastDate(Indicator indicator, Integer year); + + /** + * @return the regions related to computed values + */ + List<Region> findRegions(); + + /** + * @param year the year of indicator values + * @return the regions related to computed values for a year + */ + List<Region> findRegionsByYear(Integer year); + + /** + * @return the years related to computed values + */ + List<Integer> findYears(); + } diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernate.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernate.java index 43f00ae1daa8d976c26ba1991c50d9459602080f..aa143e76c1e2d0e1f79a96325df7f1f57a65c129 100644 --- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernate.java +++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernate.java @@ -260,6 +260,15 @@ public class PraDailyValueDaoHibernate extends DaoHibernate<PraDailyValue> imple return super.findAllByJPQL(jpql, Map.of("ids", ids), Indicator.class); } + @Override + public final LocalDate findLastDate(final Indicator indicator, final Integer year) { + final var jpql = """ + SELECT MAX(t.date) + FROM PraDailyValue AS t + WHERE t.indicator=:indicator AND EXTRACT(YEAR FROM t.date) = :year"""; + return super.findOneByJPQL(jpql, Map.of("indicator", indicator, "year", year), LocalDate.class); + } + private List<PraDailyValue> findPraDailyValues(final String sql, final Map<String, Object> params) { final List<PraDailyValue> values = new ArrayList<>(); try (ScopedEntityManager em = getScopedEntityManager()) { @@ -274,4 +283,35 @@ public class PraDailyValueDaoHibernate extends DaoHibernate<PraDailyValue> imple return values; } + @Override + public final List<Region> findRegions() { + final var jpql = """ + SELECT DISTINCT r + FROM PraDailyValue AS t + JOIN t.pra AS p + JOIN p.department AS d + JOIN d.region AS r + ORDER BY r.name"""; + return super.findAllByJPQL(jpql, null, Region.class); + } + + @Override + public final List<Region> findRegionsByYear(final Integer year) { + final var jpql = """ + SELECT DISTINCT r + FROM PraDailyValue AS t + JOIN t.pra AS p + JOIN p.department AS d + JOIN d.region AS r + WHERE EXTRACT(YEAR FROM t.date) = :year + ORDER BY r.name"""; + return super.findAllByJPQL(jpql, Map.of("year", year), Region.class); + } + + @Override + public final List<Integer> findYears() { + final var jpql = "SELECT DISTINCT EXTRACT(YEAR FROM date) AS year FROM DailyValue AS t ORDER BY year"; + return super.findAllByJPQL(jpql, null, Integer.class); + } + } diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java b/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java index 08bfa1660414f3c08adabf9e53675032a438ca62..9c66f37d9c53db2f13092260628272c5fd2011ee 100644 --- a/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java +++ b/www-server/src/main/java/fr/agrometinfo/www/server/rs/IndicatorResource.java @@ -15,7 +15,6 @@ import java.util.TreeMap; import org.geojson.Feature; import org.geojson.FeatureCollection; -import fr.agrometinfo.www.server.dao.DailyValueDao; import fr.agrometinfo.www.server.dao.IndicatorDao; import fr.agrometinfo.www.server.dao.PraDailyValueDao; import fr.agrometinfo.www.server.dao.PraDao; @@ -130,12 +129,6 @@ public class IndicatorResource implements IndicatorService { @Inject private CacheService cacheService; - /** - * DAO for {@link dailyValue}. - */ - @Inject - private DailyValueDao dailyValueDao; - /** * DAO for {@link PraDailyValue}. */ @@ -265,7 +258,7 @@ public class IndicatorResource implements IndicatorService { return (Map<String, String>) cacheService.getCache(); } // - final Map<String, String> result = dailyValueDao.findRegionsByYear(year).stream()// + final Map<String, String> result = praDailyValueDao.findRegionsByYear(year).stream()// .collect(LinkedHashMap::new, // (map, item) -> map.put(String.valueOf(item.getId()), item.getName()), // Map::putAll); @@ -310,7 +303,7 @@ public class IndicatorResource implements IndicatorService { final var firstDay = getDate(year, indicator.getPeriod().getFirstDay()); final var lastDay = getDate(year, indicator.getPeriod().getLastDay()); - final var date = dailyValueDao.findLastDate(indicator, year); + final var date = praDailyValueDao.findLastDate(indicator, year); final Double averageValue; final Double comparedValue; final Map<LocalDate, Float[]> tmpDailyValues; @@ -415,7 +408,7 @@ public class IndicatorResource implements IndicatorService { // final FeatureCollection collection = new FeatureCollection(); final Indicator indicator = indicatorDao.findByCodeAndPeriod(indicatorUid, periodCode); - final LocalDate date = dailyValueDao.findLastDate(indicator, year); + final LocalDate date = praDailyValueDao.findLastDate(indicator, year); final Region region; if (regionId == null) { region = null; @@ -459,7 +452,7 @@ public class IndicatorResource implements IndicatorService { return (List<Integer>) cacheService.getCache(); } // - final List<Integer> result = dailyValueDao.findYears(); + final List<Integer> result = praDailyValueDao.findYears(); cacheService.setCache(result); return result; } diff --git a/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernateTest.java b/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernateTest.java index 299f14ed47ae3cc4be23d6c8827d28d7cb183a0a..c11b039fb360e10316447aa92b17b4704b6be3cf 100644 --- a/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernateTest.java +++ b/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyValueDaoHibernateTest.java @@ -26,11 +26,16 @@ class DailyValueDaoHibernateTest { */ private final IndicatorDao indicatorDao = new IndicatorDaoHibernate(); + /** + * DAO to test. + */ + private final PraDailyValueDao praDailyValueDao = new PraDailyValueDaoHibernate(); + @Test void findAverageComputedValue() { final var indicator = indicatorDao.findByCodeAndPeriod("rainsum", "year"); - final var date = dao.findLastDate(indicator, YEAR); - final var region = dao.findRegions().get(0); + final var date = praDailyValueDao.findLastDate(indicator, YEAR); + final var region = praDailyValueDao.findRegions().get(0); final var actual = dao.findAverageComputedValue(indicator, date, (int) region.getId()); final Double expected = 22.d; assertEquals(expected, actual); @@ -44,33 +49,4 @@ class DailyValueDaoHibernateTest { assertEquals("rainsum", actual.get(0).getCode()); assertEquals("year", actual.get(0).getPeriod().getCode()); } - - @Test - void findLastDate() { - final var indicator = indicatorDao.findByCodeAndPeriod("rainsum", "year"); - final var actual = dao.findLastDate(indicator, YEAR); - assertNotNull(actual); - } - - @Test - void findRegions() { - final var actual = dao.findRegions(); - assertNotNull(actual); - assertEquals(Integer.valueOf(1), actual.size()); - } - - @Test - void findRegionsByYear() { - final var actual = dao.findRegionsByYear(YEAR); - assertNotNull(actual); - assertEquals(Integer.valueOf(1), actual.size()); - } - - @Test - void findYears() { - final var actual = dao.findYears(); - assertNotNull(actual); - assertEquals(Integer.valueOf(1), actual.size()); - assertEquals(Integer.valueOf(2023), actual.get(0)); - } } diff --git a/www-server/src/test/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernateTest.java b/www-server/src/test/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernateTest.java index 448a19facbb6e14250d3796aa85e97c3ec4eabf0..2da3fb0a2c671695807b93396c3533ed88fa51ec 100644 --- a/www-server/src/test/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernateTest.java +++ b/www-server/src/test/java/fr/agrometinfo/www/server/dao/PraDailyValueDaoHibernateTest.java @@ -1,22 +1,18 @@ package fr.agrometinfo.www.server.dao; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static fr.agrometinfo.www.server.dao.DailyValueDaoHibernateTest.YEAR; import org.junit.jupiter.api.Test; import fr.agrometinfo.www.server.model.Indicator; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Test PraDailyValueDao Hibernate implementation. */ class PraDailyValueDaoHibernateTest { - /** - * DAO to test. - */ - private final DailyValueDao dailyValueDao = new DailyValueDaoHibernate(); - /** * DAO to test. */ @@ -30,7 +26,7 @@ class PraDailyValueDaoHibernateTest { @Test void find() { final var indicator = indicatorDao.findByCodeAndPeriod("rainsum", "year"); - final var date = dailyValueDao.findLastDate(indicator, DailyValueDaoHibernateTest.YEAR); + final var date = dao.findLastDate(indicator, DailyValueDaoHibernateTest.YEAR); final var actual = dao.find(indicator, date); assertNotNull(actual); } @@ -43,4 +39,33 @@ class PraDailyValueDaoHibernateTest { assertEquals("rainsum", actual.get(0).getCode()); assertEquals("year", actual.get(0).getPeriod().getCode()); } + + @Test + void findLastDate() { + final var indicator = indicatorDao.findByCodeAndPeriod("rainsum", "year"); + final var actual = dao.findLastDate(indicator, YEAR); + assertNotNull(actual); + } + + @Test + void findRegions() { + final var actual = dao.findRegions(); + assertNotNull(actual); + assertEquals(Integer.valueOf(1), actual.size()); + } + + @Test + void findRegionsByYear() { + final var actual = dao.findRegionsByYear(YEAR); + assertNotNull(actual); + assertEquals(Integer.valueOf(1), actual.size()); + } + + @Test + void findYears() { + final var actual = dao.findYears(); + assertNotNull(actual); + assertEquals(Integer.valueOf(1), actual.size()); + assertEquals(Integer.valueOf(2023), actual.get(0)); + } }