package com.battery.device.bts;
|
|
import java.time.Instant;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
import com.battery.device.api.DeviceAdapter;
|
import com.battery.device.model.AdapterCapabilities;
|
import com.battery.device.model.ChannelIdentity;
|
import com.battery.device.model.DetectedChannel;
|
import com.battery.device.model.HistoryAvailability;
|
import com.battery.device.model.HistoryPage;
|
import com.battery.device.model.RealtimeSnapshot;
|
|
public final class BtsDeviceAdapter implements DeviceAdapter
|
{
|
private final String adapterCode;
|
private final BtsTransport transport;
|
private final BtsXmlCodec codec;
|
private final AdapterCapabilities capabilities;
|
|
public BtsDeviceAdapter(String adapterCode, BtsTransport transport, BtsXmlCodec codec)
|
{
|
this(adapterCode, transport, codec, AdapterCapabilities.observeOnly());
|
}
|
|
public BtsDeviceAdapter(String adapterCode, BtsTransport transport, BtsXmlCodec codec,
|
AdapterCapabilities capabilities)
|
{
|
this.adapterCode = adapterCode;
|
this.transport = transport;
|
this.codec = codec;
|
this.capabilities = capabilities;
|
}
|
|
@Override
|
public String adapterCode()
|
{
|
return adapterCode;
|
}
|
|
@Override
|
public AdapterCapabilities capabilities()
|
{
|
return capabilities;
|
}
|
|
@Override
|
public List<DetectedChannel> discoverChannels()
|
{
|
return codec.parseDeviceInfo(transport.exchange(codec.getDeviceInfoRequest()));
|
}
|
|
@Override
|
public Map<ChannelIdentity, RealtimeSnapshot> inquire(Set<ChannelIdentity> channels)
|
{
|
if (channels == null || channels.isEmpty()) return Map.of();
|
return codec.parseSnapshots(transport.exchange(codec.inquireRequest(channels, false)), Instant.now());
|
}
|
|
@Override
|
public List<HistoryAvailability> inquireHistory(Set<ChannelIdentity> channels)
|
{
|
if (!capabilities.historyDownload()) throw new UnsupportedOperationException("History download is not supported");
|
if (channels == null || channels.isEmpty()) return List.of();
|
return codec.parseHistoryAvailability(transport.exchange(codec.inquireHistoryRequest(channels)));
|
}
|
|
@Override
|
public HistoryPage downloadHistory(ChannelIdentity channel, String btsTestId, long startPosition, int limit)
|
{
|
if (!capabilities.historyDownload()) throw new UnsupportedOperationException("History download is not supported");
|
return codec.parseHistory(transport.exchange(codec.downloadRequest(channel, btsTestId, startPosition, limit)),
|
channel, btsTestId, startPosition);
|
}
|
|
@Override
|
public void close()
|
{
|
transport.close();
|
}
|
}
|