package org.unbrokendome.eventbus.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.Ordered;
import org.springframework.integration.dsl.core.PollerSpec;
import org.springframework.integration.dsl.core.Pollers;
import org.springframework.util.StringUtils;
import org.unbrokendome.eventbus.components.EventBusBuilder;
import org.unbrokendome.eventbus.config.EventBusConfigurer;
@ConfigurationProperties(prefix = "eventbus")
@SuppressWarnings("unused")
public class EventBusConfigurationProperties implements EventBusConfigurer, Ordered {
private String name;
private final Poller poller = new Poller();
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
@Override
public void configureEventBus(EventBusBuilder eventBusBuilder) {
if (StringUtils.hasLength(name)) {
eventBusBuilder.setName(name);
}
PollerSpec pollerSpec = poller.toPollerSpec();
if (pollerSpec != null) {
eventBusBuilder.setEventPoller(pollerSpec);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Poller getPoller() {
return poller;
}
public static class Poller {
private Integer fixedDelay;
private Integer fixedRate;
private String cron;
public Integer getFixedDelay() {
return fixedDelay;
}
public void setFixedDelay(Integer fixedDelay) {
this.fixedDelay = fixedDelay;
}
public Integer getFixedRate() {
return fixedRate;
}
public void setFixedRate(Integer fixedRate) {
this.fixedRate = fixedRate;
}
public String getCron() {
return cron;
}
public void setCron(String cron) {
this.cron = cron;
}
public PollerSpec toPollerSpec() {
if (fixedDelay != null) {
return Pollers.fixedDelay(fixedDelay);
} else if (fixedRate != null) {
return Pollers.fixedRate(fixedRate);
} else if (cron != null) {
return Pollers.cron(cron);
} else {
return null;
}
}
}
}