package com.ruoyi.shadow.facts; import java.util.ArrayList; import java.util.Collections; import java.util.List; public final class ShadowLegacyQueueResult { public enum Status { AVAILABLE, LEGACY_RESULT_UNAVAILABLE } public enum DataType { INT16, INT32 } private final Status status; private final String reasonCode; private final List writes; private ShadowLegacyQueueResult(Status status, String reasonCode, List writes) { this.status = status; this.reasonCode = reasonCode; this.writes = Collections.unmodifiableList( new ArrayList(writes)); } public static ShadowLegacyQueueResult available( List writes) { return new ShadowLegacyQueueResult(Status.AVAILABLE, "LEGACY_RESULT_AVAILABLE", writes); } public static ShadowLegacyQueueResult unavailable(String missing) { return new ShadowLegacyQueueResult(Status.LEGACY_RESULT_UNAVAILABLE, "LEGACY_RESULT_UNAVAILABLE:" + missing, Collections.emptyList()); } public Status getStatus() { return status; } public String getReasonCode() { return reasonCode; } public List getWrites() { return writes; } public String getWriteAddresses() { StringBuilder addresses = new StringBuilder(); for (LegacyRegisterWrite write : writes) { if (addresses.length() > 0) { addresses.append(','); } addresses.append(write.getAddress()); } return addresses.toString(); } public LegacyRegisterWrite write(String address) { for (LegacyRegisterWrite write : writes) { if (write.getAddress().equals(address)) { return write; } } return null; } public static final class LegacyRegisterWrite { private final String address; private final DataType dataType; private final List values; private final int writeSequence; private final boolean trigger; LegacyRegisterWrite(String address, DataType dataType, List values, int writeSequence, boolean trigger) { this.address = address; this.dataType = dataType; this.values = Collections.unmodifiableList( new ArrayList(values)); this.writeSequence = writeSequence; this.trigger = trigger; } public String getAddress() { return address; } public DataType getDataType() { return dataType; } public List getValues() { return values; } public int getWriteSequence() { return writeSequence; } public boolean isTrigger() { return trigger; } } }