diff --git a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerConfig.java b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerConfig.java deleted file mode 100644 index 40f21fa5a1..0000000000 --- a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.box.l10n.mojito.quartz.multi; - -import java.util.List; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ConfigurationProperties("l10n.org.multi-quartz") -@ConditionalOnProperty(name = "l10n.org.multi-quartz.enabled", havingValue = "true") -public class QuartzMultiSchedulerConfig { - - List schedulerConfigs; - - public List getSchedulerConfigs() { - return schedulerConfigs; - } - - public void setSchedulerConfigs(List schedulerConfigs) { - this.schedulerConfigs = schedulerConfigs; - } -} diff --git a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerConfigProperties.java b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerConfigProperties.java new file mode 100644 index 0000000000..1b74fe641b --- /dev/null +++ b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerConfigProperties.java @@ -0,0 +1,61 @@ +package com.box.l10n.mojito.quartz.multi; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.PostConstruct; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties("l10n.org.multi-quartz") +@ConditionalOnProperty(name = "l10n.org.multi-quartz.enabled", havingValue = "true") +public class QuartzMultiSchedulerConfigProperties { + + Map scheduler; + + List schedulerConfigs = new ArrayList<>(); + + public Map getScheduler() { + return scheduler; + } + + public void setScheduler(Map scheduler) { + this.scheduler = scheduler; + } + + public List getSchedulerConfigs() { + return schedulerConfigs; + } + + @PostConstruct + public void init() { + schedulerConfigs.addAll(extractSchedulerConfigs()); + } + + private Collection extractSchedulerConfigs() { + Map configs = new HashMap<>(); + + for (Map.Entry entry : scheduler.entrySet()) { + String schedulerName = entry.getKey().substring(0, entry.getKey().indexOf(".")); + SchedulerConfig schedulerConfig = configs.getOrDefault(schedulerName, new SchedulerConfig()); + schedulerConfig.setName(schedulerName); + if (schedulerConfig.getQuartz() == null) { + schedulerConfig.setQuartz(new HashMap<>()); + } + String propertyName = entry.getKey().substring(entry.getKey().indexOf(".") + 1); + schedulerConfig + .getQuartz() + .put( + propertyName.startsWith("quartz.") + ? propertyName.substring(propertyName.indexOf(".") + 1) + : propertyName, + entry.getValue()); + configs.put(schedulerName, schedulerConfig); + } + return configs.values(); + } +} diff --git a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerFactory.java b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerFactory.java index 20825986a2..d6cdc58d63 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerFactory.java +++ b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/QuartzMultiSchedulerFactory.java @@ -28,7 +28,7 @@ public class QuartzMultiSchedulerFactory { @Autowired ApplicationContext applicationContext; - @Autowired QuartzMultiSchedulerConfig quartzMultiSchedulerConfig; + @Autowired QuartzMultiSchedulerConfigProperties quartzMultiSchedulerConfigProperties; @Autowired(required = false) QuartzMetricsReportingJobListener quartzMetricsReportingJobListener; @@ -39,7 +39,7 @@ public class QuartzMultiSchedulerFactory { @PostConstruct public void createSchedulers() { - for (SchedulerConfig config : quartzMultiSchedulerConfig.getSchedulerConfigs()) { + for (SchedulerConfig config : quartzMultiSchedulerConfigProperties.getSchedulerConfigs()) { Map quartzProps = config.getQuartz(); Properties properties = new Properties(); diff --git a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/SchedulerConfig.java b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/SchedulerConfig.java index 479a49658a..4dc1669d4b 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/SchedulerConfig.java +++ b/webapp/src/main/java/com/box/l10n/mojito/quartz/multi/SchedulerConfig.java @@ -2,17 +2,9 @@ import java.util.HashMap; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; -@Configuration -@ConditionalOnProperty(name = "l10n.org.multi-quartz.enabled", havingValue = "true") public class SchedulerConfig { - Logger logger = LoggerFactory.getLogger(SchedulerConfig.class); - private String name; private Map quartz = new HashMap<>();