createViewFromTos();
-
}
diff --git a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerAll.java b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerAll.java
new file mode 100644
index 00000000..99d8bc16
--- /dev/null
+++ b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerAll.java
@@ -0,0 +1,21 @@
+package de.samply.share.client.quality.report.views.fromto.scheduler;
+
+import de.samply.share.client.quality.report.views.fromto.ViewFromTo;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A scheduler that always creates one {@link ViewFromTo} with a date range of 1900 - 2100.
+ *
+ * It's meant to load all data at once.
+ */
+public enum ViewFromToSchedulerAll implements ViewFromToScheduler {
+
+ INSTANCE;
+
+ @Override
+ public List createViewFromTos() {
+ return Collections.singletonList(new ViewFromTo("1900-01-01T00:00:00+00:00",
+ "2100-01-01T00:00:00+00:00"));
+ }
+}
diff --git a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByMonthImpl.java b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByMonth.java
similarity index 68%
rename from src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByMonthImpl.java
rename to src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByMonth.java
index 55b72216..23c31370 100644
--- a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByMonthImpl.java
+++ b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByMonth.java
@@ -6,27 +6,24 @@
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
+import java.util.Objects;
-public class ViewFromToSchedulerByMonthImpl implements ViewFromToScheduler {
+public class ViewFromToSchedulerByMonth implements ViewFromToScheduler {
+ private final ViewFromToFactory viewFromToFactory;
private int numberOfYears = 20;
private int groupsModul = 5;
- private final ViewFromToFactory viewFromToFactory;
- public ViewFromToSchedulerByMonthImpl(ViewFromToFactory viewFromToFactory) {
- this.viewFromToFactory = viewFromToFactory;
+ public ViewFromToSchedulerByMonth(ViewFromToFactory viewFromToFactory) {
+ this.viewFromToFactory = Objects.requireNonNull(viewFromToFactory);
}
@Override
public List createViewFromTos() {
-
- List lastYearsSorted = getLastYearsSorted();
- return createViewFroms(lastYearsSorted);
-
+ return createViewFroms(getLastYearsSorted());
}
private List createViewFroms(List lastYearsSorted) {
-
List viewFromToList = new ArrayList<>();
Calendar calendar = new GregorianCalendar();
@@ -34,16 +31,10 @@ private List createViewFroms(List lastYearsSorted) {
int currentYear = calendar.get(Calendar.YEAR);
for (int month = 0; month < 12; month++) {
-
for (int year : lastYearsSorted) {
-
if (year < currentYear || month <= currentMonth) {
-
- ViewFromTo viewFromTo = viewFromToFactory.createMonth(month, year);
- viewFromToList.add(viewFromTo);
-
+ viewFromToList.add(viewFromToFactory.createMonth(year, month));
}
-
}
}
@@ -51,24 +42,20 @@ private List createViewFroms(List lastYearsSorted) {
}
private List getLastYearsSorted() {
-
List years = new ArrayList<>();
Calendar calendar = new GregorianCalendar();
int year = calendar.get(Calendar.YEAR);
for (int groupNumber = 0; groupNumber < groupsModul; groupNumber++) {
-
for (int i = year; i > year - numberOfYears; i--) {
if (i % groupsModul == groupNumber) {
years.add(i);
}
}
-
}
return years;
-
}
public void setGroupsModul(int groupsModul) {
@@ -78,14 +65,4 @@ public void setGroupsModul(int groupsModul) {
public void setNumberOfYears(int numberOfYears) {
this.numberOfYears = numberOfYears;
}
-
- // public static void main(String[] args) {
- //
- // BasicViewFromToScheduler basicViewFromToScheduler = new BasicViewFromToScheduler();
- // basicViewFromToScheduler.setViewFromToFactory(new ViewFromToFactory());
- //
- // List viewFroms = basicViewFromToScheduler.createViewFroms();
- //
- // }
-
}
diff --git a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByYearImpl.java b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByYear.java
similarity index 78%
rename from src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByYearImpl.java
rename to src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByYear.java
index 866ad3fe..ff439b3c 100644
--- a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByYearImpl.java
+++ b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerByYear.java
@@ -6,19 +6,19 @@
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
+import java.util.Objects;
-public class ViewFromToSchedulerByYearImpl implements ViewFromToScheduler {
+public class ViewFromToSchedulerByYear implements ViewFromToScheduler {
- private int years = 20;
private final ViewFromToFactory viewFromToFactory;
+ private int years = 20;
- public ViewFromToSchedulerByYearImpl(ViewFromToFactory viewFromToFactory) {
- this.viewFromToFactory = viewFromToFactory;
+ public ViewFromToSchedulerByYear(ViewFromToFactory viewFromToFactory) {
+ this.viewFromToFactory = Objects.requireNonNull(viewFromToFactory);
}
@Override
public List createViewFromTos() {
-
List viewFromToList = new ArrayList<>();
Calendar calendar = new GregorianCalendar();
@@ -36,5 +36,4 @@ public List createViewFromTos() {
public void setYears(int years) {
this.years = years;
}
-
}
diff --git a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactory.java b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactory.java
index cac9166f..e03f2e7d 100644
--- a/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactory.java
+++ b/src/main/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactory.java
@@ -1,55 +1,53 @@
package de.samply.share.client.quality.report.views.fromto.scheduler;
-import de.samply.share.client.model.EnumConfiguration;
+import static de.samply.share.client.model.EnumConfiguration.QUALITY_REPORT_GROUP_MODUL;
+import static de.samply.share.client.model.EnumConfiguration.QUALITY_REPORT_SCHEDULER_FORMAT;
+import static de.samply.share.client.model.EnumConfiguration.QUALITY_REPORT_SCHEDULER_YEARS;
+import static de.samply.share.client.util.db.ConfigurationUtil.getConfigurationElementValue;
+
+import de.samply.share.client.quality.report.QualityReportSchedulerFormat;
+import de.samply.share.client.quality.report.views.fromto.ViewFromTo;
import de.samply.share.client.quality.report.views.fromto.ViewFromToFactory;
-import de.samply.share.client.util.db.ConfigurationUtil;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
public class ViewFromToSchedulerFactory {
+ private static final Map FORMATS = Arrays.stream(
+ QualityReportSchedulerFormat.values()).collect(
+ Collectors.toMap(Enum::name, Function.identity()));
private final ViewFromToFactory viewFromToFactory = new ViewFromToFactory();
/**
- * Create Scheduler for View From-To.
+ * Creates a scheduler for {@link ViewFromTo ViewFromTos} according to the config.
*
- * @return View From-To Scheduler.
+ * @return a scheduler
*/
public ViewFromToScheduler createViewFromToScheduler() {
+ QualityReportSchedulerFormat format = FORMATS.getOrDefault(getConfigurationElementValue(
+ QUALITY_REPORT_SCHEDULER_FORMAT), QualityReportSchedulerFormat.YEAR);
- String format = ConfigurationUtil
- .getConfigurationElementValue(EnumConfiguration.QUALITY_REPORT_SCHEDULER_FORMAT);
-
- ViewFromToSchedulerFormat viewFromToSchedulerFormat = ViewFromToSchedulerFormat
- .getViewFromToSchedulerFormat(format);
- if (viewFromToSchedulerFormat == null) {
- viewFromToSchedulerFormat = ViewFromToSchedulerFormat.getDefault();
- }
-
- switch (viewFromToSchedulerFormat) {
-
- case BY_MONTH:
+ switch (format) {
+ case MONTH:
return createViewFromToSchedulerByMonthImpl();
- case BY_YEAR:
+ case YEAR:
return createViewFromToSchedulerByYearImpl();
+ case ALL:
+ return ViewFromToSchedulerAll.INSTANCE;
default:
- return null;
-
+ throw new IllegalStateException();
}
-
-
}
private ViewFromToScheduler createViewFromToSchedulerByMonthImpl() {
-
- ViewFromToSchedulerByMonthImpl viewFromToSchedulerByMonth = new ViewFromToSchedulerByMonthImpl(
+ ViewFromToSchedulerByMonth viewFromToSchedulerByMonth = new ViewFromToSchedulerByMonth(
viewFromToFactory);
- String groupsModulS = ConfigurationUtil
- .getConfigurationElementValue(EnumConfiguration.QUALITY_REPORT_GROUP_MODUL);
- Integer groupsModul = convert(groupsModulS);
- String yearsS = ConfigurationUtil
- .getConfigurationElementValue(EnumConfiguration.QUALITY_REPORT_SCHEDULER_YEARS);
- Integer years = convert(yearsS);
+ Integer groupsModul = tryParseInt(getConfigurationElementValue(QUALITY_REPORT_GROUP_MODUL));
+ Integer years = tryParseInt(getConfigurationElementValue(QUALITY_REPORT_SCHEDULER_YEARS));
if (groupsModul != null) {
viewFromToSchedulerByMonth.setGroupsModul(groupsModul);
@@ -63,67 +61,22 @@ private ViewFromToScheduler createViewFromToSchedulerByMonthImpl() {
}
private ViewFromToScheduler createViewFromToSchedulerByYearImpl() {
-
- ViewFromToSchedulerByYearImpl viewFromToSchedulerByYear = new ViewFromToSchedulerByYearImpl(
+ ViewFromToSchedulerByYear viewFromToSchedulerByYear = new ViewFromToSchedulerByYear(
viewFromToFactory);
- String yearsS = ConfigurationUtil
- .getConfigurationElementValue(EnumConfiguration.QUALITY_REPORT_SCHEDULER_YEARS);
- Integer years = convert(yearsS);
-
+ Integer years = tryParseInt(getConfigurationElementValue(QUALITY_REPORT_SCHEDULER_YEARS));
if (years != null) {
viewFromToSchedulerByYear.setYears(years);
}
return viewFromToSchedulerByYear;
-
}
- Integer convert(String number) {
-
+ private static Integer tryParseInt(String s) {
try {
- return Integer.valueOf(number);
-
+ return Integer.valueOf(s);
} catch (Exception e) {
return null;
}
}
-
- public enum ViewFromToSchedulerFormat {
-
- BY_YEAR(EnumConfiguration.QUALITY_REPORT_SCHEDULER_BY_YEAR.name()),
- BY_MONTH(EnumConfiguration.QUALITY_REPORT_SCHEDULER_BY_MONTH.name());
-
- String title;
-
- ViewFromToSchedulerFormat(String title) {
- this.title = title;
- }
-
- public static ViewFromToSchedulerFormat getDefault() {
- return BY_YEAR;
- }
-
- /**
- * Gets format of scheduler of view from-to .
- *
- * @param format format as String.
- * @return format of scheduler of view from-to.
- */
- public static ViewFromToSchedulerFormat getViewFromToSchedulerFormat(String format) {
-
- for (ViewFromToSchedulerFormat viewFromToSchedulerFormat : values()) {
-
- if (viewFromToSchedulerFormat.title.equals(format)) {
- return viewFromToSchedulerFormat;
- }
- }
-
- return null;
-
- }
-
- }
-
-
}
diff --git a/src/main/java/de/samply/share/client/util/db/ConfigurationUtil.java b/src/main/java/de/samply/share/client/util/db/ConfigurationUtil.java
index 0a70f76c..fefd532c 100644
--- a/src/main/java/de/samply/share/client/util/db/ConfigurationUtil.java
+++ b/src/main/java/de/samply/share/client/util/db/ConfigurationUtil.java
@@ -29,34 +29,20 @@ public class ConfigurationUtil {
private static final Logger logger = LoggerFactory.getLogger(ConfigurationUtil.class);
- private static final ConfigurationDao configurationDao;
- private static final ConfigurationTimingsDao configurationTimingsDao;
-
- static {
- configurationDao = new ConfigurationDao(ResourceManager.getConfiguration());
- configurationTimingsDao = new ConfigurationTimingsDao(ResourceManager.getConfiguration());
- }
-
// Prevent instantiation
private ConfigurationUtil() {
}
- /**
- * Get the configuration DAO.
- *
- * @return the configuration DAO
- */
- public static ConfigurationDao getConfigurationDao() {
- return configurationDao;
+ private static class ConfigurationDaoHolder {
+
+ static final ConfigurationDao INSTANCE = new ConfigurationDao(
+ ResourceManager.getConfiguration());
}
- /**
- * Get the configuration timings DAO.
- *
- * @return the configuration timings DAO
- */
- public static ConfigurationTimingsDao getConfigurationTimingsDao() {
- return configurationTimingsDao;
+ private static class ConfigurationTimingsDaoHolder {
+
+ static final ConfigurationTimingsDao INSTANCE = new ConfigurationTimingsDao(
+ ResourceManager.getConfiguration());
}
/**
@@ -66,7 +52,7 @@ public static ConfigurationTimingsDao getConfigurationTimingsDao() {
* @return the configuration element
*/
public static Configuration getConfigurationElement(EnumConfiguration configurationElement) {
- return configurationDao.fetchOneByName(configurationElement.name());
+ return ConfigurationDaoHolder.INSTANCE.fetchOneByName(configurationElement.name());
}
/**
@@ -77,7 +63,8 @@ public static Configuration getConfigurationElement(EnumConfiguration configurat
*/
public static ConfigurationTimings getConfigurationTimingsElement(
EnumConfigurationTimings configurationTimingsElement) {
- return configurationTimingsDao.fetchOneByName(configurationTimingsElement.name());
+ return ConfigurationTimingsDaoHolder.INSTANCE.fetchOneByName(
+ configurationTimingsElement.name());
}
/**
@@ -86,7 +73,7 @@ public static ConfigurationTimings getConfigurationTimingsElement(
* @param configuration the new configuration element to insert
*/
private static void insertConfigurationElement(Configuration configuration) {
- configurationDao.insert(configuration);
+ ConfigurationDaoHolder.INSTANCE.insert(configuration);
}
/**
@@ -95,7 +82,7 @@ private static void insertConfigurationElement(Configuration configuration) {
* @param configurationTimings the new configuration timing element to insert
*/
private static void insertConfigurationTimingsElement(ConfigurationTimings configurationTimings) {
- configurationTimingsDao.insert(configurationTimings);
+ ConfigurationTimingsDaoHolder.INSTANCE.insert(configurationTimings);
}
/**
@@ -104,7 +91,7 @@ private static void insertConfigurationTimingsElement(ConfigurationTimings confi
* @param configuration the configuration element to update
*/
private static void updateConfigurationElement(Configuration configuration) {
- configurationDao.update(configuration);
+ ConfigurationDaoHolder.INSTANCE.update(configuration);
}
/**
@@ -113,7 +100,7 @@ private static void updateConfigurationElement(Configuration configuration) {
* @param configurationTimings the configuration timing element to update
*/
private static void updateConfigurationTimingsElement(ConfigurationTimings configurationTimings) {
- configurationTimingsDao.update(configurationTimings);
+ ConfigurationTimingsDaoHolder.INSTANCE.update(configurationTimings);
}
/**
@@ -123,7 +110,7 @@ private static void updateConfigurationTimingsElement(ConfigurationTimings confi
*/
private static void deleteConfigurationElement(Configuration configuration) {
if (configuration != null) {
- configurationDao.delete(configuration);
+ ConfigurationDaoHolder.INSTANCE.delete(configuration);
}
}
@@ -133,7 +120,7 @@ private static void deleteConfigurationElement(Configuration configuration) {
* @param configurationTimings the configuration timing element to delete
*/
private static void deleteConfigurationTimingsElement(ConfigurationTimings configurationTimings) {
- configurationTimingsDao.delete(configurationTimings);
+ ConfigurationTimingsDaoHolder.INSTANCE.delete(configurationTimings);
}
/**
@@ -142,7 +129,8 @@ private static void deleteConfigurationTimingsElement(ConfigurationTimings confi
* @param configuration the configuration element to insert or update
*/
public static void insertOrUpdateConfigurationElement(Configuration configuration) {
- Configuration configurationElement = configurationDao.fetchOneByName(configuration.getName());
+ Configuration configurationElement = ConfigurationDaoHolder.INSTANCE.fetchOneByName(
+ configuration.getName());
if (configuration.getSetting() == null) {
deleteConfigurationElement(configurationElement);
} else if (configurationElement == null) {
@@ -161,7 +149,7 @@ public static void insertOrUpdateConfigurationElement(Configuration configuratio
*/
public static void insertOrUpdateConfigurationTimingsElement(
ConfigurationTimings configurationTimings) {
- ConfigurationTimings configurationTimingsElement = configurationTimingsDao
+ ConfigurationTimings configurationTimingsElement = ConfigurationTimingsDaoHolder.INSTANCE
.fetchOneByName(configurationTimings.getName());
if (configurationTimings.getSetting() == null) {
deleteConfigurationTimingsElement(configurationTimingsElement);
@@ -212,7 +200,6 @@ public static List getConfigurationElementValueList(
}
-
/**
* Get the int value of a configuration timing element.
*
diff --git a/src/main/resources/db/migration/V036__dktk_update_quality_report_scheduler.sql b/src/main/resources/db/migration/V036__dktk_update_quality_report_scheduler.sql
new file mode 100644
index 00000000..e5609c24
--- /dev/null
+++ b/src/main/resources/db/migration/V036__dktk_update_quality_report_scheduler.sql
@@ -0,0 +1,3 @@
+UPDATE samply.configuration SET setting='YEAR' WHERE name='QUALITY_REPORT_SCHEDULER_FORMAT';
+DELETE FROM samply.configuration WHERE name='QUALITY_REPORT_SCHEDULER_BY_YEAR';
+DELETE FROM samply.configuration WHERE name='QUALITY_REPORT_SCHEDULER_BY_MONTH';
diff --git a/src/test/java/de/samply/share/client/quality/report/views/fromto/ViewFromToFactoryTest.java b/src/test/java/de/samply/share/client/quality/report/views/fromto/ViewFromToFactoryTest.java
new file mode 100644
index 00000000..98690b48
--- /dev/null
+++ b/src/test/java/de/samply/share/client/quality/report/views/fromto/ViewFromToFactoryTest.java
@@ -0,0 +1,34 @@
+package de.samply.share.client.quality.report.views.fromto;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
+class ViewFromToFactoryTest {
+
+ private final ViewFromToFactory factory = new ViewFromToFactory();
+
+ @Test
+ void createYear() {
+ ViewFromTo viewFromTo = factory.createYear(2021);
+
+ assertEquals("2021-01-01T00:00:00Z", viewFromTo.getFrom());
+ assertEquals("2022-01-01T00:00:00Z", viewFromTo.getTo());
+ }
+
+ @Test
+ void createMonth_2() {
+ ViewFromTo viewFromTo = factory.createMonth(2021, 2);
+
+ assertEquals("2021-02-01T00:00:00Z", viewFromTo.getFrom());
+ assertEquals("2021-03-01T00:00:00Z", viewFromTo.getTo());
+ }
+
+ @Test
+ void createMonth_12() {
+ ViewFromTo viewFromTo = factory.createMonth(2021, 12);
+
+ assertEquals("2021-12-01T00:00:00Z", viewFromTo.getFrom());
+ assertEquals("2022-01-01T00:00:00Z", viewFromTo.getTo());
+ }
+}
diff --git a/src/test/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactoryTest.java b/src/test/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactoryTest.java
new file mode 100644
index 00000000..58c20fc6
--- /dev/null
+++ b/src/test/java/de/samply/share/client/quality/report/views/fromto/scheduler/ViewFromToSchedulerFactoryTest.java
@@ -0,0 +1,62 @@
+package de.samply.share.client.quality.report.views.fromto.scheduler;
+
+import static de.samply.share.client.model.EnumConfiguration.QUALITY_REPORT_SCHEDULER_FORMAT;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mockStatic;
+
+import de.samply.share.client.util.db.ConfigurationUtil;
+import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
+
+class ViewFromToSchedulerFactoryTest {
+
+ private final ViewFromToSchedulerFactory factory = new ViewFromToSchedulerFactory();
+
+ @Test
+ void createViewFromToScheduler_default() {
+ try (MockedStatic mocked = mockStatic(ConfigurationUtil.class)) {
+ mocked.when(() -> ConfigurationUtil.getConfigurationElementValue(
+ QUALITY_REPORT_SCHEDULER_FORMAT)).thenReturn(null);
+
+ ViewFromToScheduler scheduler = factory.createViewFromToScheduler();
+
+ assertTrue(scheduler instanceof ViewFromToSchedulerByYear);
+ }
+ }
+
+ @Test
+ void createViewFromToScheduler_QUALITY_REPORT_SCHEDULER_BY_YEAR() {
+ try (MockedStatic mocked = mockStatic(ConfigurationUtil.class)) {
+ mocked.when(() -> ConfigurationUtil.getConfigurationElementValue(
+ QUALITY_REPORT_SCHEDULER_FORMAT)).thenReturn("YEAR");
+
+ ViewFromToScheduler scheduler = factory.createViewFromToScheduler();
+
+ assertTrue(scheduler instanceof ViewFromToSchedulerByYear);
+ }
+ }
+
+ @Test
+ void createViewFromToScheduler_QUALITY_REPORT_SCHEDULER_BY_MONTH() {
+ try (MockedStatic mocked = mockStatic(ConfigurationUtil.class)) {
+ mocked.when(() -> ConfigurationUtil.getConfigurationElementValue(
+ QUALITY_REPORT_SCHEDULER_FORMAT)).thenReturn("MONTH");
+
+ ViewFromToScheduler scheduler = factory.createViewFromToScheduler();
+
+ assertTrue(scheduler instanceof ViewFromToSchedulerByMonth);
+ }
+ }
+
+ @Test
+ void createViewFromToScheduler_QUALITY_REPORT_SCHEDULER_ALL() {
+ try (MockedStatic mocked = mockStatic(ConfigurationUtil.class)) {
+ mocked.when(() -> ConfigurationUtil.getConfigurationElementValue(
+ QUALITY_REPORT_SCHEDULER_FORMAT)).thenReturn("ALL");
+
+ ViewFromToScheduler scheduler = factory.createViewFromToScheduler();
+
+ assertTrue(scheduler instanceof ViewFromToSchedulerAll);
+ }
+ }
+}