yeg
2026-08-26 e12439d1f4a94957d68cda653cb666702bc71040
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.ruoyi.device.registry;
 
import java.time.ZoneId;
import java.util.Locale;
import java.util.Objects;
import com.ruoyi.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;
    }
}