Config.java
package org.flasby.christmas;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.flasby.christmas.monitor.PollingRunner;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Setter
@Configuration
@ConfigurationProperties(prefix = "org.flasby.config") // this is the prefix within the properties file used to build the config
public class Config {
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Login {
private int lifetimeindays = 31;
Login copy() {
return new Login(this.lifetimeindays);
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class App {
private String name = "define me in application.properties";
private String login = "define me in application.properties";
App copy() {
return new App(this.name, this.login);
}
}
@NoArgsConstructor
@AllArgsConstructor
@Getter
public static class About {
private String url = "define me in application.properties";
private String wibble = "123 Wibble";
@Override
protected About clone() {
return new About(this.url, this.wibble);
}
public void setUrl(String url) {
this.url = url;
}
public void setWibble(String wibble) {
this.wibble = wibble;
}
}
@NoArgsConstructor
public static class Run {
private Integer rate = 30; // Default to 30 second updates
private Map<Integer, Class<? extends PollingRunner>> runners = new HashMap<>();
private Map<Integer, String[]> params = new HashMap<>();
public Run(Integer rate, Map<Integer, Class<? extends PollingRunner>> runners, Map<Integer, String[]> params) {
this.rate = rate;
setRunners(runners);
setParams(params);
}
public Map<Integer, String[]> getParams() {
return Collections.unmodifiableMap(params);
}
public Map<Integer, Class<? extends PollingRunner>> getRunners() {
return Collections.unmodifiableMap(runners);
}
@Override
protected Run clone() {
return new Run(rate,runners,params);
}
public Integer getRate() {
return rate;
}
public void setRate(Integer rate) {
this.rate = rate;
}
public void setRunners(Map<Integer, Class<? extends PollingRunner>> runners) {
this.runners = Collections.unmodifiableMap(runners);
}
public void setParams(Map<Integer, String[]> params) {
this.params = Collections.unmodifiableMap(params);
}
}
private Login login = new Login();
private App app = new App();
private About about = new About();
public Login getLogin() { return login.copy(); }
public void setLogin(Login login) { this.login = login.copy(); }
public App getApp() { return app.copy(); }
public void setApp(App app) { this.app = app.copy(); }
public About getAbout() { return about.clone(); }
public void setAbout(About about) { this.about = about.clone(); }
// private Run run = new Run();
// public Run getRun() { return run.clone(); }
// public void setRun(Run run) { this.run = run.clone(); }
}