package com.ruoyi.device.bts; import java.time.Instant; import java.util.List; import java.util.Map; import java.util.Set; import com.ruoyi.device.api.DeviceAdapter; import com.ruoyi.device.model.AdapterCapabilities; import com.ruoyi.device.model.ChannelIdentity; import com.ruoyi.device.model.DetectedChannel; import com.ruoyi.device.model.HistoryPage; import com.ruoyi.device.model.RealtimeSnapshot; public final class BtsDeviceAdapter implements DeviceAdapter { private final String adapterCode; private final BtsTransport transport; private final BtsXmlCodec codec; public BtsDeviceAdapter(String adapterCode, BtsTransport transport, BtsXmlCodec codec) { this.adapterCode = adapterCode; this.transport = transport; this.codec = codec; } @Override public String adapterCode() { return adapterCode; } @Override public AdapterCapabilities capabilities() { return AdapterCapabilities.observeOnly(); } @Override public List discoverChannels() { return codec.parseDeviceInfo(transport.exchange(codec.getDeviceInfoRequest())); } @Override public Map inquire(Set channels) { if (channels == null || channels.isEmpty()) return Map.of(); return codec.parseSnapshots(transport.exchange(codec.inquireRequest(channels, false)), Instant.now()); } @Override public HistoryPage downloadHistory(ChannelIdentity channel, String btsTestId, long startPosition, int limit) { return codec.parseHistory(transport.exchange(codec.downloadRequest(channel, btsTestId, startPosition, limit)), channel, startPosition); } @Override public void close() { transport.close(); } }