|
@@ -11,32 +11,128 @@ import java.io.InputStream;
|
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Files;
|
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Path;
|
|
|
import java.nio.file.Paths;
|
|
import java.nio.file.Paths;
|
|
|
-import java.util.Map;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+
|
|
|
|
|
+import static java.util.Collections.emptyList;
|
|
|
|
|
+import static java.util.Collections.singletonList;
|
|
|
|
|
|
|
|
public class Configuration {
|
|
public class Configuration {
|
|
|
|
|
|
|
|
private static final Logger logger = LogManager.getLogger(Configuration.class);
|
|
private static final Logger logger = LogManager.getLogger(Configuration.class);
|
|
|
|
|
|
|
|
- private final DataProviderConfig dataProviderConfig;
|
|
|
|
|
- private final MessageBrokerConfig messageBrokerConfig;
|
|
|
|
|
- private final MonitoredObjectsConfig monitoredObjectsConfig;
|
|
|
|
|
|
|
+ private final Collection<ExecutableGroup> executableGroups;
|
|
|
|
|
+ private final Collection<MessageBrokerConfig> messageBrokerConfigs;
|
|
|
|
|
+ private final Collection<EmailServerConfig> emailServerConfigs;
|
|
|
|
|
+ private final Collection<DataProviderConfig> dataProviderConfigs;
|
|
|
|
|
|
|
|
- private Configuration(DataProviderConfig dataProvider, MessageBrokerConfig messageBroker, MonitoredObjectsConfig monitoredObjects) {
|
|
|
|
|
- this.dataProviderConfig = dataProvider;
|
|
|
|
|
- this.messageBrokerConfig = messageBroker;
|
|
|
|
|
- this.monitoredObjectsConfig = monitoredObjects;
|
|
|
|
|
|
|
+ private Configuration(
|
|
|
|
|
+ Collection<ExecutableGroup> executableGroups,
|
|
|
|
|
+ Collection<EmailServerConfig> emailServerConfigs,
|
|
|
|
|
+ Collection<MessageBrokerConfig> messageBrokerConfigs,
|
|
|
|
|
+ Collection<DataProviderConfig> dataProviderConfigs
|
|
|
|
|
+ ){
|
|
|
|
|
+ this.executableGroups = executableGroups;
|
|
|
|
|
+ this.messageBrokerConfigs = messageBrokerConfigs;
|
|
|
|
|
+ this.emailServerConfigs = emailServerConfigs;
|
|
|
|
|
+ this.dataProviderConfigs = dataProviderConfigs;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public DataProviderConfig getDataProviderConfig() {
|
|
|
|
|
- return dataProviderConfig;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ private static Configuration make(
|
|
|
|
|
+ List<TempUnitConfig> monitoredObjects,
|
|
|
|
|
+ Map<String, EmailServerConfig> emailServers,
|
|
|
|
|
+ Map<String, MessageBrokerConfig> messageBrokers,
|
|
|
|
|
+ Map<String, DataProviderConfig> dataProviders,
|
|
|
|
|
+ Map<String, GroupConfig> groups,
|
|
|
|
|
+ Map<String, SensLogGroupConfig> sensLogGroups,
|
|
|
|
|
+ Map<String, SuperGroupConfig> superGroups
|
|
|
|
|
+ ) {
|
|
|
|
|
|
|
|
- public MessageBrokerConfig getMessageBrokerConfig() {
|
|
|
|
|
- return messageBrokerConfig;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Map<String, ExecutableGroup> executableGroupsMap = new HashMap<>();
|
|
|
|
|
+ for (TempUnitConfig mObject : monitoredObjects) {
|
|
|
|
|
+ Set<String> unitGroups = mObject.groups;
|
|
|
|
|
+ List<TempSensorConfig> sensors = mObject.sensors;
|
|
|
|
|
+ if (unitGroups.isEmpty() && sensors.isEmpty()) {
|
|
|
|
|
+ throw new IllegalStateException("The monitored object '"+mObject.id+"' is not assigned to any groups.");
|
|
|
|
|
+ }
|
|
|
|
|
+ sensors = !sensors.isEmpty() ? sensors : singletonList(new TempAllSensorsConfig(mObject.period));
|
|
|
|
|
+ for (TempSensorConfig sensor : sensors) {
|
|
|
|
|
+ Set<String> sensorGroups = sensor.groups;
|
|
|
|
|
+ if (unitGroups.isEmpty() && sensorGroups.isEmpty()) {
|
|
|
|
|
+ throw new IllegalStateException("The monitored object '"+sensor.id+"' is not assigned to any groups.");
|
|
|
|
|
+ }
|
|
|
|
|
+ sensorGroups.addAll(unitGroups);
|
|
|
|
|
+ for (String groupId : sensorGroups) {
|
|
|
|
|
+ GroupConfig groupConfig = groups.get(groupId);
|
|
|
|
|
+ if (groupConfig == null) {
|
|
|
|
|
+ throw new IllegalStateException(
|
|
|
|
|
+ "Assigned group '"+groupId+"' to the monitored object '"+sensor.id+"' does not exist."
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ Integer period = groupConfig.getPeriod() != null ? groupConfig.getPeriod() : mObject.period;
|
|
|
|
|
+ period = period != null ? period : sensor.period;
|
|
|
|
|
+ if (period == null) {
|
|
|
|
|
+ throw new IllegalStateException(
|
|
|
|
|
+ "The monitored object '"+sensor.id+"' does not contain a valid 'period' value."
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!dataProviders.containsKey(groupConfig.getDataProviderId())) {
|
|
|
|
|
+ throw new IllegalStateException(
|
|
|
|
|
+ "Assigned data provider '"+groupConfig.getDataProviderId()+"' does not exist."
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!messageBrokers.containsKey(groupConfig.getMessageBrokerId())) {
|
|
|
|
|
+ throw new IllegalStateException(
|
|
|
|
|
+ "Assigned message broker '"+groupConfig.getMessageBrokerId()+"' does not exist."
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- public MonitoredObjectsConfig getWatchingObjectsConfig() {
|
|
|
|
|
- return monitoredObjectsConfig;
|
|
|
|
|
|
|
+ ExecutableGroup executableGroup = executableGroupsMap.computeIfAbsent(
|
|
|
|
|
+ groupId, k -> new ExecutableGroup(groupConfig)
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ MonitoredObject sensorMObj = sensor.id != null ? new MonitoredObject(sensor.id, period) : new AllMonitoredObjects(period);
|
|
|
|
|
+ executableGroup.swapPeriod(period);
|
|
|
|
|
+ executableGroup.computeIfAbsent(mObject.id, MonitoredObject::new)
|
|
|
|
|
+ .addNode(sensorMObj.getId(), sensorMObj);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (SensLogGroupConfig sensLogGroup : sensLogGroups.values()) {
|
|
|
|
|
+ executableGroupsMap.put(sensLogGroup.getId(), new ExecutableGroup(sensLogGroup));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, SuperGroup> executableSGroupsMap = new HashMap<>();
|
|
|
|
|
+ for (SuperGroupConfig sGConfig : superGroups.values()) {
|
|
|
|
|
+ if (sGConfig.getPeriod() == null) {
|
|
|
|
|
+ throw new IllegalStateException(
|
|
|
|
|
+ "The monitored object '"+sGConfig.getId()+"' does not contain a valid 'period' value."
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ SuperGroup superGroup = new SuperGroup(sGConfig);
|
|
|
|
|
+ for (String groupId : sGConfig.getGroups()) {
|
|
|
|
|
+ ExecutableGroup group = executableGroupsMap.get(groupId);
|
|
|
|
|
+ if (group == null) {
|
|
|
|
|
+ throw new IllegalStateException("Assigned group '"+groupId+"' does not exist.");
|
|
|
|
|
+ }
|
|
|
|
|
+ superGroup.addNode(groupId, group);
|
|
|
|
|
+ }
|
|
|
|
|
+ executableSGroupsMap.put(sGConfig.getId(), superGroup);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // TODO return
|
|
|
|
|
+ Collection<ExecutableGroup> execGroups = executableGroupsMap.values();
|
|
|
|
|
+ Collection<SuperGroup> execSGroups = executableSGroupsMap.values();
|
|
|
|
|
+ Collection<EmailServerConfig> emailServerConfigs = emailServers.values();
|
|
|
|
|
+ Collection<DataProviderConfig> dataProviderConfigs = dataProviders.values();
|
|
|
|
|
+ Collection<MessageBrokerConfig> messageBrokerConfigs = messageBrokers.values();
|
|
|
|
|
+
|
|
|
|
|
+ return new Configuration(
|
|
|
|
|
+ execGroups, emailServerConfigs, messageBrokerConfigs, dataProviderConfigs
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public static Configuration load(String fileName) throws IOException {
|
|
public static Configuration load(String fileName) throws IOException {
|
|
@@ -68,16 +164,15 @@ public class Configuration {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- PropertyConfig dataProviderProperties = createPropertyConfig(properties, "dataProvider");
|
|
|
|
|
- DataProviderConfig dataProviderConfig = DataProviderConfig.create(dataProviderProperties);
|
|
|
|
|
-
|
|
|
|
|
- PropertyConfig messageBrokerProperties = createPropertyConfig(properties, "messageBroker");
|
|
|
|
|
- MessageBrokerConfig messageBrokerConfig = MessageBrokerConfig.create(messageBrokerProperties);
|
|
|
|
|
-
|
|
|
|
|
- PropertyConfig monitoredObjectsProperties = createPropertyConfig(properties, "monitoredObjects");
|
|
|
|
|
- MonitoredObjectsConfig monitoredObjectsConfig = MonitoredObjectsConfig.create(monitoredObjectsProperties);
|
|
|
|
|
-
|
|
|
|
|
- return new Configuration(dataProviderConfig, messageBrokerConfig, monitoredObjectsConfig);
|
|
|
|
|
|
|
+ return make(
|
|
|
|
|
+ parseMonitoredObjects(createPropertyConfig(properties, "monitoredObjects")),
|
|
|
|
|
+ parseEmailServers(createPropertyConfig(properties, "emailServers")),
|
|
|
|
|
+ parseMessageBrokers(createPropertyConfig(properties, "messageBrokers")),
|
|
|
|
|
+ parseDataProviders(createPropertyConfig(properties, "dataProviders")),
|
|
|
|
|
+ parseGroups(createPropertyConfig(properties, "groups")),
|
|
|
|
|
+ parseSensLogGroups(createPropertyConfig(properties, "senslogGroups")),
|
|
|
|
|
+ parseSuperGroups(createPropertyConfig(properties, "superGroups"))
|
|
|
|
|
+ );
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
|
throw new IOException(String.format(
|
|
throw new IOException(String.format(
|
|
|
"Configuration file '%s' contains an error at '%s' attribute.", fileName, e.getMessage()
|
|
"Configuration file '%s' contains an error at '%s' attribute.", fileName, e.getMessage()
|
|
@@ -85,9 +180,136 @@ public class Configuration {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private static Map<String, EmailServerConfig> parseEmailServers(PropertyConfig config) {
|
|
|
|
|
+ Set<String> serverIds = config.getAttributes();
|
|
|
|
|
+ Map<String, EmailServerConfig> emailServers = new HashMap<>();
|
|
|
|
|
+ for (String id : serverIds) {
|
|
|
|
|
+ PropertyConfig serverConfig = config.getPropertyConfig(id);
|
|
|
|
|
+ emailServers.put(id, new EmailServerConfig(id,
|
|
|
|
|
+ serverConfig.getStringProperty("smtpHost"),
|
|
|
|
|
+ serverConfig.getIntegerProperty("smtpPort"),
|
|
|
|
|
+ serverConfig.getStringProperty("authUsername"),
|
|
|
|
|
+ serverConfig.getStringProperty("authPassword")
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+ return emailServers;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Map<String, MessageBrokerConfig> parseMessageBrokers(PropertyConfig config) {
|
|
|
|
|
+ Set<String> brokerIds = config.getAttributes();
|
|
|
|
|
+ Map<String, MessageBrokerConfig> messageBrokers = new HashMap<>(brokerIds.size());
|
|
|
|
|
+ for (String id : brokerIds) {
|
|
|
|
|
+ PropertyConfig brokerConfig = config.getPropertyConfig(id);
|
|
|
|
|
+ MessageBrokerType type = MessageBrokerType.of(brokerConfig.getStringProperty("type"));
|
|
|
|
|
+ messageBrokers.put(id, type.createConfig(id, brokerConfig.getPropertyConfig("config"))
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ return messageBrokers;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Map<String, DataProviderConfig> parseDataProviders(PropertyConfig config) {
|
|
|
|
|
+ Set<String> providerIds = config.getAttributes();
|
|
|
|
|
+ Map<String, DataProviderConfig> dataProviders = new HashMap<>(providerIds.size());
|
|
|
|
|
+ for (String id : providerIds) {
|
|
|
|
|
+ PropertyConfig providerConfig = config.getPropertyConfig(id);
|
|
|
|
|
+ DataProviderType type = DataProviderType.of(providerConfig.getStringProperty("type"));
|
|
|
|
|
+ dataProviders.put(id, type.createConfig(id, providerConfig.getPropertyConfig("config")));
|
|
|
|
|
+ }
|
|
|
|
|
+ return dataProviders;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Map<String, GroupConfig> parseGroups(PropertyConfig config) {
|
|
|
|
|
+ Set<String> groupIds = config.getAttributes();
|
|
|
|
|
+ Map<String, GroupConfig> groups = new HashMap<>(groupIds.size());
|
|
|
|
|
+ for (String id : groupIds) {
|
|
|
|
|
+ PropertyConfig groupConfig = config.getPropertyConfig(id);
|
|
|
|
|
+ groups.put(id, new GroupConfig(id,
|
|
|
|
|
+ groupConfig.getStringProperty("dataProvider"),
|
|
|
|
|
+ groupConfig.getStringProperty("messageBroker"),
|
|
|
|
|
+ ResultType.of(groupConfig.getStringProperty("resultType")),
|
|
|
|
|
+ groupConfig.getOptionalProperty("period", Integer.class).orElse(null)
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+ return groups;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Map<String, SuperGroupConfig> parseSuperGroups(PropertyConfig config) {
|
|
|
|
|
+ Set<String> groupIds = config.getAttributes();
|
|
|
|
|
+ Map<String, SuperGroupConfig> groups = new HashMap<>(groupIds.size());
|
|
|
|
|
+ for (String id : groupIds) {
|
|
|
|
|
+ PropertyConfig groupConfig = config.getPropertyConfig(id);
|
|
|
|
|
+
|
|
|
|
|
+ List<String> subGroupList = groupConfig.getArrayPropertyOf("groups", String.class);
|
|
|
|
|
+ Set<String> subGroupNames = new HashSet<>(subGroupList);
|
|
|
|
|
+ groups.put(id, new SuperGroupConfig(id,
|
|
|
|
|
+ groupConfig.getStringProperty("messageBroker"),
|
|
|
|
|
+ ResultType.of(groupConfig.getStringProperty("resultType")),
|
|
|
|
|
+ groupConfig.getOptionalProperty("period", Integer.class).orElse(null),
|
|
|
|
|
+ subGroupNames
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+ return groups;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Map<String, SensLogGroupConfig> parseSensLogGroups(PropertyConfig config) {
|
|
|
|
|
+ Set<String> groupIds = config.getAttributes();
|
|
|
|
|
+ Map<String, SensLogGroupConfig> groups = new HashMap<>(groupIds.size());
|
|
|
|
|
+ for (String id : groupIds) {
|
|
|
|
|
+ PropertyConfig groupConfig = config.getPropertyConfig(id);
|
|
|
|
|
+
|
|
|
|
|
+ List<String> subGroupList = groupConfig.getArrayPropertyOf("groups", String.class);
|
|
|
|
|
+ Set<String> subGroupNames = new HashSet<>(subGroupList);
|
|
|
|
|
+ groups.put(id, new SensLogGroupConfig(id,
|
|
|
|
|
+ groupConfig.getStringProperty("dataProvider"),
|
|
|
|
|
+ groupConfig.getStringProperty("messageBroker"),
|
|
|
|
|
+ ResultType.of(groupConfig.getStringProperty("resultType")),
|
|
|
|
|
+ groupConfig.getOptionalProperty("period", Integer.class).orElse(null),
|
|
|
|
|
+ subGroupNames
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+ return groups;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static List<TempUnitConfig> parseMonitoredObjects(PropertyConfig config) {
|
|
|
|
|
+ Set<String> unitIds = config.getAttributes();
|
|
|
|
|
+ List<TempUnitConfig> unitConfigs = new ArrayList<>(unitIds.size());
|
|
|
|
|
+ for (String unitId : unitIds) {
|
|
|
|
|
+ PropertyConfig unitConfig = config.getPropertyConfig(unitId);
|
|
|
|
|
+ Integer unitPeriod = unitConfig.getOptionalProperty("period", Integer.class).orElse(null);
|
|
|
|
|
+ List<String> unitGroupList = unitConfig.containsProperty("groups") ? unitConfig.getArrayPropertyOf("groups", String.class) : null;
|
|
|
|
|
+ Set<String> unitGroups = unitGroupList != null ? new HashSet<>(unitGroupList) : new HashSet<>();
|
|
|
|
|
+ List<TempSensorConfig> sensorConfigList = new ArrayList<>();
|
|
|
|
|
+ if (unitConfig.containsProperty("sensors")) {
|
|
|
|
|
+ Object sensorsObj = unitConfig.getProperty("sensors");
|
|
|
|
|
+ if (sensorsObj instanceof List) {
|
|
|
|
|
+ List<Integer> sensors = unitConfig.getArrayPropertyOf("sensors", Integer.class);
|
|
|
|
|
+ for (Integer sensorId : sensors) {
|
|
|
|
|
+ sensorConfigList.add(new TempSensorConfig(Integer.toString(sensorId), unitPeriod, new HashSet<>()));
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (sensorsObj instanceof Map) {
|
|
|
|
|
+ PropertyConfig sensorsConfig = unitConfig.getPropertyConfig("sensors");
|
|
|
|
|
+ Set<String> sensorIds = sensorsConfig.getAttributes();
|
|
|
|
|
+ for (String sensorId : sensorIds) {
|
|
|
|
|
+ PropertyConfig sensorConfig = sensorsConfig.getPropertyConfig(sensorId);
|
|
|
|
|
+ Integer sensorPeriod = sensorConfig.getOptionalProperty("period", Integer.class).orElse(unitPeriod);
|
|
|
|
|
+ List<String> sensorGroupList = sensorConfig.containsProperty("groups") ? sensorConfig.getArrayPropertyOf("groups", String.class) : emptyList();
|
|
|
|
|
+ sensorConfigList.add(new TempSensorConfig(sensorId, sensorPeriod, new HashSet<>(sensorGroupList)));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ unitConfigs.add(new TempUnitConfig(unitId, unitPeriod, sensorConfigList, unitGroups));
|
|
|
|
|
+ }
|
|
|
|
|
+ return unitConfigs;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static PropertyConfig createPropertyConfig(Map<Object, Object> properties, String propertyName) throws IOException {
|
|
private static PropertyConfig createPropertyConfig(Map<Object, Object> properties, String propertyName) throws IOException {
|
|
|
Object generalConfig = properties.get(propertyName);
|
|
Object generalConfig = properties.get(propertyName);
|
|
|
- if (!(generalConfig instanceof Map)) { throw new IOException(propertyName); }
|
|
|
|
|
|
|
+ if (generalConfig == null) {
|
|
|
|
|
+ return new PropertyConfig(propertyName);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!(generalConfig instanceof Map)) {
|
|
|
|
|
+ throw new IOException(propertyName);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
Map<?, ?> generalConfigMap = (Map<?, ?>) generalConfig;
|
|
Map<?, ?> generalConfigMap = (Map<?, ?>) generalConfig;
|
|
|
PropertyConfig propertyConfig = new PropertyConfig(propertyName);
|
|
PropertyConfig propertyConfig = new PropertyConfig(propertyName);
|
|
@@ -98,4 +320,52 @@ public class Configuration {
|
|
|
}
|
|
}
|
|
|
return propertyConfig;
|
|
return propertyConfig;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public Collection<MessageBrokerConfig> getMessageBrokerConfigs() {
|
|
|
|
|
+ return messageBrokerConfigs;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public Collection<EmailServerConfig> getEmailServerConfigs() {
|
|
|
|
|
+ return emailServerConfigs;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public Collection<DataProviderConfig> getDataProviderConfigs() {
|
|
|
|
|
+ return dataProviderConfigs;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public Collection<ExecutableGroup> getExecutableGroups() {
|
|
|
|
|
+ return executableGroups;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static class TempUnitConfig {
|
|
|
|
|
+ private final String id;
|
|
|
|
|
+ private final Integer period;
|
|
|
|
|
+ private final List<TempSensorConfig> sensors;
|
|
|
|
|
+ private final Set<String> groups;
|
|
|
|
|
+
|
|
|
|
|
+ private TempUnitConfig(String id, Integer period, List<TempSensorConfig> sensors, Set<String> groups) {
|
|
|
|
|
+ this.id = id;
|
|
|
|
|
+ this.period = period;
|
|
|
|
|
+ this.sensors = sensors;
|
|
|
|
|
+ this.groups = groups;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static class TempSensorConfig {
|
|
|
|
|
+ private final String id;
|
|
|
|
|
+ private final Integer period;
|
|
|
|
|
+ private final Set<String> groups;
|
|
|
|
|
+
|
|
|
|
|
+ private TempSensorConfig(String id, Integer period, Set<String> groups) {
|
|
|
|
|
+ this.id = id;
|
|
|
|
|
+ this.period = period;
|
|
|
|
|
+ this.groups = groups;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static class TempAllSensorsConfig extends TempSensorConfig {
|
|
|
|
|
+ private TempAllSensorsConfig(Integer period) {
|
|
|
|
|
+ super(null, period, new HashSet<>());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|