package com.battery.device.registry;
|
|
import java.time.ZoneId;
|
import java.util.Locale;
|
import java.util.Objects;
|
import com.battery.device.model.AdapterCapabilities;
|
|
/** 设备适配器实例的运行时配置。 */
|
public record AdapterInstanceConfig(
|
String adapterCode,
|
String adapterType,
|
String host,
|
int port,
|
int pollIntervalMs,
|
String timezoneId,
|
boolean enabled,
|
AdapterCapabilities capabilities)
|
{
|
public AdapterInstanceConfig
|
{
|
adapterCode = requireText(adapterCode, "adapterCode");
|
adapterType = requireText(adapterType, "adapterType").toUpperCase(Locale.ROOT);
|
host = requireText(host, "host");
|
timezoneId = requireText(timezoneId, "timezoneId");
|
capabilities = Objects.requireNonNull(capabilities, "capabilities");
|
if (port < 1 || port > 65535) throw new IllegalArgumentException("port must be between 1 and 65535");
|
if (pollIntervalMs < 1) throw new IllegalArgumentException("pollIntervalMs must be positive");
|
ZoneId.of(timezoneId);
|
if (!capabilities.discovery() || capabilities.control())
|
throw new IllegalArgumentException("MVP adapter must support discovery and remain read-only");
|
}
|
|
private static String requireText(String value, String field)
|
{
|
String normalized = Objects.requireNonNull(value, field).trim();
|
if (normalized.isEmpty()) throw new IllegalArgumentException(field + " must not be blank");
|
return normalized;
|
}
|
}
|