package org.infinispan.xsite.status; import java.util.LinkedList; import java.util.List; /** * A {@link SiteStatus} builder based on its online and offline members. * * @author Pedro Ruivo * @since 8.2 */ public abstract class AbstractSiteStatusBuilder<E> { private final List<E> onlineElements; private final List<E> offlineElements; protected AbstractSiteStatusBuilder() { offlineElements = new LinkedList<>(); onlineElements = new LinkedList<>(); } /** * Adds the element with an online connection to the site. * * @param member The member. */ public final void onlineOn(E member) { onlineElements.add(member); } /** * Adds the member with an offline connection to the site. * * @param member The member. */ public final void offlineOn(E member) { offlineElements.add(member); } /** * @return {@link SiteStatus} created. */ public final SiteStatus build() { if (isOnline()) { return OnlineSiteStatus.getInstance(); } else if (isOffline()) { return OfflineSiteStatus.getInstance(); } else { return createMixedStatus(onlineElements, offlineElements); } } protected boolean isOnline() { return !onlineElements.isEmpty() && offlineElements.isEmpty(); } protected boolean isOffline() { return onlineElements.isEmpty() && !offlineElements.isEmpty(); } protected abstract SiteStatus createMixedStatus(List<E> onlineElements, List<E> offlineElements); }