PeersResponseEntity.java

package emissary.client.response;

import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashSet;
import java.util.Set;

@XmlRootElement(name = "peers")
@XmlAccessorType(XmlAccessType.NONE)
public class PeersResponseEntity extends BaseResponseEntity {

    private static final long serialVersionUID = 5686691885767273319L;

    private static final Logger logger = LoggerFactory.getLogger(PeersResponseEntity.class);

    @XmlElement(name = "local")
    private PeerList local = new PeerList();

    @XmlElement(name = "cluster")
    private Set<PeerList> cluster = new HashSet<>();

    public PeersResponseEntity() {}

    public PeersResponseEntity(PeerList local) {
        this.local = local;
    }

    public void addClusterPeers(PeerList pl) {
        if (cluster == null) {
            cluster = new HashSet<>();
        }
        this.cluster.add(pl);
    }

    public PeerList getLocal() {
        return local;
    }

    public void setLocal(PeerList local) {
        this.local = local;
    }

    public Set<PeerList> getCluster() {
        return cluster;
    }

    @Override
    public void append(BaseEntity e) {
        addErrors(e.getErrors());
        if (e instanceof PeersResponseEntity) {
            PeersResponseEntity pre = this.getClass().cast(e);
            addClusterPeers(pre.getLocal());
        }
    }

    @Override
    public void dumpToConsole() {
        getLocal().dumpToConsole();
        for (PeerList peer : getCluster()) {
            if (null != peer) {
                peer.dumpToConsole();
            }
        }
        Set<String> errors = getErrors();
        if (!errors.isEmpty()) {
            StringBuilder sb = new StringBuilder("\nErrors");
            for (String error : errors) {
                sb.append(error);
            }
            logger.error("{}", sb);
        }
    }
}